Usa il modello Claude Opus più recente, Claude Opus 5, per strumenti complessi e query ambigue; gestisce meglio più strumenti e chiede chiarimenti quando necessario.
Usa i modelli Claude Haiku per strumenti semplici, ma tieni presente che potrebbero dedurre parametri mancanti.
Gli strumenti client (sia con schema Anthropic che definiti dall'utente) vengono 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 cosa fa lo strumento, quando dovrebbe essere usato e come si comporta. |
input_schema | Un oggetto JSON Schema che definisce i parametri attesi per lo strumento. |
input_examples | (Opzionale) Un array di oggetti di input di esempio per aiutare Claude a capire come usare lo strumento. Consulta Fornire esempi di uso degli strumenti. |
Per l'insieme completo delle proprietà opzionali disponibili su qualsiasi definizione di strumento, inclusi cache_control, strict, defer_loading e allowed_callers, consulta il Riferimento degli strumenti.
Quando chiami l'API di Claude con il parametro tools, l'API costruisce uno speciale prompt di sistema a partire 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 usare lo/gli strumento/i specificato/i e fornire il contesto necessario affinché lo strumento funzioni correttamente:
In this environment you have access to a set of tools you can use to answer the user's question.
{{ FORMATTING INSTRUCTIONS }}
String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.
Here are the functions available in JSONSchema format:
{{ TOOL DEFINITIONS IN JSON SCHEMA }}
{{ USER SYSTEM PROMPT }}
{{ TOOL CONFIGURATION }}Per ottenere le migliori prestazioni da Claude quando usi gli strumenti, segui queste linee guida:
input_examples per strumenti complessi. Le descrizioni chiare sono la cosa più importante, ma per strumenti con input complessi, oggetti annidati o parametri sensibili al formato, puoi usare il campo input_examples per fornire esempi validati dallo schema. Consulta Fornire esempi di uso degli strumenti per i dettagli.create_pr, review_pr, merge_pr), raggruppale in un unico strumento con un parametro action. Strumenti meno numerosi e più capaci riducono l'ambiguità nella selezione e rendono la tua superficie di strumenti più facile da navigare per Claude.github_list_prs, slack_send_message). Questo rende la selezione degli strumenti non ambigua man mano che la tua libreria cresce, ed è particolarmente importante quando si usa la ricerca degli strumenti.La buona descrizione spiega chiaramente cosa fa lo strumento, quando usarlo, quali dati restituisce e cosa significa il parametro ticker. La descrizione scadente è troppo breve e lascia Claude con molte domande aperte sul comportamento e sull'uso dello strumento.
Puoi fornire esempi concreti di input validi per gli strumenti per aiutare Claude a capire come usare i tuoi strumenti in modo più efficace. Questo è particolarmente utile per strumenti complessi con oggetti annidati, parametri opzionali o input sensibili al formato.
Aggiungi un campo opzionale input_examples alla definizione del tuo strumento con un array di oggetti di input di esempio. Ogni esempio deve essere valido secondo l'input_schema dello strumento:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
tools=[
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature",
},
},
"required": ["location"],
},
"input_examples": [
{"location": "San Francisco, CA", "unit": "fahrenheit"},
{"location": "Tokyo, Japan", "unit": "celsius"},
{
"location": "New York, NY" # 'unit' is optional
},
],
}
],
messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
)
print(response)Gli esempi vengono inclusi nel prompt insieme allo schema del tuo strumento, mostrando a Claude modelli concreti di chiamate agli strumenti ben formate. Questo aiuta Claude a capire quando includere parametri opzionali, quali formati usare e come strutturare input complessi.
input_schema dello strumento. Esempi non validi restituiscono un errore 400In alcuni casi, potresti volere che Claude usi uno strumento specifico per rispondere alla domanda dell'utente, anche se Claude altrimenti risponderebbe direttamente senza chiamare uno strumento. Puoi farlo specificando lo strumento nel campo tool_choice della richiesta. Le righe evidenziate sono l'unica differenza rispetto a una richiesta standard di uso degli strumenti:
client = anthropic.Anthropic()
tools = [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"],
},
}
]
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
tools=tools,
tool_choice={"type": "tool", "name": "get_weather"},
messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
)
print(response)Quando lavori con il parametro tool_choice, ci sono quattro opzioni possibili:
auto consente a Claude di decidere se chiamare o meno uno degli strumenti forniti. Questo è il valore predefinito quando vengono forniti tools.any indica a Claude che deve usare uno degli strumenti forniti, ma non forza uno strumento particolare.tool forza Claude a usare sempre uno strumento particolare.none impedisce a Claude di usare qualsiasi strumento. Questo è il valore predefinito quando non vengono forniti tools.Questo diagramma illustra come funziona ciascuna opzione:

Nota che quando imposti tool_choice su any o tool, l'API precompila il messaggio dell'assistente per forzare l'uso di uno strumento. Questo significa che i modelli non emetteranno una risposta in linguaggio naturale o una spiegazione prima dei blocchi di contenuto tool_use, anche se esplicitamente richiesto.
I test hanno dimostrato che questo non dovrebbe ridurre le prestazioni. Se desideri che il modello fornisca contesto o spiegazioni in linguaggio naturale pur richiedendo comunque che il modello usi 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.
Quando usa gli strumenti, Claude spesso commenta ciò che sta facendo o risponde in modo naturale all'utente prima di chiamare gli strumenti.
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:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll help you check the current weather and time in San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": { "location": "San Francisco, CA" }
}
]
}Questo stile di risposta naturale aiuta gli utenti a capire cosa sta facendo Claude e crea un'interazione più conversazionale. Puoi guidare lo stile e il contenuto di queste risposte tramite i tuoi prompt di sistema e fornendo <examples> nei tuoi prompt.
È importante notare che Claude può usare varie formulazioni e approcci quando spiega le sue azioni. Il tuo codice dovrebbe trattare queste risposte come qualsiasi altro testo generato dall'assistente e non fare affidamento su convenzioni di formattazione specifiche.
Analizza i blocchi tool_use e formatta le risposte tool_result.
Lascia che l'SDK gestisca automaticamente il ciclo agentico.
Elenco degli strumenti forniti da Anthropic e delle proprietà opzionali.
Was this page helpful?