Pensamento em fluxos de trabalho com ferramentas e múltiplos turnos
Percorra um ciclo completo de uso de ferramentas em dois turnos que preserva corretamente os blocos de pensamento e veja como o pensamento intercalado altera o fluxo.
Esta página percorre um ciclo completo de "tool use" (uso de ferramentas) em dois turnos com o pensamento ativado: Claude pensa, solicita uma chamada de ferramenta, recebe o resultado e conclui sua resposta, com os blocos de pensamento tratados corretamente em cada etapa. As regras completas estão na página Pensamento, em Pensamento com uso de ferramentas e Preservando blocos de pensamento; esta página mostra essas regras aplicadas em código executável.
As regras que este passo a passo aplica
Cada link leva à declaração completa na página Pensamento:
- Limite a escolha de ferramenta a
autoounoneno modo manual: opções detool_choiceque forçam o uso de ferramentas retornam um erro com o "extended thinking" (pensamento estendido) manual (thinking: {type: "enabled"}). O pensamento adaptativo oferece suporte ao uso forçado de ferramentas, exceto no Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 e Claude Mythos 5.1, que retornam um erro 400. Onde o uso forçado de ferramentas é aceito, ele pula o pensamento: a resposta começa com a chamada de ferramenta. - Mantenha uma única configuração de pensamento por turno do assistente: um loop de uso de ferramentas é um único turno do assistente, portanto altere a configuração apenas entre turnos.
- Devolva os blocos de pensamento completos e sem modificações: quando você retorna um resultado de ferramenta, os blocos de pensamento da mensagem do assistente devem voltar junto com ele.
- Ecoe a mensagem do assistente exatamente como recebida: reconstruir a mensagem ou filtrar os blocos
redacted_thinkingdispara um erro 400.
Os exemplos usam pensamento adaptativo; em modelos que suportam apenas pensamento estendido, substitua por thinking: {type: "enabled", budget_tokens: N}. As regras do ciclo são idênticas.
Percorra um ciclo de uso de ferramentas em dois turnos
O exemplo define uma ferramenta get_weather, permite que Claude pense e solicite uma chamada de ferramenta e, em seguida, retorna o resultado da ferramenta junto com o turno do assistente ecoado exatamente como recebido, incluindo o bloco de pensamento.
Faça a primeira requisição com uma ferramenta disponível
Envie uma requisição com o pensamento adaptativo ativado e a ferramenta definida. Além do parâmetro
thinking, esta é uma requisição padrão de uso de ferramentas: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"], }, } # Primeira requisição - Claude responde com pensamento e solicitação de ferramenta 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)Capture o array de conteúdo para ecoar de volta
Você deverá ver blocos
thinkingetool_useno conteúdo da resposta em uma execução na qual Claude optou por pensar (em requisições mais simples, o modo adaptativo pode pular o bloco de pensamento). Uma nota que Claude escreve antes da chamada de ferramenta volta como um blocotextou, em modelos que escrevem atualizações de progresso, como outro blocothinking. Mantenha este array de conteúdo intacto: a próxima etapa o envia de volta literalmente.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" } } ] }Retorne o resultado da ferramenta, ecoando o turno do assistente literalmente
Execute a ferramenta do seu lado e, em seguida, envie uma segunda requisição que acrescenta duas mensagens à conversa. A primeira é o conteúdo do assistente ecoado de volta exatamente como recebido, de modo que o bloco de pensamento permaneça inalterado ao lado do bloco
tool_use. A segunda é uma mensagem do usuário contendo otool_result.Cada exemplo é um script autocontido: ele repete a primeira requisição e, em seguida, envia imediatamente a continuação usando a resposta que acabou de receber.
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?"}], ) # Extrai o bloco tool_use para obter seu ID para o tool_result tool_use_block = next(block for block in response.content if block.type == "tool_use") # Chame sua API de clima real; aqui é onde sua chamada de API real ficaria # Vamos fingir que isto é o que recebemos de volta weather_data = {"temperature": 88} # Segunda requisição - Inclua o turno do assistente e o 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?"}, # Repita o conteúdo do assistente exatamente como recebido. Quando um bloco # de pensamento estiver presente, ele deve acompanhar o bloco 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)Leia a resposta final
Você deverá ver Claude concluir o turno com texto. Como o "interleaved thinking" (pensamento intercalado) é automático no modo adaptativo, a continuação também pode começar com um novo bloco de pensamento antes do texto final:
Output{ "content": [ { "type": "text", "text": "Currently in Paris, the temperature is 88°F (31°C)" } ] }
Como o pensamento intercalado altera o fluxo
O pensamento intercalado permite que Claude pense entre chamadas de ferramentas, raciocinando sobre cada resultado de ferramenta antes de agir com base nele. O conceito e a disponibilidade por modelo são abordados em Pensamento intercalado na página Pensamento; a intercalação altera onde os blocos de pensamento aparecem, não se as chamadas de ferramentas podem ser encadeadas. A comparação a seguir mostra o que o pensamento intercalado altera em um fluxo de trabalho com duas ferramentas:
Sem o pensamento intercalado, Claude pensa uma vez no início do turno do assistente. As respostas subsequentes após os resultados das ferramentas continuam sem novos blocos de pensamento.
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 blockCom o pensamento intercalado ativado, Claude pode pensar após receber cada resultado de ferramenta, permitindo que raciocine sobre resultados intermediários antes de continuar.
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 answerPróximos passos
A visão geral: ative o pensamento, leia a saída do pensamento e revise as regras completas para uso de ferramentas, cache e streaming.
Direcione com que frequência e com que profundidade Claude pensa usando níveis de esforço e orientação baseada em prompt.
Orçamentos manuais de pensamento em modelos mais antigos: mecânica do budget_tokens e migração para o adaptativo.
Was this page helpful?