logo

Формат Anthropic

LLMoxy предоставляет полностью совместимый интерфейс Anthropic Messages API, оптимизированный для моделей серии Claude. Пользователям официального SDK Anthropic достаточно изменить base_url для переключения.

Базовый URL

https://llmoxy.com/v1

Аутентификация

Поддерживаются два способа аутентификации:

Способ 1: x-api-key (рекомендуется)

x-api-key: YOUR_API_KEY

Способ 2: Authorization

Authorization: Bearer YOUR_API_KEY

Messages API

Основной диалоговый интерфейс Claude.

URL запроса

POST /v1/messages

Пример запроса

curl https://llmoxy.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "Напишите алгоритм бинарного поиска на Python"
}
]
}'

Параметры запроса

ПараметрТипОбязательноОписание
modelstringДаНазвание модели
messagesarrayДаСписок сообщений диалога
max_tokensintegerДаМаксимальное количество генерируемых токенов
systemstringНетСистемный промпт
temperaturenumberНетПараметр температуры, 0–1
top_pnumberНетПараметр nucleus sampling
streambooleanНетВключить потоковый вывод
stop_sequencesarrayНетСтоп-последовательности

Формат сообщений

В отличие от OpenAI, формат Anthropic использует отдельный параметр для системного промпта:

{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"system": "Вы эксперт по программированию на Python",
"messages": [
{
"role": "user",
"content": "Напишите быструю сортировку"
},
{
"role": "assistant",
"content": "Хорошо, я напишу быструю сортировку на Python..."
},
{
"role": "user",
"content": "Добавьте подробные комментарии"
}
]
}

Примечание

  • messages могут содержать только роли user и assistant
  • Должны начинаться с сообщения user
  • Сообщения user и assistant должут чередоваться

Формат ответа

{
"id": "msg_123",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Это содержимое ответа Claude"
}
],
"model": "claude-sonnet-4-20250514",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 25,
"output_tokens": 150
}
}

Потоковый вывод

Установите stream: true для включения потокового вывода:

curl https://llmoxy.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Привет"}],
"stream": true
}'

Формат потокового ответа

event: message_start
data: {"type":"message_start","message":{"id":"msg_123",...}}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"П"}}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"р"}}

event: message_stop
data: {"type":"message_stop"}

Поддерживаемые модели

МодельОписаниеДоступные группы
claude-opus-4-20250514Максимальная производительностьMax, Kiro
claude-sonnet-4-20250514Сбалансированный выборMax, Kiro
claude-haiku-4-20250414Быстрый ответMax, Kiro

ПОДСКАЗКА Точный список доступных моделей см. на официальной площадке.

Поддержка мультимодальности

Claude поддерживает ввод изображений:

{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRg..."
}
},
{
"type": "text",
"text": "Что на этой картинке?"
}
]
}
]
}

Поддерживаемые форматы изображений: JPEG, PNG, GIF, WebP. Максимум 5 МБ на изображение.

Примеры кода

Python (официальный SDK)

from anthropic import Anthropic

client = Anthropic(
api_key="YOUR_API_KEY",
base_url="https://llmoxy.com/v1"
)

message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": "Напишите декоратор Python"}
]
)

print(message.content[0].text)

Python (потоковый)

with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Напишите статью"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)

Node.js (официальный SDK)

import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://llmoxy.com/v1'
});

const message = await client.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 1024,
messages: [
{ role: 'user', content: 'Напишите быструю сортировку' }
]
});

console.log(message.content[0].text);

cURL

curl https://llmoxy.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Claude!"}
]
}'

Обработка ошибок

Формат ответа об ошибке

{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Описание ошибки"
}
}

Распространённые типы ошибок

Тип ошибкиОписание
invalid_request_errorОшибка параметра запроса
authentication_errorОшибка аутентификации
permission_errorНедостаточно прав
not_found_errorРесурс не найден
rate_limit_errorПревышен лимит запросов
api_errorВнутренняя ошибка
overloaded_errorПерегрузка сервиса

Пример обработки ошибок

from anthropic import Anthropic, APIError

client = Anthropic(
api_key="YOUR_API_KEY",
base_url="https://llmoxy.com/v1"
)

try:
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}]
)
except APIError as e:
print(f"Тип ошибки: {e.type}")
print(f"Сообщение об ошибке: {e.message}")

Расширенное использование

1. Системный промпт

message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="Вы эксперт по Python, хорошо разбираетесь в анализе данных и машинном обучении.",
messages=[
{"role": "user", "content": "Как обработать пропущенные значения с помощью pandas?"}
]
)

2. Многоходовой диалог

conversation = [
{"role": "user", "content": "Напишите класс пользователя"},
{"role": "assistant", "content": "Хорошо, я напишу класс User..."},
{"role": "user", "content": "Добавьте шифрование пароля"}
]

message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=conversation
)

3. Анализ изображений

import base64

with open("image.jpg", "rb") as f:
image_data = base64.b64encode(f.read()).decode()

message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": image_data
}
},
{
"type": "text",
"text": "Проанализируйте эту архитектурную диаграмму"
}
]
}
]
)

Лучшие практики

1. Разумно задавайте max_tokens

Разные модели имеют разные максимальные выходы: Opus 32K, Sonnet 64K, Haiku 8K. Задавайте в соответствии с реальными потребностями, чтобы избежать лишних расходов.

2. Используйте параметр system для промптов

Помещайте определения ролей в параметр system, а не в messages:

# ✅ Рекомендуется
message = client.messages.create(
system="Вы эксперт по Python",
messages=[{"role": "user", "content": "Напишите код"}],
...
)

# ❌ Не рекомендуется
message = client.messages.create(
messages=[{"role": "user", "content": "Вы эксперт по Python. Напишите код"}],
...
)

3. Обрабатывайте длинные диалоги

Claude имеет контекстное окно 200K, но рекомендуется периодически подводить итоги диалогов и удалять неважные исторические сообщения для экономии токенов.

4. Реализуйте механизм повторных попыток

from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=4, max=10)
)
def call_claude():
return client.messages.create(...)

Следующие шаги