Reasoning Tokens

Токены рассуждений для улучшения качества ответов

Reasoning Tokens

Reasoning Tokens (thinking tokens, токены рассуждений) - токены, в которых модель сохраняет промежуточные мысли о задаче.

Как это работает

  1. Модель размышляет над задачей до того, как ответить
  2. Промежуточные мысли сохраняются как токены рассуждений
  3. На их основе создаётся финальный ответ
  4. В ответ возвращаются и рассуждения, и итоговый результат

Ключевые преимущества

Прозрачность

Видимость процесса принятия решений моделью

Улучшенное качество

Лучшее решение сложных задач

Отладка

Понимание источников ошибок

Обучение

Изучение подходов к решению проблем

Reasoning tokens учитываются как output tokens для биллинга и увеличивают стоимость, но улучшают качество ответов.

Как узнать, поддерживает ли модель рассуждения

Каталог моделей меняется чаще документации, поэтому актуальный источник правды - публичный эндпоинт каталога. Авторизация для него не нужна:

curl https://api.usellm.ru/v1/models/zai/glm-5.3-flash

В ответе смотрите массив supported_parameters: он есть у top_provider и у каждого элемента providers[]:

{
  "top_provider": {
    "name": "zai",
    "supported_parameters": [
      "include_reasoning",
      "reasoning",
      "reasoning_effort",
      "max_tokens",
      "max_completion_tokens",
      "response_format",
      "structured_outputs",
      "stop",
      "tools",
      "verbosity"
    ]
  }
}

Модель поддерживает рассуждения у этого провайдера, если в списке есть reasoning и reasoning_effort. Наборы параметров у разных провайдеров одной модели могут отличаться, поэтому проверяйте именно ту площадку, на которую рассчитываете попасть.

Как передавать параметры

Настройки рассуждений принимаются в двух формах.

Объектом reasoning в теле запроса:

{
  "model": "zai/glm-5.3-flash",
  "messages": [{ "role": "user", "content": "Реши уравнение: 2x + 5 = 13" }],
  "reasoning": { "effort": "high" }
}

Либо суффиксом к имени модели: удобно, когда клиент не даёт добавить произвольное поле в тело запроса:

{
  "model": "zai/glm-5.3-flash@reasoning_effort=high",
  "messages": [{ "role": "user", "content": "Реши уравнение: 2x + 5 = 13" }]
}

Поле reasoning_effort на верхнем уровне тела запроса (формат OpenAI API) не читается: запрос выполнится, но параметр будет проигнорирован без ошибки. Используйте reasoning.effort или суффикс модели.

Задавать уровень одновременно двумя способами нельзя: запрос вернёт ошибку 400 с текстом про конфликт alias-параметра.

Значения по умолчанию и преобразования

usellm передаёт настройки рассуждений выбранной модели без ремаппинга уровней: значение effort уходит провайдеру как есть.

  • Своих значений по умолчанию мы не подставляем. Если блок reasoning в запросе отсутствует, к провайдеру уйдёт запрос без reasoning-полей и сработает поведение самой модели по умолчанию.
  • Уровни не пересчитываются под возможности модели. Если модель понимает не весь набор none … max, итоговое поведение определяет провайдер: он может нормализовать значение до ближайшего поддерживаемого.
  • Если у модели в каталоге нет reasoning-параметров в supported_parameters, блок reasoning может быть отброшен при отправке без ошибки в ответе.

Параметры управления

type

Явный переключатель режима рассуждений. Поддерживается только моделями с адаптивным мышлением.

Значения:

  • adaptive - включить адаптивное мышление: модель сама выбирает глубину рассуждений под задачу. Поля effort и max_tokens при этом игнорируются, управление только через effort_level.
  • disabled - явно отключить рассуждения.

Для моделей без адаптивного режима параметр передавать не нужно: используйте effort и/или max_tokens.

effort

Пресет «усилия» для моделей с явно управляемым бюджетом рассуждений.

