Пригласите друзей и получите бесплатные токены!Узнать больше

Создание завершения чата (Потоковый режим)

Ссылка на официальную документацию: OpenAI Chat Create

Описание интерфейса

При получении промпта (Prompt) модель возвращает один или несколько предсказанных вариантов завершения диалога. Этот интерфейс поддерживает как стандартные, так и потоковые (SSE) ответы, а также может возвращать вероятности альтернативных токенов для каждой позиции.

Описание запроса

  • Метод запроса: POST
  • URL запроса: https://api.codingplanx.ai/v1/chat/completions

Заголовки запроса (Headers)

Имя параметраОбязательноТипПримерОписание
Content-TypeДаstringapplication/jsonФормат данных
AcceptДаstringapplication/jsonФормат принимаемых данных
AuthorizationНет*stringBearer {{YOUR_API_KEY}}Токен аутентификации (обычно обязателен при фактическом вызове)
X-Forwarded-HostНетstringlocalhost:5173Имя хоста прокси (обычно не нужно передавать вручную)

Тело запроса (Request Body)

Имя параметраТипОбязательноОписание
modelstringДаID используемой модели. См. таблицу совместимости эндпоинтов моделей для списка поддерживаемых моделей.
messagesarrayДаСписок сообщений, составляющих диалог на данный момент. Содержит поля role и content.
toolsarrayДаСписок инструментов, которые может вызывать модель. В настоящее время в качестве инструментов поддерживаются только функции.
tool_choiceobjectДаУправляет тем, какую функцию вызывает модель (если таковые имеются). none означает отсутствие вызова, auto — автоматический выбор, также можно принудительно вызвать конкретную функцию.
extra_bodyobjectДаДополнительные параметры. Включает enable_thinking (boolean), который включает режим рассуждения (если поддерживается моделью).
temperatureinteger/floatНетТемпература выборки, от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, а более низкие (например, 0.2) — более сфокусированным и детерминированным. Рекомендуется изменять либо этот параметр, либо top_p, но не оба одновременно.
top_pinteger/floatНетПараметр nucleus sampling (сэмплирование ядра). Значение 0.1 означает, что учитываются только токены, составляющие верхние 10% вероятностной массы. Рекомендуется изменять либо этот параметр, либо temperature, но не оба одновременно.
nintegerНетКоличество вариантов завершения чата, генерируемых для каждого входного сообщения. По умолчанию 1.
streambooleanНетВключить ли потоковый вывод. Если установлено true, частичные дельты сообщений будут отправляться в виде Server-Sent Events (SSE), а поток завершится сообщением data: [DONE].
stopstring/arrayНетПоследовательности (до 4), на которых API прекратит дальнейшую генерацию токенов. По умолчанию null.
max_tokensintegerНетМаксимальное количество токенов для генерации в ответе. Общая длина входных и сгенерированных токенов ограничена длиной контекстного окна модели.
presence_penaltynumberНетЧисло от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность того, что модель перейдет к новым темам.
frequency_penaltynumberНетЧисло от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от частоты их появления в тексте, снижая вероятность дословного повторения одного и того же содержания.
logit_biasobjectНетИзменяет вероятность появления указанных токенов в ответе. Принимает JSON-объект, сопоставляющий ID токенов со значением смещения (от -100 до 100).
userstringНетУникальный идентификатор конечного пользователя, помогающий отслеживать и выявлять злоупотребления.
response_formatobjectНетЗадает формат вывода модели. Установите { "type": "json_object" }, чтобы включить режим JSON. Внимание: при использовании необходимо явно указать модели в сообщениях генерировать JSON, иначе это может привести к бесконечному потоку пустых символов.
seenintegerНетЗадает начальное значение (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)

Параметры ответа (Непотоковая структура)

Имя параметраТипОписание
idstringУникальный идентификатор ответа чата.
objectstringТип объекта, обычно chat.completion или chat.completion.chunk.
createdintegerВременная метка создания (Unix-время).
choicesarrayСписок вариантов ответа.
choices[].indexintegerИндекс в списке вариантов.
choices[].messageobjectОбъект сообщения, сгенерированный моделью, содержит role и content. В потоковом режиме заменяется на delta.
choices[].finish_reasonstringПричина остановки генерации (например, stop, length и т.д.).
usageobjectСтатистика использования токенов API.
usage.prompt_tokensintegerКоличество токенов, израсходованных на промпт (Prompt).
usage.completion_tokensintegerКоличество токенов, сгенерированных моделью.
usage.total_tokensintegerОбщее количество токенов, израсходованных в данном запросе.

Пример ответа (Непотоковый / Агрегированный потоковый результат)

{
    "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.