Reasoning tokens: сколько стоят рассуждения модели и как их ограничить
Короткий ответ, а в статистике тысячи выходных токенов — так выглядят рассуждения модели. Разбираем, откуда они берутся, во что обходятся и как ими управлять в OpenAI- и Anthropic-формате.
6 мин · · модели · экономия
Вы задали модели короткий вопрос, получили ответ в три строки, а в статистике — несколько тысяч выходных токенов. Чаще всего это reasoning tokens: модель «думала» перед ответом, и эти размышления тоже стоят денег. Ниже — что это за токены, как вендоры их тарифицируют, какими параметрами их ограничить и где следить за расходом.
Что такое токены рассуждения
Модели с рассуждениями (reasoning-модели) перед финальным ответом генерируют внутреннюю цепочку рассуждений: разбирают задачу, перебирают варианты, проверяют себя. Эта цепочка состоит из обычных токенов, но в ответе вы её, как правило, не видите полностью.
Что говорят официальные документации вендоров:
- OpenAI: токены рассуждения занимают место в контекстном окне модели и тарифицируются как выходные токены. В зависимости от сложности задачи их может быть от нескольких сотен до десятков тысяч.
- Anthropic: рассуждения Claude приходят блоками типа
thinking. У новых моделей текст этих блоков по умолчанию не возвращается, но, как сказано в документации, рассуждение происходит и тарифицируется одинаково при любой настройке отображения.
Отсюда главный практический вывод: стоимость ответа зависит не только от длины видимого текста, но и от того, сколько модель думала.
Reasoning tokens: стоимость на примере
Формула та же, что для любого запроса, только выходных токенов больше, чем видно глазами:
стоимость = вход × цена_входа / 1 000 000
+ (видимый_ответ + рассуждения) × цена_выхода / 1 000 000
Пример для claude-opus-5-5 (цены на 6 октября 2026: $0.4 за 1M входных и $2 за 1M выходных токенов). Запрос — 3 000 входных токенов, видимый ответ — 500 токенов, рассуждения — 4 000 токенов (условные цифры для примера):
- Вход: 3 000 × $0.4 / 1M = $0.0012
- Выход: (500 + 4 000) × $2 / 1M = 4 500 × $2 / 1M = $0.009
- Итого: $0.0102
Без рассуждений тот же запрос стоил бы 3 000 × $0.4 / 1M + 500 × $2 / 1M = $0.0012 + $0.001 = $0.0022. На 10 000 таких запросов в месяц разница — $102 против $22. Поэтому у задач, где глубокие рассуждения не нужны, их стоит ограничивать.
Цена выхода у большинства моделей заметно выше цены входа, это обычная практика вендоров. Актуальный список и цены — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете.
Где увидеть токены рассуждения в ответе
В официальных форматах вендоров число токенов рассуждения отдаётся отдельным полем:
| Формат | Где смотреть |
|---|---|
| OpenAI Chat Completions | usage.completion_tokens_details.reasoning_tokens (уже входят в completion_tokens) |
| OpenAI Responses | usage.output_tokens_details.reasoning_tokens |
| Anthropic Messages | рассуждения входят в usage.output_tokens |
Какие детализирующие поля приходят для конкретной модели через шлюз, проверьте на тестовом запросе. Надёжный признак в любом случае — сравнить выходные токены из usage с длиной видимого ответа: если выход в разы больше текста, модель рассуждала.
Параметр reasoning_effort в OpenAI-формате
В Chat Completions глубину рассуждений задаёт параметр reasoning_effort. В официальном SDK OpenAI для него перечислены значения none, minimal, low, medium, high, xhigh и max, но, как подчёркивает OpenAI, не каждая модель поддерживает каждое значение. Чем ниже уровень, тем меньше токенов уходит на рассуждения и тем быстрее ответ.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zukko.pro/v1",
api_key=os.environ["ZUKKO_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6.1-sol",
reasoning_effort="low",
max_completion_tokens=4000,
messages=[{"role": "user", "content": "Классифицируй отзыв: «Доставили быстро, но коробка помята»"}],
)
usage = response.usage
details = usage.completion_tokens_details
print(response.choices[0].message.content)
print("выход всего:", usage.completion_tokens)
print("из них рассуждения:", details.reasoning_tokens if details else "нет данных")В справочнике Zukko reasoning_effort указан среди необязательных параметров chat/completions; как модель отреагирует на конкретное значение, определяет её провайдер.
Обратите внимание на max_completion_tokens: по документации OpenAI это потолок для видимого ответа и рассуждений вместе. Если поставить его слишком низко, модель может израсходовать лимит на рассуждения и вернуть пустой ответ — а входные и потраченные на рассуждения токены всё равно оплачиваются. OpenAI советует оставлять запас при первых экспериментах.
В Responses API тот же смысл у объекта reasoning:
response = client.responses.create(
model="gpt-6.1-sol",
reasoning={"effort": "low"},
input="Сформулируй тему письма клиенту о переносе встречи",
)
print(response.output_text)
print(response.usage)Параметр thinking в Anthropic-формате
У Claude настройки рассуждений устроены иначе, и за последний год они поменялись. По текущей документации Anthropic:
- На новых моделях рассуждения адаптивные:
thinking: {"type": "adaptive"}— модель сама решает, думать ли и сколько. - Глубину задаёт параметр
effortвнутриoutput_config:low,medium,high,xhigh,max. Это рекомендуемый рычаг для контроля расхода. - Старый вариант
thinking: {"type": "enabled", "budget_tokens": N}устарел: на моделях семейства 4.6 он ещё работает, а более новые модели отклоняют его с ошибкой 400. - У Claude Opus 5.5 рассуждения отключить нельзя, а
effortпо умолчанию —medium; снизить расход можно только уровнемlow.
import os
import anthropic
client = anthropic.Anthropic(
base_url="https://api.zukko.pro",
api_key=os.environ["ZUKKO_API_KEY"],
)
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=16000,
thinking={"type": "adaptive"},
output_config={"effort": "low"},
messages=[{"role": "user", "content": "Предложи три варианта названия для сервиса доставки цветов"}],
)
for block in response.content:
if block.type == "text":
print(block.text)
print("выходных токенов:", response.usage.output_tokens)Если ваша версия SDK не знает output_config, обновите пакет anthropic. Сделайте несколько тестовых запросов с разными effort и сравните output_tokens: так вы проверите и то, что параметр принимается через шлюз, и реальный эффект на расход. Когда рассуждения действительно нужны, разобрано в статье про extended thinking.
Как следить за расходом
- Кабинет. В разделе «Использование» видна история расходов. Если после включения новой модели или параметра расход вырос, начните поиск отсюда.
- API. Баланс и историю списаний можно забирать программно — см. справочник по /v1/usage. Удобно для ежедневного отчёта в чат команды.
- Логирование
usage. Пишите в лог по каждому запросу модель, входные и выходные токены, а где доступно — токены рассуждения. Через неделю будет видно, какие задачи «думают» дороже всего. - Отдельные ключи. Для сервиса с тяжёлыми рассуждениями заведите отдельный ключ с дневным лимитом в долларах: превышение не затронет остальные сервисы. Как это настроить — в статье о лимитах расхода для агентов.
- Потолок на ответ.
max_tokensилиmax_completion_tokensограничивает худший случай, но оставляйте запас, чтобы рассуждения не съели весь лимит.
Как подобрать уровень рассуждений
Классификация, извлечение полей, короткие ответы в чате обычно не требуют глубоких рассуждений — начните с низкого уровня. Многошаговые задачи с кодом, расчётами и планированием могут выиграть от высокого. Проверьте на своих данных: возьмите 20 типичных задач, прогоните на двух уровнях, сравните качество и выходные токены. Считайте стоимость решённой задачи, а не запроса: дешёвый ответ, который приходится переспрашивать, в итоге дороже.
Ключ для экспериментов создаётся на странице API-ключи — задайте ему небольшой дневной лимит и сравнивайте уровни спокойно.
Частые вопросы
Почему completion_tokens намного больше, чем текст ответа?
В них входят токены рассуждения. Посмотрите поле completion_tokens_details.reasoning_tokens, если оно есть в ответе, или снизьте reasoning_effort и сравните.
По какой цене оплачиваются рассуждения?
У OpenAI и Anthropic токены рассуждения тарифицируются как выходные. Фактическое списание по своим запросам смотрите в разделе «Использование» кабинета.
Можно ли полностью отключить рассуждения?
Зависит от модели. В OpenAI-формате у части моделей есть значение reasoning_effort="none". У Claude Sonnet 5 по документации Anthropic допускается thinking: {"type": "disabled"}, а у Claude Opus 5.5 рассуждения отключить нельзя — остаётся effort: "low".
Можно ли прочитать сами рассуждения?
Полную цепочку вендоры не отдают. Anthropic и OpenAI умеют возвращать краткое изложение рассуждений по отдельному параметру, но поддержку этого через шлюз для конкретной модели проверьте тестовым запросом.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Цена Grok API: расчёт для Grok 4.7, 4.6 и 4.5 на примерахСчитаем стоимость запросов к Grok 4.7, 4.6 и 4.5 в Zukko на трёх сценариях и сравниваем с официальными ценами xAI. Формулы видны, арифметика проверяема.
- DeepSeek API бесплатно: есть ли халява и сколько стоит минимумБесплатного доступа мы не обещаем, но минимум очень низкий. Считаем по формуле, сколько запросов помещается в один доллар.
- Цена DeepSeek API: расчёт стоимости V4 Pro и V4.1 Flash на примерахСчитаем, сколько стоят запросы к трём моделям DeepSeek: формула, три типовых сценария на 10 000 запросов, роль кэша и скрипт для подсчёта по usage.
- Агенты opencode: как настроить роли, модели и инструментыСвой агент в opencode — это роль, модель и список разрешений. Показываем конфиг и пример, где рутину делает дешёвая модель, а код правит сильная.