Управление уровнем усилий модели рассуждения (Chat Completions)
Описание интерфейса
На основе заданного промпта (подсказки) модель возвращает один или несколько предсказанных вариантов ответа (поддерживается управление уровнем усилий/глубиной размышлений модели).
- Официальная документация: OpenAI Reasoning Guides
- Статус API:
Опубликовано (released)
Спецификация запроса
- Метод запроса:
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}} | Учетные данные для аутентификации |
Параметры тела запроса (Body)
Формат данных: application/json
| Имя параметра | Обязательно | Тип | Описание |
|---|---|---|---|
model | Да | string | ID используемой модели (например, o4-mini и т.д.). |
messages | Да | array | Список сообщений, составляющих историю диалога на данный момент. Содержит role (например, user/assistant) и content (содержимое сообщения). |
tools | Да | array | Список инструментов (функций), которые может вызывать модель. Используется для предоставления функций, для которых модель может генерировать входные данные в формате JSON. |
tool_choice | Да | object | Управляет тем, какую функцию вызывает модель. none означает, что функции не вызываются, auto — автоматический выбор. |
reasoning_effort | Нет | string | Ключевой параметр: Управляет уровнем усилий (глубиной размышлений) модели рассуждения при генерации ответа. Допустимые значения: low, medium, high. |
temperature | Нет | number | Температура сэмплирования, значение от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, а более низкие (например, 0.2) — более сфокусированным и детерминированным. Рекомендуется изменять либо этот параметр, либо top_p, но не оба одновременно. |
top_p | Нет | number | Сэмплирование ядра (nucleus sampling). Значение 0.1 означает, что учитываются только токены, составляющие верхние 10% вероятностной массы. Рекомендуется изменять либо этот параметр, либо temperature. |
n | Нет | integer | По умолчанию 1. Количество генерируемых вариантов ответа (дополнений) для каждого входного сообщения. |
stream | Нет | boolean | По умолчанию false. Если установлено true, частичные изменения сообщений будут отправляться в виде Server-Sent Events (SSE), а поток завершится сообщением data: [DONE]. |
stop | Нет | string | Строка или массив (до 4 строк), при обнаружении которых API прекратит дальнейшую генерацию токенов. |
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. |
seen | Нет | integer | Функция на стадии бета-тестирования (аналог seed). Если указано, система приложит все усилия для детерминированного сэмплирования, чтобы одинаковые параметры возвращали одинаковый результат. |
Пример запроса
{
"model": "o4-mini",
"max_tokens": 500,
"messages": [
{
"role": "user",
"content": "Здравствуйте, пожалуйста, подробно объясните принципы квантовых вычислений."
}
],
"temperature": 1.0,
"stream": false,
"reasoning_effort": "medium"
}
Спецификация ответа
Параметры тела ответа
Формат данных: application/json
| Имя параметра | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор данного запроса. |
object | string | Тип объекта, обычно chat.completion. |
created | integer | Временная метка создания в формате Unix. |
choices | array | Список результатов (дополнений). |
└ index | integer | Индекс текущего варианта в списке. |
└ message | object | Тело сообщения ответа, сгенерированное моделью. Содержит role и content. |
└ finish_reason | string | Причина остановки генерации (например, stop, length). |
usage | object | Статистика использования токенов. |
└ prompt_tokens | integer | Количество токенов, израсходованных на промпт. |
└ completion_tokens | integer | Количество токенов, израсходованных на генерацию ответа. |
└ total_tokens | integer | Общее количество израсходованных токенов. |
Пример ответа (HTTP 200 OK)
{
"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
}
}
FAQs (Часто задаваемые вопросы)
1. Какова роль параметра reasoning_effort?
Параметр reasoning_effort используется для управления тем, сколько вычислительных ресурсов и времени модели с продвинутыми способностями к рассуждению (например, серии o1/o4 от OpenAI) тратят на внутреннее "обдумывание" перед выдачей окончательного ответа. Обычно поддерживаются три уровня: low (низкий), medium (средний) и high (высокий). При значении high модель проводит более глубокие логические выводы, что отлично подходит для решения сложных математических задач или программирования; однако время ожидания ответа при этом также увеличивается.
2. Почему при включении stream: true я не получаю стандартный JSON-ответ?
Когда включена потоковая передача (stream: true), API использует протокол Server-Sent Events (SSE) для непрерывного возврата фрагментов данных (Chunks). Каждый фрагмент отправляется в формате data: {...}, а когда передача всего содержимого завершена, отправляется сообщение data: [DONE]. Разработчикам необходимо построчно считывать и парсить JSON-строки, идущие после data:, чтобы склеить полный ответ.
3. В документации сказано, что рекомендуется изменять либо temperature, либо top_p. Почему?
Оба этих параметра используются для контроля случайности и разнообразия генерируемого моделью контента. temperature изменяет распределение вероятностей путем масштабирования логитов (logits), в то время как top_p (сэмплирование ядра) ограничивает пул кандидатов путем усечения слов с низкой совокупной вероятностью. Одновременная настройка обоих параметров делает поведение модели труднопредсказуемым и сложным для управления. Поэтому лучшая практика — зафиксировать один из них (обычно оставить по умолчанию) и настраивать только другой для удовлетворения требований к "случайности" вывода.
4. Что означает, если finish_reason возвращает "length"?
Это означает, что ответ модели был принудительно обрезан. Обычно на это есть две причины: первая — количество сгенерированных токенов достигло лимита, установленного в параметре max_tokens вашего запроса; вторая — ваш промпт (входной запрос) плюс сгенерированный моделью ответ в сумме превысили максимально допустимое контекстное окно для данной модели. В таком случае рекомендуется сократить историю диалога или увеличить параметр max_tokens.
5. Как принудительно заставить модель возвращать данные в формате JSON?
Вы можете включить режим JSON, передав в теле запроса "response_format": {"type": "json_object"}. Очень важно: при включении этого режима вы должны явно потребовать в messages (обычно в system или user промпте) вывод в формате JSON на естественном языке. В противном случае модель может попасть в бесконечный цикл генерации пробелов, пока не достигнет лимита токенов.