Перейти к содержимому

Reasoning

Reasoning-модели перед ответом «думают»: генерируют внутренние рассуждения, которые не входят в основной текст, но тарифицируются как вывод. Глубина рассуждений регулируется уровнем усилия (effort): выше уровень, точнее ответ на сложных задачах, но дольше ожидание и дороже запрос.

Проверить модель можно по GET /v1/models: в capabilities.features есть reasoning. См. Модели.

Уровень задаётся полем reasoning_effort.

reasoning.sh
curl https://api.waibee.com/v1/chat/completions \
-H "Authorization: Bearer $WAIBEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4-mini",
"reasoning_effort": "high",
"messages": [{ "role": "user", "content": "Сколько будет 17*23? Ответь числом." }]
}'
Значение Смысл
none Рассуждения выключены
minimal Минимум, для простых задач
low Немного
medium Разумный компромисс
high Много, для сложных задач
xhigh Максимум на этом эндпоинте

Набор доступных уровней зависит от модели: неизвестное ей значение может быть проигнорировано или сведено к ближайшему поддерживаемому. Если поле не передано, применяется поведение модели по умолчанию.

Значение max на /v1/chat/completions недоступно и возвращает feature_not_supported (400):

{ "error": { "code": "feature_not_supported",
"message": "Effort 'max' is not supported on /v1/chat/completions. Use 'xhigh', or call /v1/messages for 'max'." } }

Клиенты, которые вместо строки присылают объект reasoning, тоже работают: роутер берёт из него effort. Остальные поля объекта могут не примениться, поэтому предсказуемее указывать reasoning_effort.

На POST /v1/messages уровень задаётся полем effort внутри output_config. Здесь доступно и значение max.

Окно терминала
curl https://api.waibee.com/v1/messages \
-H "x-api-key: $WAIBEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"max_tokens": 2048,
"output_config": { "effort": "high" },
"messages": [{ "role": "user", "content": "Какова вероятность вынуть подряд два красных шара из 5 красных, 3 синих и 2 белых без возврата?" }]
}'

Рассуждения приходят отдельным блоком thinking перед текстом ответа:

{
"type": "message",
"content": [
{ "type": "thinking", "thinking": "..." },
{ "type": "text", "text": "..." }
],
"usage": {
"input_tokens": 65,
"output_tokens": 137,
"output_tokens_details": { "thinking_tokens": 30 }
}
}

Поле thinking в запросе (конфигурация расширенного мышления Anthropic) также проходит к модели без изменений, но у новых моделей Claude предпочтительнее output_config.effort.

Формат зависит от модели, поэтому в ответе может быть два поля:

Поле Что содержит
reasoning Текст рассуждений строкой, если модель отдаёт его открыто
reasoning_details Массив блоков в формате модели: reasoning.text с текстом, reasoning.summary с пересказом рассуждений либо reasoning.encrypted с зашифрованным блобом

Часть семейств моделей не раскрывает рассуждения и присылает только зашифрованные блоки: их нельзя прочитать, но можно передать обратно в следующем запросе, если клиент это поддерживает. Открытый текст выглядит так:

{
"message": {
"role": "assistant",
"content": "391",
"reasoning": "17 * 20 = 340, плюс 17 * 3 = 51, итого 391.",
"reasoning_details": [{ "type": "reasoning.text", "text": "...", "index": 0 }]
}
}

В стриминге эти поля приходят фрагментами внутри delta, как обычный текст.

Рассуждения оплачиваются как вывод. Их объём виден в usage:

  • /v1/chat/completions: completion_tokens_details.reasoning_tokens (входит в completion_tokens);
  • /v1/messages: output_tokens_details.thinking_tokens (входит в output_tokens).

Подробнее про поля счётчиков: Токены и usage.

  • Первый токен приходит позже. На высоких уровнях модель молчит, пока думает: на сложных запросах это десятки секунд и больше. Для интерактивных интерфейсов включайте стриминг, чтобы соединение не выглядело зависшим, и не занижайте таймауты клиента.
  • Уровень выбирается под задачу, а не «на всякий случай». Извлечение данных, короткие ответы и вызовы инструментов от высокого effort обычно не улучшаются, а стоят дороже.
  • max_tokens считается вместе с рассуждениями. Слишком тесный лимит обрывает ответ до того, как модель дойдёт до текста.
  • Рассуждения не заменяют инструкции. Если ответ систематически неверный, точнее сформулированный промпт даёт больше, чем повышение уровня.