Перейти к основному содержанию
Chat Completions от OpenAI даёт единый интерфейс к текстовым моделям OpenAI, Google Gemini, DeepSeek, Qwen и других вендоров. Отправьте messages и прочитайте ответ в choices[0].message.content. Необязательные параметры и поддержка инструментов зависят от модели. Если ваше приложение построено на структурах запросов Anthropic Messages или Gemini generateContent, используйте страницы Протокол Claude и Протокол Gemini. Три формата сравнивает руководство API генерации текста.

Отправка запроса

Создайте API-ключ в разделе Управление токенами, выбрав режим оплаты «сначала по использованию» (в консоли — 按量优先, рекомендуется) или «оплата по использованию» (按量计费), и сохраните его в переменной окружения:
Запросы используют аутентификацию Authorization: Bearer и JSON-тело с model и messages. В примерах взята модель gpt-5.4-mini.
На этот промпт ожидается ответ connected. Когда клиент заработает, подставьте вместо промпта сообщение своего приложения.

Выбор модели

Модель выбирайте в каталоге моделей. Прежде чем менять значение model, проверьте в строке модели три вещи:
  • В Endpoints есть OpenAI-compatible. Модели, у которых указан только Responses, например серия o3-pro, вызываются через /v1/responses; примеры есть в разделе про Responses API в руководстве по подключению.
  • В Token groups есть группа вашего API-ключа.
  • Цены Input, Output и Cache read за 1M токенов подходят вашей нагрузке.
Среди распространённых текстовых моделей каталога:
  • gpt-5.4-mini и gpt-5.4
  • gemini-3.8-flash, gemini-3.6-flash и gemini-3.5-flash-lite
Копируйте точный ID из каталога или консоли, а не собирайте его из названия продукта. Форматы и цены этих моделей перечислены в руководстве API генерации текста, а то, как вызвать o3-pro (только Responses), показано на странице Модели OpenAI. Общий рейтинг не подскажет, какая модель подходит вашему приложению. Прогоните выборку собственных промптов через две-три модели и сравните качество ответов, следование инструкциям, структурированный вывод, долю успешных вызовов инструментов (если вы их используете), задержку и расход токенов, записанный по каждому запросу. Зафиксируйте выбранный ID модели в конфигурации, чтобы смена модели была осознанным обновлением.

Поля запроса

Начните с model и messages. Необязательные поля и допустимые значения зависят от модели; если запрос отклонён из-за неподдерживаемого параметра, перед повтором нужно изменить поле. Определения полей на стороне вендора — в официальном справочнике Chat Completions.

Сообщения и история диалога

У каждого сообщения есть role и content. Роль user — ввод пользователя, assistant — прежние ответы модели. С каждым запросом отправляйте ту историю, которая нужна вашему приложению:
Роли инструкций вроде system или developer, сообщения инструментов и мультимодальное содержимое зависят от выбранной модели. Как передавать изображения модели с поддержкой зрения, описано в разделе API понимания изображений.

Чтение ответа

Текстовый ответ содержит массив choices. В сокращённом примере показаны поля, которые нужно читать:
Ответ находится в message.content, а причина завершения генерации — в finish_reason. Значение length означает, что ответ упёрся в лимит вывода или контекста; если нужен полный ответ, сократите вход или измените поддерживаемый моделью лимит вывода. Если модель поддерживает вызов инструментов, вместо обычного текста ответ может содержать message.tool_calls. При продолжении диалога сохраняйте эти вызовы вместе с соответствующими результатами. Число токенов может быть в usage; списания по аккаунту смотрите в журнале вызовов.

Потоковый ответ

Добавьте "stream": true, чтобы получать ответ частями по мере того, как его пишет модель. Ответ приходит как поток server-sent events:
  • В каждой строке data: лежит объект chat.completion.chunk.
  • Новый текст находится в choices[0].delta.content.
  • Поток заканчивается строкой data: [DONE].
Флаг -N отключает буферизацию вывода cURL, так что каждый фрагмент печатается сразу после получения.
Необработанный поток выглядит так (сокращён до нужных полей; в реальных фрагментах есть и другие поля, например id и model):
Как читать поток:
  • Добавляйте каждый delta.content по порядку, чтобы собрать ответ целиком.
  • Первый фрагмент может содержать только роль, а в некоторых фрагментах, например в последнем фрагменте с usage, массив choices бывает пустым, поэтому проверяйте его перед чтением.
  • Последний фрагмент с содержимым задаёт finish_reason; затем data: [DONE] закрывает поток, и цикл в Python SDK на этом завершается.
  • Если соединение оборвалось до [DONE], считайте ответ неполным.

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

После таймаута на стороне клиента проверьте в журнале вызовов, есть ли там этот запрос, прежде чем отправлять его снова. В примерах на Python автоматические повторы отключены; добавляйте обработку повторов в приложении осознанно. Обращаясь в поддержку, укажите время запроса, эндпоинт, модель, группу токена и текст ошибки без учётных данных. Никогда не отправляйте свой API-ключ.

Связанные материалы