Режимы рассуждения
Модели-рассуждатели перед ответом пишут внутреннюю цепочку рассуждений. Она стоит денег и времени, но на задачах с многошаговой логикой — код, математика, разбор условий — заметно поднимает качество. Параметр 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, "выходных токенов, включая рассуждение")curl https://api.mixen.ai/v1/chat/completions \ -H "Authorization: Bearer $MIXEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5.6-sol", "reasoning_effort": "high", "max_tokens": 8000, "messages": [{"role": "user", "content": "Реши: 17 человек, 3 лифта по 5 мест. Минимум поездок?"}] }'Что учесть
Заголовок раздела «Что учесть»- Глубже — не всегда лучше. На простых вопросах, переводах и переписывании текста рассуждение только добавляет цену и задержку.
- Цепочку рассуждения наружу не отдаём. В ответе приходит результат; на Anthropic-протоколе (
POST /v1/messages) — блокиthinking, как у оригинального API. - Уровень по умолчанию задаёт модель. Не передали
reasoning_effort— рассуждатель будет рассуждать на своём дефолте, а не молчать.