
Используйте Claude с OpenAI SDK: совместимая с OpenAI конечная точка, потоковая передача, инструменты и ограничения
Код, написанный для OpenAI SDK, может вызывать Claude без переработки: укажите в base_url адрес шлюза /v1, используйте ключ шлюза и идентификатор модели Claude. Конечная точка принимает запросы Chat Completions, передаёт потоковые ответы в том же формате и поддерживает вызов функций. Некоторые возможности Claude доступны только в нативном формате Anthropic; в последнем разделе объясняется, когда стоит перейти на него.
Сведения о конечной точке
| Параметр | Значение |
|---|---|
| Базовый URL | https://aiprimetech.io/v1 |
| Конечная точка чата | POST https://aiprimetech.io/v1/chat/completions |
| Список моделей | GET https://aiprimetech.io/v1/models |
| Аутентификация | Authorization: Bearer <key>; x-api-key также принимается |
| Модели | Идентификаторы Claude, например claude-sonnet-5; идентификаторы GPT с ключом из группы Codex |
Python
pip install openaiimport os
from openai import OpenAI
client = OpenAI(base_url="https://aiprimetech.io/v1", api_key=os.environ["AIPRIME_API_KEY"])
resp = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain idempotency keys in two sentences."},
],
)
print(resp.choices[0].message.content)
print(resp.usage)base_url должен заканчиваться на /v1: SDK добавляет /chat/completions к нему. Без /v1 запрос попадает на сайт и возвращает HTML; при /v1 дважды возвращает 404 page not found.
Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://aiprimetech.io/v1", apiKey: process.env.AIPRIME_API_KEY });
const resp = await client.chat.completions.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku about retries." }],
});
console.log(resp.choices[0].message.content);Потоковая передача
stream = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=2048,
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Outline a zero-downtime migration."}],
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage)Используйте потоковую передачу для длинных ответов: обычный запрос должен завершиться до истечения тайм-аута клиента, а потоковый — нет. include_usage добавляет финальный фрагмент с количеством токенов. Подробнее о том, почему это важно, — в потоковой передаче ответов LLM.
Вызов функций
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="claude-sonnet-5", max_tokens=512, tools=tools,
messages=[{"role": "user", "content": "What is the weather in Paris?"}],
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments) # get_weather {"city": "Paris"}Ответ приходит с finish_reason: "tool_calls" и в стиле OpenAI tool_calls. Выполните функцию, добавьте tool сообщение с результатом и соответствующим tool_call_id, затем выполните повторный вызов — точно так же, как с моделями OpenAI.
Рассуждения и размышления
reasoning_effort соответствует настройке усилий Claude и принимает low, medium, high, xhigh или max. Значение none отклоняется. Когда модель размышляет, её рассуждения поступают в отдельном reasoning_content поле рядом с content, поэтому код, который читает message.content продолжает работать без изменений.
resp = client.chat.completions.create(
model="claude-opus-5-5", max_tokens=4096, reasoning_effort="high",
messages=[{"role": "user", "content": "Find the bug in this function: ..."}],
)Модели
| Идентификатор модели | Для каких задач |
|---|---|
claude-sonnet-5 | Основной выбор для программирования и работы с агентами: быстрая, мощная, со средней стоимостью. |
claude-opus-5-5 | Более сложные рассуждения, масштабный рефакторинг, длительная работа агентов. |
claude-fable-5-1 | Самая мощная и дорогая; используйте её для наиболее сложных задач. |
claude-haiku-4-5 | Недорогая и быстрая: заголовки, краткие изложения, классификация, небольшие шаги. |
Используйте эти идентификаторы в точности как указано. Старые идентификаторы с датами, такие как claude-3-5-sonnet-20241022 по-прежнему встречаются в некоторых списках моделей, но не обслуживаются и возвращают ошибку о неподдерживаемой модели.
Когда стоит использовать нативный API Anthropic
Формат OpenAI поддерживает чат, потоковую передачу, инструменты и изображения. Используйте собственный формат Messages от Anthropic на том же шлюзе, если вам нужны явные точки разделения для кеширования промптов, блоки размышлений, передаваемые между ходами диалога, PDF-документы или ссылки на источники. руководство по Anthropic Python SDK и настройка Руководство по Vercel AI SDK описывают этот вариант.
Устранение неполадок
| Что вы видите | Причина | Решение |
|---|---|---|
Ошибка разбора JSON, ответ начинается с < | base_url без /v1 | https://aiprimetech.io/v1 |
404 page not found | /v1 дважды | Ровно один /v1 |
401 Invalid API key | Ключ отсутствует в процессе или указан неверно | Проверьте переменную; ключ относится к одному шлюзу |
| Модель не поддерживается | Старый идентификатор модели с датой или идентификатор с опечаткой | Используйте идентификатор из таблицы выше |
'none' is not supported | reasoning_effort="none" | Используйте low или выше либо не указывайте его |
429 Concurrency limit exceeded for user | Слишком много одновременных запросов | Ограничьте число параллельных запросов; см. ограничения частоты запросов и повторные попытки |
| Тайм-ауты при длинных ответах | Долгий запрос без потоковой передачи | Используйте потоковую передачу или увеличьте тайм-аут клиента |
Часто задаваемые вопросы
Можно ли использовать Claude с OpenAI SDK?
Какой базовый URL использовать для Claude в OpenAI SDK?
Работает ли вызов функций с Claude через формат OpenAI?
Когда стоит использовать нативный API Anthropic?
Получите ключ API — учётная запись Anthropic и запись в лист ожидания не нужны.
Получить ключ APIAI Prime Tech — независимый API-шлюз. Он не связан с Anthropic, не одобрен этой компанией и не является её реселлером. Claude и названия связанных моделей — товарные знаки их соответствующих владельцев.