Суть урока
Шахматист перед сложным ходом думает 5 минут: перебирает варианты, просчитывает последствия, отбрасывает плохие пути. Extended Thinking (расширенное мышление — режим глубокого анализа Claude) — это то же самое для Claude: он «думает вслух» перед ответом, а не выдаёт первое что пришло. Для простых задач это лишнее. Для архитектурных решений и сложного анализа — принципиальная разница в качестве.
Термины урока: extended thinking (расширенное мышление — режим глубокого анализа Claude), API (эй-пи-ай — интерфейс программирования), token (токен — единица текста для AI), prompt (промпт — запрос к AI), prompt caching (кэширование промптов — сохранение промпта для повторного использования без повторной оплаты).
Ключевые концепции
- Extended Thinking — режим API, в котором Claude генерирует внутренний монолог до финального ответа
- Thinking tokens — токены внутреннего размышления, выделяются в отдельный блок
thinking - budget_tokens — параметр, ограничивающий максимум токенов на размышление (ручной режим, только для старых моделей: на 4.6 он устарел, на 4.7 и новее вернёт ошибку 400)
- Adaptive Thinking — автоматический режим (
"type": "adaptive"): модель сама решает, думать ли и насколько глубоко. Глубину задаёт параметрeffortвoutput_config. Основной способ для всех актуальных моделей (на октябрь 2026: Opus 5.5, Sonnet 5.5, Fable 5.1) - display — параметр отображения:
"summarized"(саммари размышлений) или"omitted"(только подпись, без текста). На Opus 5.5, Sonnet 5.5 и Fable 5.1 по умолчанию"omitted" - Interleaved Thinking — размышления между каждым вызовом инструмента (tool call), а не только в начале
- Thinking block — отдельный блок в ответе API с полями
type: "thinking",thinking: "..."иsignature: "..." - Стоимость — thinking tokens тарифицируются как output tokens (дороже input). Биллинг по полным thinking-токенам, даже если display =
"summarized"
Теория
Как это работает изнутри
Без Extended Thinking Claude получает запрос и сразу генерирует ответ. Это быстро, но мышление «плоское» — модель не успевает проверить альтернативы.
С Extended Thinking запрос проходит через два этапа:
Запрос → [Thinking phase: Claude перебирает варианты] → Финальный ответThinking phase невидима по умолчанию — ты видишь только финальный ответ. Через API можно получить саммари внутреннего монолога (сырой ход мысли не отдаётся ни при каких настройках).
Что нового к октябрю 2026: у актуальных моделей (Opus 5.5, Sonnet 5.5, Fable 5.1) размышление уже включено по умолчанию, а стандартный способ его выключить (thinking: {"type": "disabled"}) вернёт ошибку 400. Поэтому задача разработчика сместилась: не «включить thinking», а «выбрать глубину» (effort) и решить, показывать ли текст размышлений. Старый ручной режим с budget_tokens нужен только для устаревших моделей.
Два режима: Manual vs Adaptive
В API есть два способа управлять размышлением:
1. Manual (ручной бюджет) — ты сам указываешь лимит токенов. Работает только на устаревших моделях:
thinking={"type": "enabled", "budget_tokens": 10000}2. Adaptive (автоматический) — модель сама решает сколько думать, а глубину задаёшь параметром effort отдельно от thinking:
thinking={"type": "adaptive"},
output_config={"effort": "medium"} # low / medium / high и выше, зависит от моделиКакие модели что поддерживают
| Модель (на октябрь 2026) | Manual ("enabled") |
Adaptive ("adaptive") |
Примечание |
|---|---|---|---|
| Claude Fable 5.1, Opus 5.5, Sonnet 5.5 | ❌ вернёт ошибку 400 | ✅ только adaptive | Размышление включено по умолчанию ("disabled" вернёт 400); display по умолчанию "omitted" |
| Claude Opus 4.8 и Opus 4.7 | ❌ вернёт ошибку 400 | ✅ только adaptive | Без поля thinking размышления выключены, включи явно |
| Claude Opus 4.6, Sonnet 4.6 | ⚠️ deprecated | ✅ рекомендуется | Manual ещё работает |
| Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 | ✅ единственный режим | ❌ вернёт ошибку 400 | Адаптивного режима нет |
Более старые модели постепенно выводятся из API, актуальный список: Актуальное сейчас.
Тренд: Anthropic ушла к Adaptive. Для новых проектов используй "adaptive" и effort.
API-запрос с Extended Thinking (Manual, для устаревших моделей)
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-haiku-4-5", # ручной режим: только для старых моделей, у Haiku 4.5 он единственный
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000 # до 10000 токенов на размышление
},
messages=[{
"role": "user",
"content": """Спроектируй архитектуру системы для следующего кейса:
- SaaS-платформа для малого бизнеса
- 1000 активных пользователей
- Нужна мультиарендность (multi-tenancy)
- Бюджет: $200/мес на инфраструктуру
- Команда: 1 разработчик
Оцени минимум 3 подхода с реальными компромиссами."""
}]
)
# Разбираем блоки ответа
for block in response.content:
if block.type == "thinking":
print("=== ВНУТРЕННИЕ РАЗМЫШЛЕНИЯ ===")
print(block.thinking)
print()
elif block.type == "text":
print("=== ФИНАЛЬНЫЙ ОТВЕТ ===")
print(block.text)API-запрос с Adaptive Thinking (рекомендуется для новых моделей)
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
thinking={
"type": "adaptive",
"display": "summarized" # чтобы увидеть саммари размышлений
},
output_config={"effort": "high"}, # глубина работы: low, medium, high и выше (зависит от модели)
messages=[{
"role": "user",
"content": "Спроектируй архитектуру SaaS-платформы с multi-tenancy..."
}]
)С Adaptive не нужно гадать с budget_tokens — модель сама определяет глубину размышлений, а ты двигаешь только effort. Помни: при низком effort модель может вообще пропустить размышления на простом запросе. Если SDK ругается на output_config, обнови библиотеку: pip install -U anthropic.
Что видно в thinking блоке
Пример реального внутреннего монолога (сокращённо):
Хм, нужно спроектировать архитектуру для SaaS с ограниченным бюджетом... Вариант 1: Shared database schema - Плюсы: простота, дёшево, одна база - Минусы: сложно изолировать данные клиентов, риски при росте - Для 1000 юзеров OK, но что если вырастет до 10000? Вариант 2: Database per tenant - Плюсы: полная изоляция, просто откатить одного клиента - Минусы: $200/мес не хватит если 1000 клиентов = 1000 баз - Исключаю для такого бюджета Вариант 3: Schema per tenant (Postgres schemas) - Компромисс: изоляция без взрывного роста баз - Row Level Security добавит ещё один слой - Cloudflare Workers + PlanetScale serverless = вписывается в $200/мес Буду рекомендовать Вариант 3 как основной, с объяснением когда переходить на Вариант 2...
Это не показательная витрина — это реальный процесс перебора вариантов.
Параметр budget_tokens (Manual режим)
| budget_tokens | Когда использовать | Стоимость (пример расчёта) |
|---|---|---|
| 1 024 (минимум) | Умеренно сложные задачи | ~$0.005 за запрос |
| 5 000 | Архитектурные решения, анализ | ~$0.025 за запрос |
| 10 000 | Максимальная глубина, математика | ~$0.05 за запрос |
| 32 000 | Крайне сложные задачи | ~$0.16 за запрос |
Расчёт: токены размышления × цена output-токена. В примере взята цена $5 за 1 млн output-токенов (на октябрь 2026 так стоит Haiku 4.5: у неё ручной режим ещё работает, а из API её могут вывести не раньше 15.10.2026); thinking tokens считаются как output. Цены у моделей разные: актуальные цены и версии: Актуальное сейчас. Реальный расход смотри в поле usage.output_tokens_details.thinking_tokens ответа.
Ограничения: budget_tokens — не меньше 1024 и меньше max_tokens (за исключением interleaved thinking — там может быть больше). Бюджет — ориентир, а не жёсткий потолок: модель может остановиться раньше; жёсткий потолок задаёт max_tokens. Бюджет больше 32 000 токенов документация советует запускать через Batch API: такие запросы идут долго и упираются в таймауты.
Параметр display — что видит пользователь
Контролирует, что возвращается в thinking-блоке ответа:
| display | Что возвращается | Для чего |
|---|---|---|
"summarized" |
Саммари размышлений (по умолчанию на Opus 4.6, Sonnet 4.6 и старее) | Отладка промптов, понимание логики модели |
"omitted" |
Пустое поле thinking, только signature (по умолчанию на Opus 5.5, Sonnet 5.5, Fable 5.1) |
Продакшен (быстрее time-to-first-token) |
Имя поля одинаково в обоих режимах. Текст в блоке — всегда саммари, а не сырой ход мысли.
# Режим для продакшена — быстрее, без лишних данных
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
thinking={
"type": "adaptive",
"display": "omitted" # ← только подпись, без текста размышлений
},
messages=[{"role": "user", "content": "..."}]
)Важно: при "omitted" ты всё равно платишь за все thinking-токены. Экономия не в деньгах, а во времени доставки ответа. Если передаёшь thinking-блоки обратно в multi-turn разговоре (при работе с инструментами это обязательно), передавай их без изменений: по полю signature сервер восстановит полный контекст размышлений.
Streaming thinking tokens
Для длинных размышлений имеет смысл стримить — так видно прогресс:
with client.messages.stream(
model="claude-opus-5-5",
max_tokens=16000,
thinking={
"type": "adaptive",
"display": "summarized"
},
messages=[{"role": "user", "content": "...твой сложный запрос..."}]
) as stream:
for event in stream:
if event.type == 'content_block_start':
if event.content_block.type == 'thinking':
print("[Начинаю думать...]")
elif event.type == 'content_block_delta':
if event.delta.type == 'thinking_delta':
print(event.delta.thinking, end='', flush=True)
elif event.delta.type == 'text_delta':
print(event.delta.text, end='', flush=True)
elif event.type == 'content_block_stop':
print("\n[Блок завершён]")При стриминге приходят три типа delta-событий (при display: "omitted" thinking_delta приходит с пустой строкой, текста размышлений нет):
thinking_delta— текст размышлений (кусочками)signature_delta— криптоподпись (для multi-turn)text_delta— финальный ответ
Когда Extended Thinking нужен
Использовать:
- Архитектурные решения (выбор технологий, структура системы)
- Многоступенчатые математические задачи
- Анализ сложных трейдоффов с несколькими переменными
- Отладка сложных багов где причина неочевидна
- Написание критически важных алгоритмов
Не использовать:
- Написание простого текста или краткое резюме
- Обычные API-вызовы и несложный код
- Задачи где первый ответ и так корректен
- Если нужна скорость и цена важна
Interleaved Thinking — размышления между tool calls
Когда Claude использует инструменты (tools), он может думать после каждого вызова инструмента, а не только в самом начале. Это называется Interleaved Thinking.
Запрос → [Thinking] → tool_use: get_weather("Москва")
→ tool_result: "−5°C"
→ [Thinking: "Ок, в Москве холодно, нужно учесть..."] ← думает МЕЖДУ вызовами
→ tool_use: get_weather("Сочи")
→ tool_result: "+18°C"
→ [Thinking: "Сочи теплее, сравню..."]
→ Финальный ответПоддержка моделей (на октябрь 2026):
- Opus 5.5, Sonnet 5.5, Fable 5.1, а также Opus 4.8 и 4.7 — interleaved автоматически в adaptive-режиме, заголовок не нужен
- Opus 4.6 — только в adaptive-режиме (в manual его нет)
- Sonnet 4.6 — в adaptive-режиме автоматически; в manual ещё работает через beta-заголовок
interleaved-thinking-2025-05-14, но он deprecated - Opus 4.5, Sonnet 4.5 и другие Claude 4 — через beta-заголовок
interleaved-thinking-2025-05-14 - Haiku 4.5 — не поддерживает
Важно при работе с tools: при отправке tool_result обратно всегда передавай все thinking-блоки из предыдущего ответа assistant — не модифицируй и не убирай их.
Пример: с thinking vs без
Без Extended Thinking — запрос: «Выбери БД для моего SaaS»
Ответ придёт за 2-3 секунды. Скорее всего порекомендует PostgreSQL или MongoDB с шаблонными аргументами.
С Extended Thinking (adaptive, effort high; в старом ручном режиме — budget_tokens: 8000):
Claude потратит на анализ заметно больше времени (порядка десятков секунд, зависит от модели и нагрузки). В thinking блоке будет видно: он рассмотрит твои конкретные параметры, сравнит стоимость разных облачных БД при нагрузке 1000 пользователей, учтёт что у тебя один разработчик, взвесит PlanetScale vs Supabase vs Neon по реальным критериям.
Качество ответа заметно выше — не потому что модель «умнее», а потому что она успела думать.
Ограничения Extended Thinking
Не все функции API совместимы с Extended Thinking:
| Функция | Совместимость | Примечание |
|---|---|---|
tool_choice: "auto" |
✅ | Работает |
tool_choice: "none" |
✅ | Работает |
tool_choice: "any" |
❌ в manual; в adaptive работает, кроме Opus 5.5, Sonnet 5.5 и Fable 5.1 | На этих трёх моделях принудительный вызов инструмента всегда даёт ошибку 400 |
tool_choice: {"type": "tool", "name": "..."} |
❌ в manual; в adaptive работает, кроме Opus 5.5, Sonnet 5.5 и Fable 5.1 | Так же, как выше |
max_tokens: 0 (прогрев кэша) |
❌ | Несовместимо |
| Prompt Caching (system prompt) | ⚠️ | При смене режима thinking, budget_tokens или effort кэш system prompt и tools тоже может сброситься: считай, что кэш начинается заново |
| Prompt Caching (messages) | ⚠️ | Сбрасывается при любой смене режима thinking, budget_tokens или effort |
Multi-turn: передавай thinking-блоки
В многоходовых разговорах передавай все thinking-блоки из предыдущих ответов assistant без изменений: внутри цикла с инструментами это обязательно, в обычном диалоге рекомендуется. Иначе модель может потерять контекст своих размышлений:
# Ход 1
response1 = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
thinking={"type": "adaptive"},
messages=[{"role": "user", "content": "Первый вопрос?"}],
)
# Ход 2 — передай response1.content целиком (с thinking-блоками) и без изменений
response2 = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
thinking={"type": "adaptive"},
messages=[
{"role": "user", "content": "Первый вопрос?"},
{"role": "assistant", "content": response1.content}, # ← ВСЕ блоки
{"role": "user", "content": "Уточняющий вопрос?"},
],
)Практика
Задание: Архитектурное решение с Extended Thinking
Выбери реальную архитектурную задачу из своего проекта (или возьми учебную: «Как хранить пользовательские данные для SaaS с 500 клиентами?»)
Сначала запроси ответ без Extended Thinking и сохрани его:
python response_basic = client.messages.create( model="claude-haiku-4-5", # для сравнения: модель без размышлений по умолчанию max_tokens=2000, messages=[{"role": "user", "content": ТВОЙ_ЗАПРОС}] )Затем тот же запрос с Extended Thinking (Manual: у Haiku 4.5 это единственный режим размышлений):
python response_thinking = client.messages.create( model="claude-haiku-4-5", max_tokens=8000, thinking={"type": "enabled", "budget_tokens": 6000}, messages=[{"role": "user", "content": ТВОЙ_ЗАПРОС}] )И тот же запрос с Adaptive Thinking (актуальная модель, например Opus 5.5):
python response_adaptive = client.messages.create( model="claude-opus-5-5", max_tokens=8000, thinking={"type": "adaptive", "display": "summarized"}, output_config={"effort": "high"}, messages=[{"role": "user", "content": ТВОЙ_ЗАПРОС}] )Распечатай все финальные ответы и thinking блоки
Сравни: где deeper анализ? Что упустил «быстрый» ответ?
Оцени стоимость всех вариантов через
response.usage
Цель: почувствовать разницу качества и понять для каких задач оправдана доплата.
Инструменты и ресурсы
- Anthropic API docs — Extended Thinking и Thinking
- Python SDK —
pip install -U anthropic(бери свежую версию: параметрыoutput_configиdisplayпоявились недавно) - В Claude Code: уровень усилий задаётся командой
/effort(или флагом--effort), размышления показываетCtrl+O(подробный режим), словоultrathinkв запросе просит поглубже подумать на один ход; в Claude Code на Opus 5.5, Sonnet 5.5 и Fable 5.1 переключатель размышлений выключить нельзя. Подробнее: документация по моделям - Модели: Opus 5.5, Sonnet 5.5, Fable 5.1 — только adaptive; Opus 4.6 и Sonnet 4.6 — adaptive (manual устарел); Opus 4.5, Sonnet 4.5, Haiku 4.5 — только manual
- Цены: Актуальное сейчас, claude.com/pricing
Ключевые выводы
Extended Thinking — не магия, а время на перебор вариантов. Качество растёт, стоимость тоже. Thinking tokens тарифицируются как output: чтобы не переплачивать, снижай
effort(в ручном режиме —budget_tokens), а жёсткий потолок задавай черезmax_tokens. Для всех актуальных моделей используй Adaptive Thinking ("type": "adaptive") иeffortвoutput_config: модель сама решает сколько думать. Ручнойbudget_tokensна новых моделях даёт ошибку 400. Параметрdisplay: "omitted"ускоряет ответ в продакшене, но не экономит деньги — биллинг по полным thinking-токенам. Используй для архитектурных решений и сложного анализа. Для простых задач — лишний overhead.
Что дальше
Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс