Размышления в рабочих процессах с инструментами и несколькими ходами
Пройдите полный двухходовой цикл использования инструментов, который корректно сохраняет блоки размышлений, и посмотрите, как чередующиеся размышления меняют поток.
На этой странице разбирается полный двухходовой цикл «tool use» (использование инструментов) с включёнными размышлениями: Claude думает, запрашивает вызов инструмента, получает результат и завершает свой ответ, при этом блоки размышлений корректно обрабатываются на каждом шаге. Полные правила находятся на странице Размышления, в разделах Размышления с использованием инструментов и Сохранение блоков размышлений; эта страница показывает применение этих правил в исполняемом коде.
Правила, применяемые в этом разборе
Каждая ссылка ведёт к полной формулировке на странице «Размышления»:
- Ограничьте выбор инструмента значениями
autoилиnoneв ручном режиме: вариантыtool_choice, принудительно требующие использования инструментов, возвращают ошибку при ручных «extended thinking» (расширенных размышлениях) (thinking: {type: "enabled"}). Адаптивные размышления поддерживают принудительное использование инструментов, за исключением Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 и Claude Mythos 5.1, которые возвращают ошибку 400. Там, где принудительное использование инструментов допускается, размышления пропускаются: ответ начинается с вызова инструмента. - Сохраняйте одну конфигурацию размышлений на один ход ассистента: цикл использования инструментов — это один ход ассистента, поэтому меняйте конфигурацию только между ходами.
- Передавайте блоки размышлений обратно полностью и без изменений: когда вы возвращаете результат инструмента, блоки размышлений из сообщения ассистента должны вернуться вместе с ним.
- Повторяйте сообщение ассистента точно в том виде, в каком оно получено: пересборка сообщения или отфильтровывание блоков
redacted_thinkingвызывает ошибку 400.
В примерах используются адаптивные размышления; на моделях, поддерживающих только расширенные размышления, подставьте thinking: {type: "enabled", budget_tokens: N}. Правила цикла идентичны.
Разбор двухходового цикла использования инструментов
В примере определяется инструмент get_weather, Claude получает возможность подумать и запросить вызов инструмента, а затем возвращается результат инструмента вместе с ходом ассистента, повторённым точно в том виде, в каком он был получен, включая блок размышлений.
Выполните первый запрос с доступным инструментом
Отправьте запрос с включёнными адаптивными размышлениями и определённым инструментом. За исключением параметра
thinking, это стандартный запрос на использование инструментов:Pythonclient = anthropic.Anthropic() weather_tool = { "name": "get_weather", "description": "Get current weather for a location", "input_schema": { "type": "object", "properties": {"location": {"type": "string", "description": "City name"}}, "required": ["location"], }, } # Первый запрос — Claude отвечает размышлениями и запросом инструмента response = client.messages.create( model="claude-opus-5-5", max_tokens=16000, thinking={"type": "adaptive"}, tools=[weather_tool], messages=[{"role": "user", "content": "What's the weather in Paris?"}], ) print(response)Сохраните массив content для обратной отправки
В запуске, где Claude решил поразмышлять, вы должны увидеть в содержимом ответа блоки
thinkingиtool_use(на более простых запросах адаптивный режим может пропустить блок размышлений). Заметка, которую Claude пишет перед вызовом инструмента, возвращается в виде блокаtextили, на моделях, которые пишут обновления о ходе работы, в виде ещё одного блокаthinking. Сохраните этот массив content нетронутым: на следующем шаге он отправляется обратно дословно.Output{ "content": [ { "type": "thinking", "thinking": "The user wants to know the current weather in Paris. I have access to a function `get_weather`...", "signature": "BDaL4VrbR2Oj0hO4XpJxT28J5T...." }, { "type": "tool_use", "id": "toolu_01CswdEQBMshySk6Y9DFKrfq", "name": "get_weather", "input": { "location": "Paris" } } ] }Верните результат инструмента, дословно повторив ход ассистента
Выполните инструмент на своей стороне, затем отправьте второй запрос, который добавляет к разговору два сообщения. Первое — это содержимое ассистента, повторённое точно в том виде, в каком оно получено, так что блок размышлений остаётся неизменным рядом с блоком
tool_use. Второе — пользовательское сообщение, содержащееtool_result.Каждый пример — это самодостаточный скрипт: он повторяет первый запрос, а затем сразу отправляет последующий, используя только что полученный ответ.
Pythonclient = anthropic.Anthropic() weather_tool = { "name": "get_weather", "description": "Get current weather for a location", "input_schema": { "type": "object", "properties": {"location": {"type": "string", "description": "City name"}}, "required": ["location"], }, } response = client.messages.create( model="claude-opus-5-5", max_tokens=16000, thinking={"type": "adaptive"}, tools=[weather_tool], messages=[{"role": "user", "content": "What's the weather in Paris?"}], ) # Извлекаем блок tool_use, чтобы получить его ID для tool_result tool_use_block = next(block for block in response.content if block.type == "tool_use") # Вызовите ваш реальный погодный API — здесь должен быть ваш фактический вызов API # Представим, что мы получили вот такой ответ weather_data = {"temperature": 88} # Второй запрос — включаем ход ассистента и tool_result continuation = client.messages.create( model="claude-opus-5-5", max_tokens=16000, thinking={"type": "adaptive"}, tools=[weather_tool], messages=[ {"role": "user", "content": "What's the weather in Paris?"}, # Передаём содержимое ассистента точно в том виде, в каком получили. Если присутствует # блок thinking, он должен сопровождать блок tool_use. {"role": "assistant", "content": response.content}, { "role": "user", "content": [ { "type": "tool_result", "tool_use_id": tool_use_block.id, "content": f"Current temperature: {weather_data['temperature']}°F", } ], }, ], ) print(continuation)Прочитайте финальный ответ
Вы должны увидеть, как Claude завершает ход текстом. Поскольку «interleaved thinking» (чередующиеся размышления) в адаптивном режиме включаются автоматически, продолжение также может начинаться с нового блока размышлений перед финальным текстом:
Output{ "content": [ { "type": "text", "text": "Currently in Paris, the temperature is 88°F (31°C)" } ] }
Как чередующиеся размышления меняют поток
Чередующиеся размышления позволяют Claude думать между вызовами инструментов, рассуждая о каждом результате инструмента, прежде чем действовать на его основе. Концепция и доступность по моделям описаны в разделе Чередующиеся размышления на странице «Размышления»; чередование меняет то, где появляются блоки размышлений, а не то, могут ли вызовы инструментов выстраиваться в цепочку. Следующее сравнение показывает, что меняют чередующиеся размышления в рабочем процессе с двумя инструментами:
Без чередующихся размышлений Claude думает один раз в начале хода ассистента. Последующие ответы после результатов инструментов продолжаются без новых блоков размышлений.
User: "What's the total revenue if we sold 150 units at $50 each,
and how does this compare to our average monthly revenue?"
Response 1: [thinking] "I need to calculate 150 * $50, then check the database..."
[tool_use: calculator] { "expression": "150 * 50" }
↓ tool result: "7500"
Response 2: [tool_use: database_query] { "query": "SELECT AVG(revenue)..." }
↑ no thinking block
↓ tool result: "5200"
Response 3: [text] "The total revenue is $7,500, which is 44% above your
average monthly revenue of $5,200."
↑ no thinking blockПри включённых чередующихся размышлениях Claude может думать после получения каждого результата инструмента, что позволяет ему рассуждать о промежуточных результатах перед продолжением.
User: "What's the total revenue if we sold 150 units at $50 each,
and how does this compare to our average monthly revenue?"
Response 1: [thinking] "I need to calculate 150 * $50 first..."
[tool_use: calculator] { "expression": "150 * 50" }
↓ tool result: "7500"
Response 2: [thinking] "Got $7,500. Now I should query the database to compare..."
[tool_use: database_query] { "query": "SELECT AVG(revenue)..." }
↑ thinking after receiving calculator result
↓ tool result: "5200"
Response 3: [thinking] "$7,500 vs $5,200 average - that's a 44% increase..."
[text] "The total revenue is $7,500, which is 44% above your
average monthly revenue of $5,200."
↑ thinking before final answerСледующие шаги
Обзор: включите размышления, прочитайте вывод размышлений и ознакомьтесь с полными правилами для использования инструментов, кэширования и потоковой передачи.
Управляйте тем, как часто и насколько глубоко думает Claude, с помощью уровней усилий и указаний в подсказках.
Ручные бюджеты размышлений на старых моделях: механика budget_tokens и миграция на адаптивные размышления.
Was this page helpful?