Function Calling (Tool Use)
La chiamata di funzioni, o uso di strumenti, consente a un modello linguistico di richiedere una funzione esterna con argomenti JSON, che l'applicazione esegue e restituisce.
Il richiamo di funzioni, detto anche richiamo di strumenti o uso di strumenti, è la capacità di un modello linguistico di grandi dimensioni (LLM) di rispondere richiedendo l'esecuzione di una funzione esterna anziché restituire semplice testo. L'applicazione descrive ogni strumento disponibile con un nome, uno scopo e uno schema JSON per gli argomenti. Quando una richiesta richiede dati aggiornati o un'azione, il modello risponde con il nome dello strumento e gli argomenti in JSON, l'applicazione esegue la funzione e il modello formula la risposta a partire dal risultato. Il modello non esegue mai nulla direttamente. Il Toolformer di Meta ha dimostrato nel febbraio 2023 che un modello poteva imparare da solo a inserire chiamate API nel proprio testo; il 13 giugno 2023 OpenAI ha aggiunto il richiamo di funzioni alla propria API, con modelli sottoposti a fine-tuning per rilevare quando serve una funzione e formattare argomenti conformi alla sua firma. Oggi tutti i principali fornitori di modelli supportano questa funzionalità e i modelli open source la apprendono tramite il fine-tuning delle istruzioni e i template di chat.
Come funziona il richiamo di funzioni#
Una chiamata a uno strumento è un viaggio di andata e ritorno tra il modello e l'applicazione, ripetuto finché il modello non dispone di ciò che gli serve:
Il codice qui sotto simula entrambe le parti di un viaggio di andata e ritorno nel formato della guida al richiamo di funzioni di OpenAI; la risposta del modello è riportata esplicitamente, così il codice può essere eseguito senza una chiave API:
import json
from jsonschema import validate
# La definizione dello strumento inviata con la richiesta: un nome, uno scopo e uno schema JSON per gli argomenti
tool = {
"type": "function",
"name": "get_order_status",
"description": "Look up the shipping status of an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string", "pattern": "^[0-9]+$"}},
"required": ["order_id"],
},
}
# L'output del modello è una chiamata di funzione i cui argomenti arrivano come stringa JSON
call = {"type": "function_call", "call_id": "call_1", "name": "get_order_status", "arguments": '{"order_id": "4417"}'}
args = json.loads(call["arguments"])
validate(args, tool["parameters"]) # Genera un errore prima che venga eseguito qualsiasi cosa se gli argomenti non rispettano lo schema
# L'applicazione esegue la propria funzione e restituisce il risultato con lo stesso call_id
orders = {"4417": "Shipped, arriving Thursday"}
print({"type": "function_call_output", "call_id": call["call_id"], "output": orders[args["order_id"]]})Stampa {'type': 'function_call_output', 'call_id': 'call_1', 'output': 'Shipped, arriving Thursday'}, l'elemento che l'applicazione aggiunge alla conversazione prima di chiamare di nuovo il modello. Impostando "strict": true su uno strumento, l'API applica la decodifica vincolata, così gli argomenti generati dal modello corrispondono sempre allo schema.
Scelta e concatenazione degli strumenti#
I modelli possono generare più chiamate indipendenti in un unico turno, ad esempio controllando due ordini contemporaneamente, e un'applicazione può imporre uno strumento specifico, richiedere l'uso di uno strumento o vietarli per un turno. Concatenare chiamate tra più turni, facendo sì che ogni risultato determini la chiamata successiva, è il ciclo che trasforma un modello in un agente AI eseguito all'interno di un ambiente per agenti. La Berkeley Function Calling Leaderboard valuta queste capacità: scegliere la funzione corretta, compilare i relativi argomenti, effettuare chiamate parallele e su più turni e astenersi quando nessuno strumento è adatto. Poiché i risultati degli strumenti tornano al modello come input, una pagina web o un documento recuperato da uno strumento può contenere una prompt injection; perciò le applicazioni concedono agli strumenti solo i privilegi strettamente necessari e chiedono conferma a una persona prima di effettuare acquisti, eliminazioni o invii di messaggi.
I modelli di visione sono strumenti naturali perché il loro output è già strutturato. In Ultralytics YOLO, Results.summary() restituisce ogni oggetto individuato da un modello YOLO26 come dizionario contenente il nome della classe, l'indice della classe, la confidenza e le coordinate del riquadro; un elenco che json.dumps trasforma direttamente in un risultato dello strumento, consentendo a un modello conversazionale o a un modello visione-linguaggio (VLM) di contare e localizzare gli oggetti in una foto chiamando la modalità predict.
Chiamata di funzione e termini correlati#
- Agenti che interagiscono con il computer: Usano il software tramite schermate, clic e sequenze di tasti, così possono interagire con applicazioni che non hanno un'API. Una chiamata di funzione raggiunge lo stesso risultato con un'unica richiesta strutturata quando è disponibile un'API.
- Output strutturati: Vincolano la risposta finale di un modello a uno schema, ad esempio per estrarre campi da una fattura. La chiamata di funzione usa gli stessi schemi per richiedere un'azione e si aspetta di riceverne il risultato.
- Generazione aumentata dal recupero (RAG): Aggiunge al prompt i documenti recuperati. Uno strumento di ricerca può implementare RAG e la RAG agentica permette al modello di decidere quando e cosa cercare.
- Protocollo del contesto del modello (MCP): Un protocollo aperto, introdotto da Anthropic nel novembre 2024, che consente alle applicazioni di individuare gli strumenti offerti da programmi esterni. Il modello invoca comunque uno strumento MCP tramite una chiamata di funzione.










