Мышление в рабочих процессах с инструментами и несколькими ходами
Пройдите полный двухходовой цикл использования инструментов, который корректно сохраняет блоки мышления, и посмотрите, как чередующееся мышление меняет поток.
На этой странице разбирается полный двухходовой цикл «tool use» (использование инструментов) с включённым мышлением: Claude думает, запрашивает вызов инструмента, получает результат и завершает свой ответ, при этом блоки мышления корректно обрабатываются на каждом шаге. Полные правила находятся на странице Мышление, в разделах Мышление с использованием инструментов и Сохранение блоков мышления; эта страница показывает применение этих правил в исполняемом коде.
Правила, применяемые в этом разборе
Каждая ссылка ведёт к полной формулировке на странице «Мышление»:
- Ограничьте выбор инструмента значениями
autoилиnoneв ручном режиме: вариантыtool_choice, принудительно требующие использования инструментов, возвращают ошибку при ручном «extended thinking» (расширенное мышление) (thinking: {type: "enabled"}); адаптивное мышление поддерживает принудительное использование инструментов. - Сохраняйте одну конфигурацию мышления на один ход ассистента: цикл использования инструментов — это один ход ассистента, поэтому меняйте конфигурацию только между ходами.
- Передавайте блоки мышления обратно полностью и без изменений: когда вы возвращаете результат инструмента, блоки мышления из сообщения ассистента должны вернуться вместе с ним.
- Повторяйте сообщение ассистента точно в том виде, в каком оно получено: пересборка сообщения или отфильтровывание блоков
redacted_thinkingвызывает ошибку 400.
В примерах используется адаптивное мышление; на моделях, поддерживающих только расширенное мышление, подставьте thinking: {type: "enabled", budget_tokens: N}. Правила цикла идентичны.
Разбор двухходового цикла использования инструментов
В примере определяется инструмент get_weather, Claude получает возможность подумать и запросить вызов инструмента, а затем возвращается результат инструмента вместе с ходом ассистента, повторённым точно в том виде, в каком он был получен, включая блок мышления.
Выполните первый запрос с доступным инструментом
Отправьте запрос с включённым адаптивным мышлением и определённым инструментом. За исключением параметра
thinking, это стандартный запрос на использование инструментов:client = 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-4-8", max_tokens=16000, thinking={"type": "adaptive"}, tools=[weather_tool], messages=[{"role": "user", "content": "What's the weather in Paris?"}], ) print(response)Сохраните массив content для обратной отправки
Вы должны увидеть блоки
thinking,textиtool_useв содержимом ответа при запуске, в котором Claude решил подумать (на более простых запросах адаптивный режим может пропустить блок мышления). Сохраните этот массив 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": "text", "text": "I can help you get the current weather information for Paris. Let me check that for you" }, { "type": "tool_use", "id": "toolu_01CswdEQBMshySk6Y9DFKrfq", "name": "get_weather", "input": { "location": "Paris" } } ] }Верните результат инструмента, дословно повторив ход ассистента
Выполните инструмент на своей стороне, затем отправьте второй запрос, который добавляет к разговору два сообщения. Первое — это содержимое ассистента, повторённое точно в том виде, в каком оно получено, так что блок мышления остаётся неизменным рядом с блоком
tool_use. Второе — пользовательское сообщение, содержащееtool_result.Каждый пример — это самодостаточный скрипт: он повторяет первый запрос, а затем сразу отправляет последующий, используя только что полученный ответ.
client = 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-4-8", 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-4-8", 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?