Модель и effort level в Claude Code: как это работает

Anthropic объяснили как устроены model selection и effort level в Claude Code — и когда их нужно менять.

Модель и effort level в Claude Code: как это работает
TL;DR: В Claude Code два главных рычага — модель (какой набор знаний) и effort level (сколько думать над задачей). Если Claude не знает — меняй модель. Если не старался — поднимай effort. Для большинства задач дефолты работают нормально, и крутить ничего не нужно.

Если работаешь в Claude Code, наверняка было такое: подаёшь задачу, получаешь что-то неправильное, начинаешь экспериментировать — пробуешь другую модель, ставишь /effort high, и непонятно что именно помогло. Команда Claude опубликовала подробное объяснение, как эти два параметра работают на самом деле. Коротко пересказываю.

Что происходит, когда жмёшь Enter

Когда отправляешь запрос, Claude Code собирает всё — твоё сообщение, system prompt, инструкции из CLAUDE.md, историю диалога, открытые файлы — в один API-запрос. На сервере этот текст токенизируется: разбивается на куски, каждый кусок заменяется числом из фиксированного словаря. const превращается в 1978, await — в 4293.

Токенизатор разбивает текст на токены с числовыми ID

Дальше модель берёт эту последовательность чисел и предсказывает следующий токен. Не весь ответ сразу — один токен, потом ещё один, снова и снова. 200-токенный ответ — это 200 отдельных проходов через модель.

Предсказания определяются весами (weights, параметры). Это миллиарды чисел, в которых зашито всё что модель знает — о TypeScript, Go, паттернах архитектуры, популярных библиотеках. После обучения веса заморожены. Ни твой промпт, ни CLAUDE.md, ни контекст их не меняют.

Отсюда вытекают две вещи. Во-первых, почему Claude галлюцинирует API — он генерирует правдоподобную последовательность токенов из того, что видел на обучении, а не ищет информацию в документации. Во-вторых, почему подсунуть документацию в контекст работает — ты управляешь предсказанием, но не обучаешь модель. Она не запомнит эту библиотеку после сессии.

Когда меняешь модель — меняешь набор весов. Другая модель = другие замороженные знания, другая цена за токен.

Как работает effort level

Всё что Claude выдаёт — токены: видимые размышления (thinking), вызовы инструментов, финальный ответ тебе. Всё из одного и того же цикла генерации, по одной цене за токен.

Effort level передаётся в запросе рядом с твоим промптом. Модель обучена реагировать на него — это часть весов. Высокий effort — сигнал для модели: убедись в результате прежде чем говорить «готово». На практике это больше thinking, больше проверок, пересмотр промежуточных результатов.

Одинаковый промпт на двух уровнях effort: вариант с высоким effort генерирует примерно в 7 раз больше токенов

Важная деталь: effort — не жёсткий лимит токенов. Если задача простая, Claude не будет искусственно раздувать ответ. Команда Anthropic говорит, что «overthinking» специально отслеживается при обучении — он ухудшает результат. На практике ты видишь это когда task list в Claude Code редактируется прямо во время выполнения: нашёл баг на первой гипотезе — написал «оставшиеся две пропускаем» и пошёл дальше.

Fable, Opus, Sonnet — аналогия, которую стоит запомнить

Lydia Hallie из команды Claude Code предложила фрейм, который мне понравился. Fable — специалист, видевший задачи, каких никто больше не видел: одного взгляда хватает, чтобы заметить то, что все пропустили. Opus — эксперт с глубоким опытом, идёшь к нему с архитектурным решением или хитрым багом. Sonnet — крутой универсал, который разберётся в твоём конкретном коде.

Effort level — это сколько времени ты им даёшь.

Opus на низком effort — как пять минут с экспертом. Он принесёт опыт, которого нет в твоём кодовой базе: паттерны, которые он видел, ловушки, которые знает. Но пять минут — это быстрый взгляд, не внимательное чтение.

Sonnet на высоком effort — как отдать задачу универсалу на весь день. Он прочтёт всё, запустит тесты, перепроверит. Чего принесёт меньше — интуицию «я видел именно это раньше».

Fable отдельная история. Даже на низком effort он замечает то, что другим не видно. Именно за это ты платишь больше всего — и поэтому имеет смысл беречь его для задач, где это реально нужно.

Что делать, когда Claude ошибается

Первый инстинкт — покрутить настройки. Правильный — сначала посмотреть на контекст. Промпт достаточно конкретный? Claude подключён к нужным инструментам? Задача хорошо сформулирована?

Если с контекстом всё окей, тогда один вопрос:

Два вопроса помогают выбрать правильный рычаг: менять модель или поднимать effort

Если Claude уверенно выдавал что-то неправильное независимо от контекста — не знал. Меняй на более сильную модель. Если пропустил файл, не запустил тесты, не перепроверил — не старался. Поднимай effort.

Это эвристика, не жёсткое правило. Но обычно помогает быстро найти нужный рычаг.

✈️
Если хочешь быть в курсе новых инструментов и как работает Claude Code — подписывайся в телеге.

Модель, effort и деньги

На простых задачах обе модели справляются одинаково. Большая тратит больше токенов на дополнительные проверки и стоит дороже за токен. Вывод: на рутине Sonnet сэкономит без потери качества.

На сложных многошаговых задачах ситуация другая. Sonnet шлифует задачу через много итераций, пока Opus добирается до той же точки за меньшее количество шагов. Платишь больше за токен, но меньше токенов в итоге.

На сложных задачах большая модель может быть дешевле: меньше итераций для достижения нужного результата

С Fable разрыв максимальный. Он справляется с задачами, которые Opus и Sonnet не могут закрыть вообще — даже на максимальном effort. И при этом стоит больше всего за токен. Поэтому лучше приберечь его для действительно тяжёлых задач.

Ещё нюанс: effort влияет на то, сколько Claude готов потратить, но не ограничивает жёстко. Единственный жёсткий лимит — max_tokens, который обрезает ответ посередине. Это грубый инструмент, в основном для API-разработчиков. В обычной работе лучше давать инструкции в промпте или ставить task budget.

Что ещё почитать