Il tool runner gestisce il ciclo agentico, il wrapping degli errori e la sicurezza dei tipi al posto tuo. Quando hai bisogno di approvazione human-in-the-loop, logging personalizzato o esecuzione condizionale, usa invece il ciclo manuale.
Invece di gestire manualmente le chiamate agli strumenti, i risultati degli strumenti e la gestione della conversazione, il tool runner automaticamente:
Il tool runner è in beta ed è disponibile nell'SDK Python, SDK TypeScript, SDK C#, SDK Go, SDK Java, SDK PHP e SDK Ruby.
Definisci gli strumenti usando gli helper dell'SDK, quindi usa il tool runner per eseguirli.
A seconda della firma dello strumento nell'SDK, uno strumento restituisce il suo risultato come stringa o come blocchi di contenuto (blocchi di testo, immagine o documento), quindi uno strumento può restituire risultati multimodali. Una stringa restituita diventa un singolo blocco di contenuto di testo. Per restituire dati strutturati, come un oggetto JSON o un numero, codificali prima come stringa.
Il tool runner è un iterabile che produce messaggi da Claude. A ogni iterazione, il runner verifica se Claude ha richiesto l'uso di uno strumento. In tal caso, esegue lo strumento e invia automaticamente il risultato a Claude, quindi produce il messaggio successivo da Claude per continuare il tuo ciclo.
Puoi terminare il ciclo a qualsiasi iterazione con un'istruzione break. Il runner continua a ciclare finché Claude non restituisce un messaggio senza uso di strumenti, o finché non raggiunge max_iterations se lo hai impostato.
Se non hai bisogno dei messaggi intermedi, puoi ottenere direttamente il messaggio finale:
All'interno del ciclo, puoi leggere ogni messaggio di risposta e modificare lo stato del runner prima della successiva chiamata API. Ogni iterazione segue questo ciclo di vita:
Per impostazione predefinita, il runner gestisce lo stato della conversazione al posto tuo: dopo ogni turno, aggiunge il messaggio dell'assistente e gli eventuali risultati degli strumenti alla propria cronologia dei messaggi. Prendi il controllo della cronologia dei messaggi quando vuoi riprovare un turno (scartare la risposta e reinviare), iniettare un messaggio di follow-up o costruire tu stesso il risultato dello strumento.
Prendi il controllo modificando i messaggi del runner dall'interno del corpo del ciclo. Il metodo esatto dipende dall'SDK. Vedi le schede per linguaggio che seguono.
Quando prendi il controllo per un'iterazione, il runner non aggiunge il messaggio dell'assistente o i risultati degli strumenti di quel turno. Diventi responsabile di mantenere valida la conversazione: aggiungi tu stesso il messaggio dell'assistente e un risultato dello strumento (se vuoi che il turno conti), modifica lo stato in modo condizionale così che il ciclo possa comunque terminare quando non ci sono chiamate a strumenti, e passa max_iterations per limitare il ciclo. Tutti e sette gli SDK supportano max_iterations.
Per attività agentiche di lunga durata, i tool runner Python, TypeScript e Ruby supportano la compaction (compattazione) automatica, che genera riepiloghi quando l'utilizzo dei token supera una soglia, così la conversazione può continuare oltre i limiti della "context window" (finestra di contesto). Tutti e tre gli SDK hanno deprecato questa opzione lato client a favore del context editing lato server, disponibile in ogni SDK. I tool runner Go, Java, C# e PHP non includono la compaction lato client.
Quando uno strumento lancia un'eccezione, il tool runner la cattura e restituisce l'errore a Claude come risultato dello strumento con is_error: true. Il risultato dello strumento contiene il messaggio dell'eccezione (in Python, il suo tipo e messaggio), non lo stack trace completo.
Ciò che l'SDK registra nei log è specifico per linguaggio. L'SDK Python registra l'eccezione completa, incluso il suo stack trace, attraverso il modulo standard logging ogni volta che uno strumento solleva un'eccezione non gestita. Gli SDK Python, TypeScript e Java leggono la variabile d'ambiente ANTHROPIC_LOG per attivare il logging dell'SDK, che include i dettagli di richiesta e risposta:
# Registra a livello info
export ANTHROPIC_LOG=info
# Registra a livello debug per un output più dettagliato
export ANTHROPIC_LOG=debugGli SDK Go, Ruby, C# e PHP non leggono ANTHROPIC_LOG. Al di fuori di Python, nessun SDK registra uno strumento fallito: per vedere perché uno strumento è fallito, cattura e registra l'eccezione all'interno della funzione dello strumento prima di restituirla o rilanciarla.
Per impostazione predefinita, gli errori degli strumenti vengono passati a Claude, che può quindi rispondere in modo appropriato. Tuttavia, potresti voler rilevare gli errori e gestirli diversamente, ad esempio per interrompere l'esecuzione in anticipo o implementare una gestione degli errori personalizzata.
Negli SDK Python e TypeScript, usa il metodo di risposta dello strumento (generate_tool_call_response() in Python, generateToolResponse() in TypeScript) per intercettare i risultati degli strumenti e verificare la presenza di errori prima che vengano inviati a Claude. Gli altri SDK non espongono questo hook. Le loro schede descrivono l'alternativa più vicina:
Puoi modificare i risultati degli strumenti prima che vengano inviati a Claude. Questo è utile per aggiungere metadati come cache_control per abilitare la cache dei prompt sui risultati degli strumenti, o per trasformare l'output dello strumento.
Negli SDK Python e TypeScript, usa il metodo di risposta dello strumento per ottenere il risultato dello strumento, quindi modificalo prima che il runner proceda. Se devi aggiungere esplicitamente il risultato modificato o mutarlo sul posto dipende dall'SDK. Vedi i commenti nel codice in ogni scheda.
Aggiungere cache_control ai risultati degli strumenti è particolarmente utile quando gli strumenti restituiscono grandi quantità di dati (come risultati di ricerca di documenti) che vuoi memorizzare nella cache per le successive chiamate API. Vedi Cache dei prompt per maggiori dettagli sulle strategie di caching.
Abilita lo streaming per elaborare la risposta di ogni turno in modo incrementale. Ogni iterazione produce un oggetto stream che puoi iterare per ottenere gli eventi.
Applica la conformità a JSON Schema sugli input degli strumenti di Claude con il campionamento vincolato dalla grammatica.
Analizza i blocchi tool_use, formatta le risposte tool_result e gestisci gli errori con is_error.
Abilita e formatta le chiamate parallele agli strumenti, con indicazioni sulla cronologia dei messaggi e risoluzione dei problemi.
Specifica gli schemi degli strumenti, scrivi descrizioni efficaci e controlla quando Claude chiama i tuoi strumenti.
Was this page helpful?