Если параметр не передан, уровень усилий выбирает сама модель: usellm своё значение не подставляет.

Значения:

  • none - рассуждения отключены
  • minimal - минимальные рассуждения
  • low - сниженные рассуждения
  • medium - сбалансированный режим
  • high - детальные рассуждения
  • xhigh - максимально детальные рассуждения
  • max - предельные усилия

На моделях, не поддерживающих верхние уровни (xhigh, max), значение может быть нормализовано провайдером до ближайшего поддерживаемого.

effort_level

Подсказка глубины для адаптивного мышления. Действует только совместно с type: "adaptive". Для остальных моделей игнорируется.

Значения: low / medium / high / max.

В отличие от effort, параметр effort_level не задаёт бюджет токенов напрямую: модель по-прежнему сама выбирает глубину, но ориентируется на указанный уровень усилий.

max_tokens

Жёсткий лимит токенов рассуждений (бюджет). Работает на моделях с явным бюджетом. Для адаптивных моделей игнорируется: бюджетом управляет сама модель.

enabled

Явное включение/выключение рассуждений (true / false). Если параметр не передан, провайдер выводит включение из effort или max_tokens.

exclude

Если true, рассуждения не включаются в ответ (но всё равно учитываются в биллинге).

summary

Управляет уровнем детализации резюме рассуждений:

  • auto - автоматический выбор на стороне провайдера
  • concise - краткое резюме
  • detailed - подробное резюме

Управление глубиной адаптивного мышления

Глубина рассуждений задаётся парой параметров:

"reasoning": {
  "type": "adaptive",
  "effort_level": "max"
}
Значение effort_levelКогда использовать
lowПростые вопросы, быстрые ответы
mediumСтандартные задачи
highСложный анализ, многошаговые задачи
maxПредельные усилия, максимально глубокий разбор

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

Когда adaptive не тратит reasoning-токены

Adaptive thinking - это не «всегда думать», а «модель сама решает». Для простых запросов модель отвечает сразу, без рассуждений, и тогда:

  • usage.completion_tokens_details.reasoning_tokens = 0
  • Поле choices[0].message.reasoning отсутствует

Это не ошибка: модель просто решила, что задача не требует рассуждений.

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

Управление рассуждениями через Anthropic-совместимый endpoint

Кроме OpenAI-совместимого /v1/chat/completions, usellm принимает запросы в нативном формате Anthropic Messages API (POST /v1/messages):

{
  "model": "anthropic/claude-fable-5.1",
  "thinking": { "type": "adaptive" },
  "messages": [
    { "role": "user", "content": "Реши уравнение: 2x + 5 = 13" }
  ]
}

Через унифицированный endpoint (/v1/chat/completions, /v1/responses)

{
  "model": "anthropic/claude-fable-5.1",
  "reasoning": {
    "type": "adaptive",
    "effort_level": "max"
  },
  "messages": [
    { "role": "user", "content": "Реши уравнение: 2x + 5 = 13" }
  ]
}
  • reasoning.type: "adaptive" - включает адаптивное мышление.
  • reasoning.effort_level - опциональная подсказка уровня усилий (low / medium / high / max).
  • reasoning.effort и reasoning.max_tokens для адаптивных моделей игнорируются. Передать их можно, ошибки не будет, но эффекта они не дадут.

Когда использовать

Рекомендуется
  • Математические задачи
  • Программирование
  • Анализ данных
  • Планирование
  • Логические головоломки
  • Объяснение сложных концепций
Не рекомендуется
  • Простые фактические вопросы
  • Генерация контента
  • Перевод текстов
  • Простые диалоги

Стоимость

Reasoning tokens тарифицируются как output tokens по цене выбранной модели. Например, для zai/glm-5.3-flash - 26,32 ₽ за 1 млн токенов, для anthropic/claude-fable-5.1 - 5193,50 ₽ за 1 млн токенов. Точная стоимость каждого запроса приходит в usage.cost_rub.