API-документация: Создание структурированного вывода
Описание интерфейса
Получая промпт (Prompt), модель возвращает один или несколько предсказанных вариантов ответов (completions). Также поддерживается принудительный вывод структурированных данных в соответствии с заданным форматом JSON Schema.
Официальная документация: OpenAI Structured Outputs
Основная информация об API
- Метод запроса:
POST - URL запроса:
https://api.codingplanx.ai/v1/chat/completions - Формат данных:
application/json
Заголовки запроса (Headers)
| Параметр | Обязательный | Тип | Пример значения | Описание |
|---|---|---|---|---|
Content-Type | Да | string | application/json | Указывает тип данных тела запроса |
Accept | Да | string | application/json | Указывает тип данных, которые может принять клиент |
Authorization | Нет | string | Bearer {{YOUR_API_KEY}} | Учетные данные для аутентификации |
Тело запроса (Request Body)
| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
model | Да | string | ID используемой модели (например, gpt-4.1-2025-04-14). |
messages | Да | array | Список сообщений, составляющих диалог на данный момент. |
? messages[].role | Да | string | Роль отправителя сообщения, например system, user, assistant. |
? messages[].content | Да | string | Конкретное содержимое сообщения. |
tools | Да | array | Список инструментов, доступных модели. В настоящее время поддерживаются только функции. Используется для предоставления списка функций, для которых модель может сгенерировать JSON-ввод. |
tool_choice | Да | object | Управляет тем, какую функцию вызывает модель. none означает отсутствие вызова, auto — автоматический выбор. Также можно принудительно вызвать функцию через {"type": "function", "function": {"name": "my_function"}}. |
temperature | Нет | integer | Температура выборки (сэмплирования), от 0 до 2. Чем выше значение (например, 0.8), тем более случайным будет вывод. Чем ниже значение (например, 0.2), тем более сфокусированным и детерминированным он будет. Рекомендуется изменять либо этот параметр, либо top_p, но не оба одновременно. |
top_p | Нет | integer | Параметр ядерного сэмплирования (nucleus sampling). 0.1 означает, что учитываются только токены, составляющие верхние 10% вероятностной массы. Рекомендуется изменять либо этот параметр, либо temperature, но не оба одновременно. |
n | Нет | integer | Количество вариантов ответов (completions), генерируемых для каждого входного сообщения. По умолчанию 1. |
stream | Нет | boolean | Включает потоковый вывод. Если true, частичные изменения сообщений будут отправляться в виде Server-Sent Events (SSE) и завершатся маркером data: [DONE]. По умолчанию false. |
stop | Нет | string | Последовательности (до 4), при достижении которых API прекратит дальнейшую генерацию токенов. По умолчанию null. |
max_tokens | Нет | integer | Максимальное количество токенов, генерируемых в ответе. По умолчанию inf (бесконечность). |
presence_penalty | Нет | number | Штраф за присутствие (от -2.0 до 2.0). Положительные значения штрафуют новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность того, что модель перейдет к обсуждению новых тем. |
frequency_penalty | Нет | number | Штраф за частоту (от -2.0 до 2.0). Положительные значения штрафуют новые токены в зависимости от их текущей частоты появления в тексте, снижая вероятность повторения моделью одного и того же контента. |
logit_bias | Нет | null/object | Принимает JSON-объект, сопоставляющий ID токенов с соответствующими значениями смещения (от -100 до 100), чтобы изменить вероятность появления указанных токенов в сгенерированном ответе. |
user | Нет | string | Уникальный идентификатор вашего конечного пользователя, помогающий в мониторинге и обнаружении злоупотреблений. |
response_format | Нет | object | Объект, задающий формат вывода модели. Установив {"type": "json_schema", "json_schema": {...}}, можно включить структурированный вывод, гарантируя, что модель сгенерирует валидный JSON-формат. |
seen | Нет | integer | (Beta-функция) Устанавливает случайное начальное число (Seed). Система приложит все усилия для детерминированного сэмплирования: повторные запросы с тем же seed и параметрами должны возвращать одинаковый результат. |
Пример запроса (Request Example)
{
"model": "gpt-4.1-2025-04-14",
"messages": [
{
"role": "system",
"content": "Determine if the user input violates specific guidelines and explain if they do."
},
{
"role": "user",
"content": "How do I prepare for a job interview?"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "content_compliance",
"description": "Determines if content is violating specific moderation rules",
"schema": {
"type": "object",
"properties": {
"is_violating": {
"type": "boolean",
"description": "Indicates if the content is violating guidelines"
},
"category": {
"type": ["string", "null"],
"description": "Type of violation, if the content is violating guidelines. Null otherwise.",
"enum": ["violence", "sexual", "self_harm"]
},
"explanation_if_violating": {
"type": ["string", "null"],
"description": "Explanation of why the content is violating"
}
},
"required": ["is_violating", "category", "explanation_if_violating"],
"additionalProperties": false
},
"strict": true
}
}
}
Тело ответа (Response Body)
| Параметр | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор запроса на генерацию. |
object | string | Тип объекта, всегда chat.completion. |
created | integer | Временная метка создания (Unix-время в секундах). |
choices | array | Список вариантов ответов (сгенерированных данных). |
? choices[].index | integer | Индекс варианта в списке. |
? choices[].message | object | Объект сообщения, сгенерированного моделью. |
? choices[].message.role | string | Название роли (обычно assistant). |
? choices[].message.content | string | Конкретное содержимое сообщения. |
? choices[].finish_reason | string | Причина остановки генерации моделью (например, stop, length). |
usage | object | Статистика использования токенов. |
? usage.prompt_tokens | integer | Количество токенов, израсходованных на промпт (Prompt). |
? usage.completion_tokens | integer | Количество токенов, израсходованных на сгенерированный ответ (Completion). |
? usage.total_tokens | integer | Общее количество израсходованных токенов. |
Пример ответа (Response Example)
{
"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
}
}
Часто задаваемые вопросы (FAQ)
1. Что такое response_format и как гарантировать строгий вывод JSON моделью?
Параметр response_format позволяет вам потребовать от модели возврата данных в определенном формате. Если вы хотите использовать «структурированный вывод», необходимо установить {"type": "json_schema"}, определить вашу JSON Schema внутри этого объекта и включить strict: true. Это гарантирует, что модель на 100% сгенерирует контент в соответствии с заданными вами полями и типами данных, избавляя вас от необходимости писать дополнительный код для отказоустойчивого парсинга JSON на вашей стороне.
2. Почему мой JSON-вывод был обрезан?
Если в данных ответа значение choices[0].finish_reason равно length, это означает, что сгенерированный текст достиг лимита max_tokens или превысил ограничение модели на максимальную длину контекста. Рекомендуется увеличить значение параметра max_tokens в вашем запросе.
3. В чем разница между параметрами temperature и top_p? Какой из них мне следует настроить?
Оба параметра используются для контроля случайности (креативности) вывода модели:
temperatureмасштабирует распределение вероятностей вывода. Чем ниже значение, тем более строгим и детерминированным будет ответ; чем выше значение, тем более разнообразным он будет.top_p(ядерное сэмплирование) ограничивает выбор модели только теми токенами, чья совокупная вероятность достигает значенияp. Официальная рекомендация: Настраивайте только один из этих параметров. Не изменяйтеtemperatureиtop_pодновременно.
4. Что произойдет, если включить stream: true?
При установке stream: true API не будет ждать полного завершения генерации ответа, а начнет возвращать фрагменты данных в реальном времени в виде потока (подобно печатной машинке). Формат возвращаемых данных изменится на Server-Sent Events (SSE). Клиенту необходимо прослушивать поток данных и склеивать фрагменты delta.content до тех пор, пока не будет получен маркер [DONE], обозначающий завершение потока.
5. Как гарантировать получение абсолютно одинакового ответа при каждом вызове с одним и тем же Prompt?
Хотя большие языковые модели по своей природе обладают случайностью, вы можете добиться максимальной детерминированности, передав заданный параметр seen (Seed) и установив temperature на 0. Если вы заметите, что system_fingerprint в результатах возврата изменился, это означает, что конфигурация бэкенд-модели была микро-скорректирована, и в этом случае даже при одинаковом Seed результаты могут иметь незначительные отличия.