Расширенное мышление (Extended Thinking)
В мире больших языковых моделей (LLM) способность решать сложные задачи с высокой точностью является ключевой. Claude, разработанный Anthropic, предлагает передовую функцию под названием "Расширенное мышление" (Extended Thinking), которая позволяет модели глубоко обдумывать сложные проблемы, прежде чем генерировать окончательный ответ. Это не просто быстрый ответ, а скорее видимый процесс рассуждения, который пользователи могут изучить, чтобы понять логику Claude.
Включение "Расширенного мышления" значительно улучшает способность Claude справляться с комплексными задачами, повышая точность и надежность ответов. Однако эта мощная функция имеет свои компромиссы. Вы будете платить за все токены, сгенерированные во время фазы мышления, а дополнительное время обработки увеличивает задержку ответа (latency). Ключ к эффективному использованию этой функции — понимание того, когда повышенный интеллект оправдывает дополнительные затраты и время ожидания.
Как работает "Расширенное мышление"
Без "Расширенного мышления" поток ответов Claude довольно прост: вы отправляете пользовательское сообщение
(user message) с текстовым блоком и получаете в ответ сообщение от ассистента (assistant message)
также с текстовым блоком. Модель генерирует ответ напрямую, основываясь на входных данных.
Когда "Расширенное мышление" активировано, структура ответа меняется значительно. Вместо одного блока вы получите сообщение от ассистента, содержащее два различных блока:
- Блок с процессом рассуждения Claude: Этот блок содержит пошаговую логику, внутренние размышления и промежуточные шаги, которые Claude предпринял для решения вашей задачи. Это позволяет вам "заглянуть" в мыслительный процесс модели.
- Блок с окончательным ответом: Это итоговый, отформатированный ответ, который Claude генерирует после завершения своего мыслительного процесса.
Такой подход позволяет Claude более тщательно анализировать запрос, разбивать его на подзадачи, рассматривать различные варианты и только затем формулировать окончательный ответ. Это особенно полезно для задач, требующих многоэтапного рассуждения, логических выводов или глубокого понимания контекста.
Когда использовать "Расширенное мышление"
Решение о включении "Расширенного мышления" должно основываться на тщательной оценке ваших запросов и результатов. Вот рекомендуемый подход:
- Начните без "Расширенного мышления": Сначала напишите и протестируйте свой запрос без активации этой функции.
- Оцените точность: Проведите оценку, чтобы измерить точность и качество ответов Claude.
- Оптимизируйте запрос: Если результаты не соответствуют вашим стандартам, попробуйте оптимизировать сам запрос (prompt engineering).
- Рассмотрите "Расширенное мышление": Только если после всех усилий по оптимизации запроса результаты все еще неудовлетворительны, тогда рассмотрите возможность включения "Расширенного мышления" в качестве решения.
Этот подход помогает гарантировать, что вы используете эту более дорогую и медленную функцию только тогда, когда это действительно необходимо и оправдано сложностью задачи.
Система криптографических подписей
Каждый блок мышления (thinking block) включает в себя криптографическую подпись, которая служит важной цели безопасности. Эта подпись гарантирует, что текст мышления не был изменен, когда вы включаете это сообщение в последующие ходы разговора (future conversation turns).
Claude в значительной степени полагается на содержание блока мышления для генерации последующих ответов. Поэтому предотвращение несанкционированного изменения этого текста имеет решающее значение для поддержания безопасного и последовательного поведения модели. Если вы измените текст мышления, проверка подписи завершится неудачей, и Claude может не понять предыдущий контекст или выдать некорректный ответ.
Редактированное мышление (Redacted Thinking)
Иногда процесс мышления Claude может быть помечен внутренними системами безопасности Anthropic. Когда это происходит, вы получите редактированный блок мышления (redacted thinking block) вместо исходного текста мышления.
Редактированное содержимое содержит фактический текст мышления в зашифрованном виде. Хотя вы не сможете его прочитать, вы все равно можете включить этот блок в последующие ходы разговора. Это гарантирует, что Claude не потеряет контекст из своих предыдущих рассуждений, даже если детали этих рассуждений скрыты по соображениям безопасности.
Включение "Расширенного мышления" в коде
Чтобы включить "Расширенное мышление" в вашем коде, вам потребуется изменить параметры вашей функции чата (например, при использовании Messages API или Vertex AI API). Обычно это включает добавление двух новых параметров:
def chat(
messages,
system=None,
temperature=1.0,
stop_sequences=[],
tools=None,
max_tokens_to_sample=1024, # Пример параметра для общего количества токенов
thinking=False,
thinking_budget=1024
):
# ... ваш код для вызова API ...
-
thinking: Логический параметр (True/False), который активирует или деактивирует функцию "Расширенного мышления". -
thinking_budget: Представляет собой максимальное количество токенов, которое Claude может использовать для своего процесса рассуждения. Минимально допустимое значение дляthinking_budgetсоставляет 1024 токена.
Важно отметить, что ваш общий параметр для максимального количества токенов в ответе
(например, max_tokens_to_sample) должен превышать ваш thinking_budget.
Если вы установите thinking_budget в 1024 токена, то max_tokens_to_sample
должен быть как минимум 1025 токенов.
На практике вам, вероятно, потребуется гораздо больший буфер. Например, при thinking_budget в 1024 токена
и max_tokens_to_sample в 4000 токенов, Claude может использовать до 1024 токенов для мышления
и до 2976 токенов для фактического ответа.
При включении функции "Расширенного мышления" добавьте соответствующую конфигурацию в параметры вашего API-запроса:
if thinking:
params["thinking"] = {
"type": "enabled",
"budget": thinking_budget
}
# Затем передайте params в ваш API-вызов
Тестирование redacted-ответов
Во время разработки может возникнуть необходимость протестировать, как ваше приложение обрабатывает редактированные блоки мышления. Вы можете принудительно заставить Claude вернуть такой ответ, включив специальную строку-триггер в ваше сообщение:
TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB
Эта строка должна быть частью вашего пользовательского запроса. Использование этого триггера гарантирует, что ваша обработка ошибок и логика приложения корректно работают при столкновении с редактированным содержимым в производственной среде.