Chat completions

Структура запроса и ответа, потоковая передача и эквивалентные эндпоинты в протоколах Anthropic и Gemini.

Завершение чата — самый часто используемый эндпоинт: вы отправляете модели список сообщений и получаете сгенерированный ответ. Основная точка входа платформы — протокол, совместимый с OpenAI; протоколы Anthropic и Gemini изоморфны ему.

Структура запроса (совместимый с OpenAI)

POST {base}/chat/completions — аутентификация описана в разделе Аутентификация:

{
  "model": "your-model",
  "messages": [
    {"role": "system", "content": "You are a support assistant."},
    {"role": "user", "content": "Where is my order?"},
    {"role": "assistant", "content": "Sure, may I have the order number?"},
    {"role": "user", "content": "A1024"}
  ],
  "temperature": 0.7,
  "max_tokens": 1024,
  "stream": false
}
  • messages — упорядоченная история переписки; role принимает значения system / user / assistant. Для многошаговых диалогов клиент собирает всю историю и отправляет её заново при каждом запросе;
  • Чем выше temperature, тем разнообразнее вывод (обычно 0–1); max_tokens ограничивает длину ответа;
  • Стриминг: при "stream": true ответ передаётся постепенно по SSE (choices[0].delta) — идеально, чтобы показывать текст по мере его генерации. В официальных SDK: передайте stream=True и итерируйте по потоку.

Структура ответа

Ключевые поля ответа без стриминга:

{
  "choices": [
    {
      "message": {"role": "assistant", "content": "..."},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 58, "completion_tokens": 132, "total_tokens": 190}
}
  • В choices[0].message.content находится ответ; finish_reason со значением stop означает естественное завершение, length — обрыв по max_tokens;
  • usage — расход токенов за этот вызов; на нём основаны и биллинг, и страница «Использование».

Эквивалентные эндпоинты в других протоколах

  • Anthropic: POST {base}/v1/messages — отличаются имена полей (max_tokens обязателен, ответ находится в массиве content), в остальном семантика идентична;
  • Gemini: POST {base}/v1beta/models/{model}:generateContent — сообщения передаются в массиве contents.

Все три протокола изоморфны; переход сводится в основном к переименованию полей. Практичный шаг — использовать соответствующий официальный SDK (openai / @anthropic-ai/sdk / @google/genai), указав в base_url адрес платформы.