Come implementare l'uso degli strumenti
Scegliere un modello
In generale, utilizza Claude Opus 4, Claude Sonnet 4, Claude Sonnet 3.7, Claude Sonnet 3.5 o Claude Opus 3 per strumenti complessi e query ambigue; gestiscono meglio più strumenti e cercano chiarimenti quando necessario.
Utilizza Claude Haiku 3.5 o Claude Haiku 3 per strumenti semplici, ma nota che potrebbero dedurre parametri mancanti.
Se utilizzi Claude Sonnet 3.7 con l’uso di strumenti e pensiero esteso, consulta la nostra guida qui per maggiori informazioni.
Specificare gli strumenti client
Gli strumenti client (sia definiti da Anthropic che dall’utente) sono specificati nel parametro di primo livello tools
della richiesta API. Ogni definizione di strumento include:
Parametro | Descrizione |
---|---|
name | Il nome dello strumento. Deve corrispondere alla regex ^[a-zA-Z0-9_-]{1,64}$ . |
description | Una descrizione dettagliata in testo semplice di ciò che fa lo strumento, quando dovrebbe essere utilizzato e come si comporta. |
input_schema | Un oggetto JSON Schema che definisce i parametri previsti per lo strumento. |
Prompt di sistema per l’uso degli strumenti
Quando chiami l’API Anthropic con il parametro tools
, costruiamo un prompt di sistema speciale dalle definizioni degli strumenti, dalla configurazione degli strumenti e da qualsiasi prompt di sistema specificato dall’utente. Il prompt costruito è progettato per istruire il modello a utilizzare lo/gli strumento/i specificato/i e fornire il contesto necessario affinché lo strumento funzioni correttamente:
Best practice per le definizioni degli strumenti
Per ottenere le migliori prestazioni da Claude quando si utilizzano gli strumenti, segui queste linee guida:
- Fornisci descrizioni estremamente dettagliate. Questo è di gran lunga il fattore più importante per le prestazioni degli strumenti. Le tue descrizioni dovrebbero spiegare ogni dettaglio sullo strumento, inclusi:
- Cosa fa lo strumento
- Quando dovrebbe essere utilizzato (e quando non dovrebbe)
- Cosa significa ogni parametro e come influisce sul comportamento dello strumento
- Eventuali avvertenze o limitazioni importanti, come quali informazioni lo strumento non restituisce se il nome dello strumento non è chiaro. Più contesto puoi dare a Claude sui tuoi strumenti, meglio sarà nel decidere quando e come utilizzarli. Punta ad almeno 3-4 frasi per descrizione dello strumento, di più se lo strumento è complesso.
- Dai priorità alle descrizioni rispetto agli esempi. Mentre puoi includere esempi di come utilizzare uno strumento nella sua descrizione o nel prompt di accompagnamento, questo è meno importante che avere una spiegazione chiara e completa dello scopo e dei parametri dello strumento. Aggiungi esempi solo dopo aver sviluppato completamente la descrizione.
La buona descrizione spiega chiaramente cosa fa lo strumento, quando utilizzarlo, quali dati restituisce e cosa significa il parametro ticker
. La descrizione scadente è troppo breve e lascia a Claude molte domande aperte sul comportamento e l’utilizzo dello strumento.
Controllare l’output di Claude
Forzare l’uso degli strumenti
In alcuni casi, potresti voler che Claude utilizzi uno strumento specifico per rispondere alla domanda dell’utente, anche se Claude pensa di poter fornire una risposta senza utilizzare uno strumento. Puoi farlo specificando lo strumento nel campo tool_choice
in questo modo:
Quando si lavora con il parametro tool_choice, abbiamo quattro possibili opzioni:
auto
consente a Claude di decidere se chiamare o meno qualsiasi strumento fornito. Questo è il valore predefinito quando vengono forniti glitools
.any
dice a Claude che deve utilizzare uno degli strumenti forniti, ma non forza uno strumento particolare.tool
ci permette di forzare Claude a utilizzare sempre uno strumento particolare.none
impedisce a Claude di utilizzare qualsiasi strumento. Questo è il valore predefinito quando non vengono fornititools
.
Questo diagramma illustra come funziona ciascuna opzione:
Nota che quando hai tool_choice
come any
o tool
, precompileremo il messaggio dell’assistente per forzare l’utilizzo di uno strumento. Ciò significa che i modelli non emetteranno un blocco di contenuto text
con catena di pensiero prima dei blocchi di contenuto tool_use
, anche se esplicitamente richiesto di farlo.
I nostri test hanno dimostrato che questo non dovrebbe ridurre le prestazioni. Se desideri mantenere la catena di pensiero (in particolare con Opus) pur richiedendo che il modello utilizzi uno strumento specifico, puoi usare {"type": "auto"}
per tool_choice
(il valore predefinito) e aggiungere istruzioni esplicite in un messaggio user
. Ad esempio: What's the weather like in London? Use the get_weather tool in your response.
Output JSON
Gli strumenti non devono necessariamente essere funzioni client — puoi utilizzare gli strumenti ogni volta che desideri che il modello restituisca un output JSON che segue uno schema fornito. Ad esempio, potresti utilizzare uno strumento record_summary
con uno schema particolare. Vedi esempi di utilizzo degli strumenti per un esempio completo funzionante.
Catena di pensiero
Quando utilizza gli strumenti, Claude spesso mostrerà la sua “catena di pensiero”, cioè il ragionamento passo-passo che utilizza per scomporre il problema e decidere quali strumenti utilizzare. Il modello Claude Opus 3 lo farà se tool_choice
è impostato su auto
(questo è il valore predefinito, vedi Forzare l’uso degli strumenti), e Sonnet e Haiku possono essere indotti a farlo.
Ad esempio, dato il prompt “What’s the weather like in San Francisco right now, and what time is it there?”, Claude potrebbe rispondere con:
Questa catena di pensiero fornisce informazioni sul processo di ragionamento di Claude e può aiutarti a risolvere comportamenti inaspettati.
Con il modello Claude Sonnet 3, la catena di pensiero è meno comune per impostazione predefinita, ma puoi indurre Claude a mostrare il suo ragionamento aggiungendo qualcosa come "Before answering, explain your reasoning step-by-step in tags."
al messaggio dell’utente o al prompt di sistema.
È importante notare che mentre i tag <thinking>
sono una convenzione comune che Claude utilizza per indicare la sua catena di pensiero, il formato esatto (come il nome di questo tag XML) potrebbe cambiare nel tempo. Il tuo codice dovrebbe trattare la catena di pensiero come qualsiasi altro testo generato dall’assistente e non fare affidamento sulla presenza o sulla formattazione specifica dei tag <thinking>
.
Uso parallelo degli strumenti
Per impostazione predefinita, Claude può utilizzare più strumenti per rispondere a una query dell’utente. Puoi disabilitare questo comportamento:
- Impostando
disable_parallel_tool_use=true
quando il tipo di tool_choice èauto
, il che garantisce che Claude utilizzi al massimo uno strumento - Impostando
disable_parallel_tool_use=true
quando il tipo di tool_choice èany
otool
, il che garantisce che Claude utilizzi esattamente uno strumento
Uso parallelo degli strumenti con Claude Sonnet 3.7
Claude Sonnet 3.7 potrebbe essere meno propenso a effettuare chiamate parallele agli strumenti in una risposta, anche quando non hai impostato disable_parallel_tool_use
. Per aggirare questo problema, consigliamo di abilitare l’uso degli strumenti con efficienza di token, che aiuta a incoraggiare Claude a utilizzare strumenti paralleli. Questa funzionalità beta riduce anche la latenza e risparmia in media il 14% dei token di output.
Se preferisci non optare per la beta dell’uso degli strumenti con efficienza di token, puoi anche introdurre uno “strumento batch” che può fungere da meta-strumento per avvolgere invocazioni ad altri strumenti simultaneamente. Abbiamo riscontrato che se questo strumento è presente, il modello lo utilizzerà per chiamare simultaneamente più strumenti in parallelo per te.
Vedi questo esempio nel nostro cookbook per come utilizzare questa soluzione alternativa.
Gestione dei blocchi di contenuto tool_use e tool_result
La risposta di Claude differisce a seconda che utilizzi uno strumento client o server.
Gestione dei risultati dagli strumenti client
La risposta avrà un stop_reason
di tool_use
e uno o più blocchi di contenuto tool_use
che includono:
id
: Un identificatore univoco per questo particolare blocco di utilizzo dello strumento. Questo verrà utilizzato per abbinare i risultati dello strumento in seguito.name
: Il nome dello strumento utilizzato.input
: Un oggetto contenente l’input passato allo strumento, conforme all’input_schema
dello strumento.
Quando ricevi una risposta di utilizzo dello strumento per uno strumento client, dovresti:
- Estrarre il
name
, l’id
e l’input
dal bloccotool_use
. - Eseguire lo strumento effettivo nel tuo codebase corrispondente a quel nome di strumento, passando l’
input
dello strumento. - Continuare la conversazione inviando un nuovo messaggio con il
role
diuser
, e un bloccocontent
contenente il tipotool_result
e le seguenti informazioni:tool_use_id
: L’id
della richiesta di utilizzo dello strumento per cui questo è un risultato.content
: Il risultato dello strumento, come stringa (ad es."content": "15 degrees"
) o elenco di blocchi di contenuto annidati (ad es."content": [{"type": "text", "text": "15 degrees"}]
). Questi blocchi di contenuto possono utilizzare i tipitext
oimage
.is_error
(opzionale): Impostato sutrue
se l’esecuzione dello strumento ha generato un errore.
Dopo aver ricevuto il risultato dello strumento, Claude utilizzerà queste informazioni per continuare a generare una risposta al prompt originale dell’utente.
Gestione dei risultati dagli strumenti server
Claude esegue lo strumento internamente e incorpora i risultati direttamente nella sua risposta senza richiedere ulteriore interazione dell’utente.
Differenze rispetto ad altre API
A differenza delle API che separano l’uso degli strumenti o utilizzano ruoli speciali come tool
o function
, l’API di Anthropic integra gli strumenti direttamente nella struttura dei messaggi user
e assistant
.
I messaggi contengono array di blocchi text
, image
, tool_use
e tool_result
. I messaggi user
includono contenuti client e tool_result
, mentre i messaggi assistant
contengono contenuti generati dall’IA e tool_use
.
Gestione del motivo di arresto pause_turn
Quando si utilizzano strumenti server come la ricerca web, l’API potrebbe restituire un motivo di arresto pause_turn
, indicando che l’API ha messo in pausa un turno di lunga durata.
Ecco come gestire il motivo di arresto pause_turn
:
Quando si gestisce pause_turn
:
- Continua la conversazione: Passa la risposta in pausa così com’è in una richiesta successiva per permettere a Claude di continuare il suo turno
- Modifica se necessario: Puoi opzionalmente modificare il contenuto prima di continuare se vuoi interrompere o reindirizzare la conversazione
- Preserva lo stato dello strumento: Includi gli stessi strumenti nella richiesta di continuazione per mantenere la funzionalità
Risoluzione dei problemi
Ci sono diversi tipi di errori che possono verificarsi quando si utilizzano gli strumenti con Claude: