Il ragionamento nei flussi di lavoro con strumenti e multi-turno
Segui passo dopo passo un ciclo completo di uso degli strumenti in due turni che preserva correttamente i blocchi di ragionamento, e osserva come il ragionamento interlacciato modifica il flusso.
Questa pagina illustra passo dopo passo un ciclo completo di "tool use" (uso degli strumenti) in due turni con il ragionamento abilitato: Claude pensa, richiede una chiamata a uno strumento, riceve il risultato e completa la sua risposta, con i blocchi di ragionamento gestiti correttamente in ogni fase. Le regole complete si trovano nella pagina Ragionamento, in Ragionamento con uso degli strumenti e Preservare i blocchi di ragionamento; questa pagina mostra tali regole applicate in codice eseguibile.
Le regole applicate in questa guida
Ogni link porta all'enunciazione completa nella pagina Ragionamento:
- Limita la scelta dello strumento ad
autoononein modalità manuale: le opzioni ditool_choiceche forzano l'uso degli strumenti restituiscono un errore con il ragionamento esteso manuale (thinking: {type: "enabled"}). L'"adaptive thinking" (ragionamento adattivo) supporta l'uso forzato degli strumenti, tranne su Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 e Claude Mythos 5.1, che restituiscono un errore 400. Dove l'uso forzato degli strumenti è accettato, il ragionamento viene saltato: la risposta inizia con la chiamata allo strumento. - Mantieni una sola configurazione di ragionamento per turno dell'assistente: un ciclo di uso degli strumenti è un singolo turno dell'assistente, quindi modifica la configurazione solo tra un turno e l'altro.
- Restituisci i blocchi di ragionamento completi e non modificati: quando restituisci un risultato di uno strumento, i blocchi di ragionamento del messaggio dell'assistente devono tornare insieme ad esso.
- Ripeti il messaggio dell'assistente esattamente come ricevuto: ricostruire il messaggio o filtrare i blocchi
redacted_thinkingprovoca un errore 400.
Gli esempi usano il ragionamento adattivo; sui modelli che supportano solo il ragionamento esteso, sostituisci con thinking: {type: "enabled", budget_tokens: N}. Le regole del ciclo sono identiche.
Segui un ciclo di uso degli strumenti in due turni
L'esempio definisce uno strumento get_weather, lascia che Claude pensi e richieda una chiamata allo strumento, quindi restituisce il risultato dello strumento insieme al turno dell'assistente ripetuto esattamente come ricevuto, blocco di ragionamento incluso.
Effettua la prima richiesta con uno strumento disponibile
Invia una richiesta con il ragionamento adattivo abilitato e lo strumento definito. A parte il parametro
thinking, si tratta di una richiesta standard di uso degli strumenti: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"], }, } # Prima richiesta - Claude risponde con il ragionamento e una richiesta di strumento 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)Cattura l'array content da restituire
Dovresti vedere i blocchi
thinkingetool_usenel contenuto della risposta in un'esecuzione in cui Claude ha scelto di ragionare (con richieste più semplici, la modalità adattiva può saltare il blocco di ragionamento). Una nota che Claude scrive prima della chiamata allo strumento viene restituita come bloccotextoppure, sui modelli che scrivono aggiornamenti di avanzamento, come un ulteriore bloccothinking. Mantieni intatto questo array content: il passaggio successivo lo rimanda indietro alla lettera.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" } } ] }Restituisci il risultato dello strumento, ripetendo il turno dell'assistente alla lettera
Esegui lo strumento dal tuo lato, quindi invia una seconda richiesta che aggiunge due messaggi alla conversazione. Il primo è il contenuto dell'assistente restituito esattamente come ricevuto, in modo che il blocco di ragionamento rimanga invariato accanto al blocco
tool_use. Il secondo è un messaggio utente che contiene iltool_result.Ogni esempio è uno script autonomo: ripete la prima richiesta, quindi invia immediatamente il seguito usando la risposta appena ricevuta.
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?"}], ) # Estrai il blocco tool_use per ottenere il suo ID per il tool_result tool_use_block = next(block for block in response.content if block.type == "tool_use") # Chiama la tua vera API meteo, qui andrebbe la tua chiamata API effettiva # Facciamo finta che questo sia ciò che riceviamo weather_data = {"temperature": 88} # Seconda richiesta - Includi il turno dell'assistente e il 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?"}, # Ripeti il contenuto dell'assistente esattamente come ricevuto. Quando un blocco # thinking è presente, deve accompagnare il blocco 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)Leggi la risposta finale
Dovresti vedere Claude completare il turno con del testo. Poiché il ragionamento interlacciato è automatico in modalità adattiva, la continuazione può anche aprirsi con un nuovo blocco di ragionamento prima del testo finale:
Output{ "content": [ { "type": "text", "text": "Currently in Paris, the temperature is 88°F (31°C)" } ] }
Come il ragionamento interlacciato modifica il flusso
Il "interleaved thinking" (ragionamento interlacciato) consente a Claude di pensare tra una chiamata a uno strumento e l'altra, ragionando su ciascun risultato prima di agire di conseguenza. Il concetto e la disponibilità per modello sono trattati in Ragionamento interlacciato nella pagina Ragionamento; l'interleaving modifica dove compaiono i blocchi di ragionamento, non se le chiamate agli strumenti possano concatenarsi. Il confronto seguente mostra cosa cambia con il ragionamento interlacciato in un flusso di lavoro con due strumenti:
Senza ragionamento interlacciato, Claude pensa una sola volta all'inizio del turno dell'assistente. Le risposte successive dopo i risultati degli strumenti proseguono senza nuovi blocchi di ragionamento.
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 blockCon il ragionamento interlacciato abilitato, Claude può pensare dopo aver ricevuto ciascun risultato di uno strumento, il che gli consente di ragionare sui risultati intermedi prima di proseguire.
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 answerProssimi passi
La panoramica: attiva il ragionamento, leggi l'output del ragionamento e consulta le regole complete per uso degli strumenti, cache e streaming.
Orienta quanto spesso e quanto a fondo Claude pensa con i livelli di effort e le indicazioni basate sui prompt.
Budget di ragionamento manuali sui modelli meno recenti: funzionamento di budget_tokens e migrazione al ragionamento adattivo.
Was this page helpful?