Создание завершения чата (Потоковый режим)
Ссылка на официальную документацию: OpenAI Chat Create
Описание интерфейса
При получении промпта (Prompt) модель возвращает один или несколько предсказанных вариантов завершения диалога. Этот интерфейс поддерживает как стандартные, так и потоковые (SSE) ответы, а также может возвращать вероятности альтернативных токенов для каждой позиции.
Описание запроса
- Метод запроса:
POST - URL запроса:
https://api.codingplanx.ai/v1/chat/completions
Заголовки запроса (Headers)
| Имя параметра | Обязательно | Тип | Пример | Описание |
|---|---|---|---|---|
Content-Type | Да | string | application/json | Формат данных |
Accept | Да | string | application/json | Формат принимаемых данных |
Authorization | Нет* | string | Bearer {{YOUR_API_KEY}} | Токен аутентификации (обычно обязателен при фактическом вызове) |
X-Forwarded-Host | Нет | string | localhost:5173 | Имя хоста прокси (обычно не нужно передавать вручную) |
Тело запроса (Request Body)
| Имя параметра | Тип | Обязательно | Описание |
|---|---|---|---|
model | string | Да | ID используемой модели. См. таблицу совместимости эндпоинтов моделей для списка поддерживаемых моделей. |
messages | array | Да | Список сообщений, составляющих диалог на данный момент. Содержит поля role и content. |
tools | array | Да | Список инструментов, которые может вызывать модель. В настоящее время в качестве инструментов поддерживаются только функции. |
tool_choice | object | Да | Управляет тем, какую функцию вызывает модель (если таковые имеются). none означает отсутствие вызова, auto — автоматический выбор, также можно принудительно вызвать конкретную функцию. |
extra_body | object | Да | Дополнительные параметры. Включает enable_thinking (boolean), который включает режим рассуждения (если поддерживается моделью). |
temperature | integer/float | Нет | Температура выборки, от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, а более низкие (например, 0.2) — более сфокусированным и детерминированным. Рекомендуется изменять либо этот параметр, либо top_p, но не оба одновременно. |
top_p | integer/float | Нет | Параметр nucleus sampling (сэмплирование ядра). Значение 0.1 означает, что учитываются только токены, составляющие верхние 10% вероятностной массы. Рекомендуется изменять либо этот параметр, либо temperature, но не оба одновременно. |
n | integer | Нет | Количество вариантов завершения чата, генерируемых для каждого входного сообщения. По умолчанию 1. |
stream | boolean | Нет | Включить ли потоковый вывод. Если установлено true, частичные дельты сообщений будут отправляться в виде Server-Sent Events (SSE), а поток завершится сообщением data: [DONE]. |
stop | string/array | Нет | Последовательности (до 4), на которых API прекратит дальнейшую генерацию токенов. По умолчанию null. |
max_tokens | integer | Нет | Максимальное количество токенов для генерации в ответе. Общая длина входных и сгенерированных токенов ограничена длиной контекстного окна модели. |
presence_penalty | number | Нет | Число от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность того, что модель перейдет к новым темам. |
frequency_penalty | number | Нет | Число от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от частоты их появления в тексте, снижая вероятность дословного повторения одного и того же содержания. |
logit_bias | object | Нет | Изменяет вероятность появления указанных токенов в ответе. Принимает JSON-объект, сопоставляющий ID токенов со значением смещения (от -100 до 100). |
user | string | Нет | Уникальный идентификатор конечного пользователя, помогающий отслеживать и выявлять злоупотребления. |
response_format | object | Нет | Задает формат вывода модели. Установите { "type": "json_object" }, чтобы включить режим JSON. Внимание: при использовании необходимо явно указать модели в сообщениях генерировать JSON, иначе это может привести к бесконечному потоку пустых символов. |
seen | integer | Нет | Задает начальное значение (Seed) для детерминированного сэмплирования (Beta-функция). |
Пример запроса
{
"model": "gpt-5-mini",
"max_tokens": 1000,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Привет"
}
],
"temperature": 1.0,
"stream": true,
"stream_options": {
"include_usage": true
}
}
Описание ответа
- Content-Type:
application/json(непотоковый) илиtext/event-stream(при потоковомstream: true)
Параметры ответа (Непотоковая структура)
| Имя параметра | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор ответа чата. |
object | string | Тип объекта, обычно chat.completion или chat.completion.chunk. |
created | integer | Временная метка создания (Unix-время). |
choices | array | Список вариантов ответа. |
choices[].index | integer | Индекс в списке вариантов. |
choices[].message | object | Объект сообщения, сгенерированный моделью, содержит role и content. В потоковом режиме заменяется на delta. |
choices[].finish_reason | string | Причина остановки генерации (например, stop, length и т.д.). |
usage | object | Статистика использования токенов API. |
usage.prompt_tokens | integer | Количество токенов, израсходованных на промпт (Prompt). |
usage.completion_tokens | integer | Количество токенов, сгенерированных моделью. |
usage.total_tokens | integer | Общее количество токенов, израсходованных в данном запросе. |
Пример ответа (Непотоковый / Агрегированный потоковый результат)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
(Примечание: если в запросе указано stream: true, тело ответа будет представлять собой поток событий SSE, разделенных переносом строки. Каждая строка начинается с data: {...} и завершается data: [DONE].)
ЧАВО (Часто задаваемые вопросы)
Q1: Как парсить потоковый ответ при включенном stream: true?
A: При включении stream: true API возвращает данные по протоколу Server-Sent Events (SSE). Клиенту необходимо построчно считывать поток ответа, находить строки, начинающиеся с префикса data: , и парсить их как JSON. Обратите внимание, что последнее сообщение потока всегда data: [DONE], что означает конец потока. При парсинге этот маркер завершения необходимо отфильтровать.
Q2: Почему после установки response_format в JSON мой запрос зависает или возвращает бесконечный пустой поток?
A: Если вы используете { "type": "json_object" } для включения режима JSON, вы обязаны в передаваемых messages (обычно в системном промпте — system prompt) явно указать модели «пожалуйста, выведи в формате JSON». Без соответствующей текстовой инструкции модель может застрять, генерируя бесконечные пустые символы до достижения лимита max_tokens.
Q3: Можно ли одновременно изменять параметры temperature и top_p?
A: Официальная документация настоятельно не рекомендует изменять оба параметра одновременно. Оба они являются механизмами управления случайностью вывода модели. Если вы хотите сделать ответы более стабильными и предсказуемыми, уменьшите temperature ИЛИ уменьшите top_p. Если хотите больше креативности, увеличьте один из них. Одновременное изменение обоих приведет к непредсказуемым результатам.
Q4: Какова функция параметра extra_body.enable_thinking?
A: Это специальный расширенный параметр данного интерфейса. При передаче {"enable_thinking": true}, если используемая бэкенд-модель поддерживает «режим рассуждения (Thinking Mode/Chain of Thought)» (например, некоторые LLM с расширенной логикой), модель запустит процесс глубокого обдумывания. Если модель это не поддерживает, данный параметр обычно игнорируется.
Q5: Почему finish_reason в ответе равен length, а не stop?
A: Значение length в finish_reason означает, что модель не успела сгенерировать полный ответ и была принудительно прервана. Обычно это происходит потому, что задано слишком малое значение параметра max_tokens, либо общее количество входных и сгенерированных токенов превысило максимально допустимое контекстное окно текущей модели. Попробуйте увеличить значение max_tokens.