Рассуждающие модели тратят токены до того, как начнут отвечать. Эти токены выходные и оплачиваются как выходные — даже когда вы их не видите.
Площадки настраивают размышление по-разному: одни принимают уровень усилия словом, другие — бюджет в токенах. Мы приводим это к одному блоку reasoning и переводим его в родной формат площадки.
{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Докажи, что √2 иррационально"}],
"reasoning": {
"effort": "high", // minimal | low | medium | high | max — либо это,
"max_tokens": 4000, // либо это; вместе не передавать
"exclude": false, // true — не возвращать текст рассуждений
"enabled": true // выводится из effort/max_tokens, явно нужен редко
}
}| Поле | Значения | Что делает |
|---|---|---|
| effort | minimal, low, medium, high, max, none | Уровень усилия. Мы пересчитываем его в бюджет токенов для площадок, которые понимают только бюджет. |
| max_tokens | целое | Прямой бюджет размышления. Точнее, чем effort, но переносится между моделями хуже. |
| exclude | булево, по умолчанию false | Не класть текст рассуждений в ответ. На стоимость не влияет — токены уже потрачены. |
| enabled | булево | Включить размышление с параметрами площадки по умолчанию. |
400. Признак виден в каталоге: reasoning.mandatory.{
"id": "anthropic/claude-sonnet-5",
"reasoning": {
"supported_efforts": ["max", "high", "medium", "low"],
"supports_max_tokens": true,
"default_effort": "medium",
"default_enabled": true,
"mandatory": false
}
}Уровни отдаются по убыванию усилия. Если поля reasoning нет совсем — модель не рассуждающая, и блок в запросе будет отброшен.
{
"choices": [{
"message": {
"role": "assistant",
"reasoning": "Предположим, √2 = p/q в несократимой дроби…",
"content": "√2 иррационально. Доказательство от противного: …"
}
}],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 1842,
"reasoning_tokens": 1610,
"total_tokens": 1866
}
}reasoning_tokens — часть completion_tokens, а не добавка к ним. В примере видимого текста ответа всего 232 токена, а заплатите вы за 1842. Это нормальная работа рассуждающей модели, и это же причина держать effort низким там, где задача простая.
usage и в логе активности. Отсутствие поля reasoning не означает, что размышления не было.medium бывает пятикратной, поэтому включать это по умолчанию на всём потоке не стоит.Вернув reasoning в истории следующим запросом, вы даёте модели увидеть собственный ход мысли — это заметно помогает в диалогах с инструментами. Но это же входные токены, за которые вы платите второй раз. В длинных агентских циклах рассуждения из старых ходов обычно выгоднее выбрасывать, оставляя только результаты.