Uso degli strumenti
Aggiungi il function calling alla tua app: definisci gli strumenti, leggi i blocchi tool_use, gestisci tool_choice e chiamate parallele. Anthropic/OpenAI.
Function calling sull'endpoint nativo Anthropic. L'API normalizza tool_choice, così gli SDK più vecchi che emettono {type:any} o {type:tool} continuano a funzionare.
Tutti i modelli, le funzionalità e i prezzi Indice della documentazione per agenti AI:https://oneprovider.dev/docs/llms.txt Forma della richiesta
Dichiara gli strumenti come array. Ogni strumento ha un name, una description e un input_schema in JSON Schema. Il modello emette un blocco di contenuto tool_use ogni volta che decide di chiamarne uno.
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Return current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": { "type": "string" },
"units": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
}
}
],
"messages": [
{ "role": "user", "content": "What's the weather in Berlin in celsius?" }
]
} Risposta con una chiamata a uno strumento
json{
"id": "msg_01...",
"stop_reason": "tool_use",
"content": [
{ "type": "text", "text": "Let me check that for you." },
{
"type": "tool_use",
"id": "toolu_bdrk_01...",
"name": "get_weather",
"input": { "city": "Berlin", "units": "c" }
}
]
} Proseguire il ciclo
Dopo che il tuo codice ha eseguito lo strumento, rimanda il risultato come messaggio user contenente un blocco tool_result. Il modello emette allora un'altra chiamata a uno strumento oppure una risposta finale in testo.
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_bdrk_01...",
"content": "{\"city\":\"Berlin\",\"temp_c\":18,\"sky\":\"clear\"}"
}
]
} tool_choice: come lo normalizziamo
Anthropic accetta quattro forme di tool_choice. L'API di OneProvider le accetta tutte e quattro dal tuo client, ma ne passa due al modello in una forma diversa:
| Il client invia | Il modello riceve | Perché |
|---|---|---|
{"type":"auto"} (oppure assente) | invariato | Decide il modello: il caso normale. |
{"type":"none"} | invariato | Forza una risposta di solo testo. |
{"type":"any"} | {"type":"auto"} + suggerimento di sistema | Non tutti i modelli supportano le chiamate forzate agli strumenti; il suggerimento dice al modello «devi chiamare uno strumento». |
{"type":"tool","name":"X"} | {"type":"auto"} + suggerimento di sistema | Uguale; il suggerimento indica lo strumento per nome. |
tool_choice:any e tool_choice:tool fallirebbero su alcuni modelli. Con auto più un suggerimento di sistema deciso, nei nostri test circa il 95% di queste richieste riesce. Se una chiamata a uno strumento che ti aspettavi viene sostituita da testo, il suggerimento non è riuscito a orientare il modello: rendi più preciso il prompt dell'utente oppure passa a un modello più capace. Chiamate parallele agli strumenti
Una singola risposta può contenere più blocchi tool_use: è il modello a decidere se chiamare più strumenti in parallelo. Eseguili tutti, poi rimanda un solo messaggio user con più blocchi tool_result (uno per ogni tool_use_id). L'ordine non conta.
Nomi degli strumenti
- I nomi distinguono maiuscole e minuscole e passano così come sono: il modello restituisce esattamente ciò che hai registrato.
- Funzionano sia
snake_casesiaPascalCase. La CLI di Claude Code usa PascalCase (Read,Bash,Edit); gli SDK generici di solito usano snake_case. - Tieni i nomi sotto i 64 caratteri e in ASCII
[a-zA-Z0-9_].
Chiamate agli strumenti in stile OpenAI
Sull'endpoint /v1/chat/completions usa la forma standard di OpenAI con tools / tool_calls: la traduciamo in blocchi tool_use di Anthropic dietro le quinte.
Risposte rapide
Quale base URL devo usare?
Claude Code e gli SDK Anthropic usano https://api.oneprovider.dev. Gli SDK OpenAI e i client compatibili con OpenAI usano https://api.oneprovider.dev/v1. Con una sola chiave funzionano entrambi; l'elenco dei modelli è nella pagina dei modelli , le tariffe nella pagina dei prezzi .
Come mi autentico?
Invia la chiave sk-… così com'è in x-api-key oppure in Authorization: Bearer: uno dei due, mai entrambi. Tieni la chiave in una variabile d'ambiente, non in un file che finisce nel commit. Altro sull'autenticazione .
Dove ottengo una chiave?
Apri la tua area personale nel bot Telegram @oneprovider_robot oppure su app.oneprovider.dev, ricarica il saldo e premi «Emetti una chiave». Ogni chiave può avere un proprio limite di spesa. Area personale e chiavi API .
Cosa significano 401, 404 e 429?
401: la chiave manca, è scritta male o è inviata nell'header sbagliato; incolla la chiave intera, senza virgolette né spazi. 404: di solito la base URL è sbagliata, per esempio manca /v1 o è doppio. 429 con “Insufficient balance”: il saldo dell'area personale o il limite di spesa della chiave è esaurito, quindi ricarica invece di riprovare; qualsiasi altro 429 è un limite di frequenza, quindi attendi il tempo indicato in Retry-After. Dettagli: codici di errore e risoluzione dei problemi .
Perché gli stream si interrompono o si resettano?
VPN e proxy VLESS spesso mettono in buffer gli SSE o rompono la negoziazione HTTP/2. OneProvider non ha restrizioni regionali e non mette in buffer gli stream: disattiva il proxy e riprova.
Dove chiedo se non basta?
Scrivi a @Oneproviderhelpbot su Telegram oppure apri «Assistenza» nell'area personale sul sito, indicando il codice di stato HTTP e il testo esatto dell'errore. Come funziona l'assistenza .
Ultimo aggiornamento: 2026-11-08 Hai trovato un errore? @Oneproviderhelpbot