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

Режимы рассуждения

Модели-рассуждатели перед ответом пишут внутреннюю цепочку рассуждений. Она стоит денег и времени, но на задачах с многошаговой логикой — код, математика, разбор условий — заметно поднимает качество. Параметр reasoning_effort в POST /v1/chat/completions управляет тем, сколько модель на это тратит.

Значение Смысл
"off" Не рассуждать — обычный быстрый ответ
"low" Короткая цепочка
"medium" Средняя (у большинства моделей — значение по умолчанию)
"high" Длинная
"xhigh" Расширенная — принимают не все
"max" Максимальная — принимают единицы

Набор уровней у каждой модели свой, и угадывать его не нужно: GET /v1/models отдаёт по каждой модели capabilities.reasoning_efforts — список значений, которые она реально принимает, — и capabilities.can_disable_reasoning — принимает ли она "off".

curl -s https://api.mixen.ai/v1/models \
-H "Authorization: Bearer $MIXEN_API_KEY" \
| python -c "import json,sys; [print(m['id'], m['capabilities']['reasoning_efforts'], m['capabilities']['can_disable_reasoning']) for m in json.load(sys.stdin)['data'] if m['capabilities'].get('reasoning_efforts')]"

Если модель не принимает переданный уровень, мы зажимаем его к ближайшему не более глубокому, а не отвечаем ошибкой. Так "max" на модели с потолком high превратится в "high", а "medium" на модели, у которой есть только max, — в "max" (ближе нет).

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

Отдельный случай — "off". У части моделей рассуждение врождённое и выключить его нельзя (у Claude Fable, Gemini 3.1 Pro, Grok 4.5/4.6, GPT-5 mini и других): для них can_disable_reasoning: false, и "off" к ним не применяется. У моделей, которые вовсе не рассуждают, reasoning_efforts пустой — параметр им передавать бессмысленно.

Есть и третий случай: модель рассуждает всегда и на своей глубине — тогда reasoning_efforts пустой и can_disable_reasoning: false одновременно, управлять нечем. Ориентируйтесь на оба поля каталога, а не на репутацию модели.

Токены рассуждения — это выходные токены: они тарифицируются по цене выхода модели и учитываются в usage.completion_tokens вместе с видимым ответом. Поэтому high на длинной задаче может стоить в разы дороже low при одинаковом на вид ответе.

max_tokens ограничивает сумму рассуждения и ответа. Отсюда самая частая ошибка: на глубоком уровне модель тратит весь лимит на размышление, до текста не доходит и возвращает пустой content с finish_reason: "length". Если ответ обязан быть структурным (JSON по схеме) и уровень высокий, ставьте max_tokens с запасом — от 8000 и выше.

from openai import OpenAI
client = OpenAI(base_url="https://api.mixen.ai/v1", api_key=MIXEN_API_KEY)
resp = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "Реши: 17 человек, 3 лифта по 5 мест. Минимум поездок?"}],
reasoning_effort="high",
max_tokens=8000,
)
print(resp.choices[0].message.content)
print(resp.usage.completion_tokens, "выходных токенов, включая рассуждение")
  • Глубже — не всегда лучше. На простых вопросах, переводах и переписывании текста рассуждение только добавляет цену и задержку.
  • Цепочку рассуждения наружу не отдаём. В ответе приходит результат; на Anthropic-протоколе (POST /v1/messages) — блоки thinking, как у оригинального API.
  • Уровень по умолчанию задаёт модель. Не передали reasoning_effort — рассуждатель будет рассуждать на своём дефолте, а не молчать.