Kimi K3 is now live on CometAPI โ†’

Function Calling nell'API di OpenAI: che cosa fa realmente e come usarlo correttamente

CometAPI
Zoom JohnApr 20, 2026
Function Calling nell'API di OpenAI: che cosa fa realmente e come usarlo correttamente

Passi il messaggio di un utente all'API GPT e, invece di una risposta in linguaggio naturale, il modello ti restituisce un oggetto JSON strutturato che ti dice esattamente quale funzione chiamare e con quali argomenti. Questa รจ la chiamata di funzioni โ€” e cambia il tipo di applicazioni che puoi costruire con gli LLM.

Chiamata di funzioni

La maggior parte degli sviluppatori sente โ€œfunction callingโ€ e presume che il modello stia eseguendo codice per loro. Non รจ cosรฌ.

Quando usi la chiamata di funzioni, lโ€™LLM non esegue la funzione. Invece, identifica la funzione appropriata, raccoglie tutti i parametri necessari e fornisce le informazioni in un formato JSON strutturato.

La tua applicazione รจ ancora responsabile dellโ€™esecuzione della logica effettiva. Il modello ti sta solo dicendo cosa eseguire e con quali input.

Questa distinzione conta piรน di quanto sembri, e plasma tutto: da come progetti lโ€™integrazione a come pensi alla sicurezza.

Cosa รˆ Davvero la Chiamata di Funzioni โ€” e Cosa la Gente Continua a Sbagliare

La chiamata di funzioni (nota anche come chiamata di strumenti) offre un modo potente e flessibile per i modelli OpenAI di interfacciarsi con sistemi esterni e accedere a dati al di fuori del loro addestramento.

Il nome รจ la prima fonte di confusione. Le persone pensano che il modello stia eseguendo qualcosa. Non รจ cosรฌ.

Ci sono molti nomi e spiegazioni per la chiamata di funzioni, ma tutto si riduce a unโ€™unica affermazione: โ€œla chiamata di funzioni รจ un tipo di capacitร  di output strutturato di un grande modello linguistico.โ€ Gli LLM non chiamano funzioni da soli; suggeriscono quale funzione dovresti chiamare da un insieme predefinito di funzioni che fornisci allโ€™LLM in un prompt.

La seconda confusione riguarda la vecchia superficie dellโ€™API.

I parametri functions e function_call sono stati deprecati con il rilascio della versione 2023-12-01-preview dellโ€™API. Il sostituto di functions รจ il parametro tools.

Se stai seguendo un tutorial che usa il vecchio parametro functions, stai giร  lavorando con una sintassi deprecata. Usa invece tools e tool_choice.

Una funzione รจ un tipo specifico di strumento, definito da uno schema JSON. Una definizione di funzione consente al modello di passare dati alla tua applicazione, dove il tuo codice puรฒ accedere ai dati o intraprendere azioni suggerite dal modello.

Quello schema รจ ciรฒ che conferisce alla chiamata di funzioni il suo vantaggio in termini di affidabilitร  rispetto al semplice prompting: non stai sperando che il modello formatti correttamente lโ€™output, stai imponendo la struttura a livello di API.

Come Funziona la Chiamata di Funzioni nellโ€™API OpenAI โ€” Passo dopo Passo

La chiamata di strumenti รจ una conversazione a piรน passaggi tra la tua applicazione e un modello tramite lโ€™API OpenAI. Il flusso di chiamata degli strumenti ha cinque passaggi di alto livello: inviare una richiesta al modello con gli strumenti che potrebbe chiamare...

Ecco come appaiono in pratica ciascuno di questi passaggi.

Passaggio 1: Definisci gli schemi delle tue funzioni. Descrivi ogni funzione disponibile come un oggetto JSON allโ€™interno del parametro tools. Lo schema include il nome della funzione, una descrizione in linguaggio naturale che il modello usa per decidere quando invocarla e un blocco parameters che segue le convenzioni di JSON Schema.

Piรน dettagliata รจ la tua description โ€” in termini di situazioni in cui puรฒ e dovrebbe chiamare la funzione โ€” meglio รจ. Nota, tuttavia, che le descrizioni delle funzioni fanno parte del prompt e quindi consumano token a tutti gli effetti.

Passaggio 2: Invia la richiesta. Chiami la Chat Completions API con il messaggio dellโ€™utente e la tua lista di tools. Il modello vede entrambi.

Passaggio 3: Il modello decide se chiamare una funzione.

Una chiamata di funzione si riferisce a un tipo speciale di risposta che puoi ottenere dal modello se, esaminando un prompt, determina che, per seguire le istruzioni, deve chiamare uno degli strumenti a sua disposizione. Se il modello riceve un prompt come โ€œcomโ€™รจ il meteo a Parigi?โ€, potrebbe rispondere con una chiamata allo strumento get_weather, con Parigi come argomento della localitร .

Passaggio 4: Il tuo codice esegue la funzione. Analizzi la risposta del modello, estrai il nome della funzione e gli argomenti ed esegui il codice effettivo nel tuo runtime. Lโ€™API ha restituito JSON strutturato โ€” decidi tu cosa farne.

Passaggio 5: Invia il risultato indietro.

Invii quindi tutte le definizioni degli strumenti, il prompt originale, la chiamata allo strumento del modello e lโ€™output della chiamata allo strumento di nuovo al modello per ricevere finalmente una risposta testuale

โ€” qualcosa come โ€œIl meteo a Parigi oggi รจ 25ยฐC.โ€

Diagramma di flusso della chiamata di funzioni

Un dettaglio che la maggior parte dei tutorial salta:

quando imposti strict: true nella definizione della tua funzione, Structured Outputs garantisce che gli argomenti generati dal modello per una chiamata di funzione corrispondano esattamente al JSON Schema che hai fornito.

Impostare strict su true garantirร  che le chiamate di funzione aderiscano in modo affidabile allo schema della funzione, invece di essere โ€œbest effortโ€. OpenAI consiglia di attivare sempre la modalitร  strict.

Sempre. Non cโ€™รจ un buon motivo per non farlo.

Cโ€™รจ anche la chiamata di funzioni in parallelo di cui essere a conoscenza.

A seconda della richiesta dellโ€™utente, il modello invocherร  chiamate di funzione in parallelo se si utilizzano gli ultimi modelli rilasciati il 6 novembre 2023 o dopo.

Questo significa che una singola richiesta come โ€œcomโ€™รจ il meteo a Londra e Tokyo?โ€ puรฒ attivare due chiamate agli strumenti simultanee invece di concatenarle in sequenza.

Casi dโ€™Uso Reali della Chiamata di Funzioni

Lโ€™esempio del meteo รจ ovunque perchรฉ รจ pulito. I casi dโ€™uso reali in produzione sono piรน disordinati e interessanti.

Pipeline di supporto clienti con dati live

La chiamata di funzioni รจ utile per un gran numero di casi dโ€™uso โ€” per esempio, un assistente AI che deve recuperare i dati cliente piรน recenti da un sistema interno quando un utente chiede โ€œquali sono i miei ordini recenti?โ€ prima di poter generare una risposta.

Il modello capisce lโ€™intento, estrae lโ€™ID cliente dal contesto e chiama lโ€™API interna del tuo CRM. Niente regex fragili. Niente prompt template talmente delicati da rompersi per una virgola mancante.

Estrazione di dati strutturati su larga scala

Una pipeline di estrazione dati che recupera testo grezzo, lo converte in dati strutturati e lo salva in un database รจ un altro ottimo esempio. Ottieni schemi coerenti su migliaia di documenti senza mettere a punto manualmente la logica di parsing per ogni tipo di documento.

Dal linguaggio naturale alle API

Soluzioni basate su LLM per estrarre e taggare dati, applicazioni che possono aiutare a convertire il linguaggio naturale in chiamate API o query di database valide, e motori di recupero di conoscenza conversazionali che interagiscono con una knowledge base โ€” tutti beneficiano della garanzia di formattazione dellโ€™output della chiamata di funzioni. Quando hai bisogno che lโ€™output alimenti sistemi a valle, non puoi tollerare variabilitร .

Workflow agentici con piรน strumenti

Per gli sviluppatori, la chiamata di funzioni abilita lโ€™accesso ai dati in tempo reale per superare i cutoff di addestramento recuperando prezzi azionari live, meteo o voci recenti di database. Abilita anche lโ€™esecuzione di azioni โ€” trasformando lโ€™LLM da osservatore passivo a partecipante attivo che modifica lo stato, come inviare email, aggiornare CRM o distribuire codice.

La distinzione chiave rispetto a un semplice chatbot: il modello non sta solo generando testo, sta orchestrando operazioni reali nei tuoi sistemi.

Best Practice per la Chiamata di Funzioni โ€” Cosa gli Sviluppatori Sbagliano di Solito

Questa รจ la sezione che la maggior parte dei tutorial salta del tutto, motivo per cui i team finiscono a fare debug di strani errori in produzione alle 2 di notte.

Scrivere descrizioni troppo vaghe. Il modello usa la descrizione della tua funzione per decidere quando chiamarla. Se la tua descrizione รจ generica โ€” qualcosa come โ€œelabora le richieste dellโ€™utenteโ€ โ€” il modello non ha un segnale affidabile su quando attivarla. Sii specifico sulla condizione di trigger e sulla forma dellโ€™input attesa. Pensa alla descrizione come a un contratto, non a unโ€™etichetta.

Esporre troppe funzioni in una volta sola

Le descrizioni delle funzioni possono consumare un numero significativo di token nel prompt di input.

Caricare definizioni per oltre 50 strumenti nel system prompt crea due problemi: costo e latenza, poichรฉ le definizioni degli strumenti consumano token in input; e degrado dellโ€™accuratezza, poichรฉ allโ€™aumentare del numero di strumenti disponibili diminuisce la capacitร  del modello di selezionare quello corretto.

Inizia con il set piรน piccolo di funzioni di cui il tuo caso dโ€™uso ha effettivamente bisogno.

Supporre che il modello non allucini parametri. Lo farร .

Il modello puรฒ allucinare parametri

โ€” soprattutto per i campi opzionali che non sono chiaramente vincolati da un enum. Questo รจ esattamente il motivo per cui strict: true รจ importante: rimuove al modello la possibilitร  di inventare campi al di fuori del tuo schema.

Non gestire il loop multi-turn. Gli sviluppatori spesso costruiscono il happy path โ€” lโ€™utente chiede, il modello chiama la funzione, fine.

I modelli possono generare chiamate di funzione che non corrispondono allo schema che hai definito o provare a chiamare una funzione che non hai incluso. Se il modello sta generando chiamate di funzione inaspettate, prova a includere unโ€™unica frase nel messaggio di sistema che dica โ€œUsa solo le funzioni che ti sono state fornite.โ€

Progetta per i casi limite.

Saltare il passaggio di conferma prima delle operazioni di scrittura.

Sii consapevole dellโ€™impatto reale delle chiamate di funzione che prevedi di eseguire, specialmente quelle che innescano azioni come eseguire codice, aggiornare database o inviare notifiche. Per le funzioni che compiono azioni, si consiglia vivamente di implementare un passaggio in cui lโ€™utente confermi lโ€™azione prima dellโ€™esecuzione.

Se una chiamata di funzione puรฒ eliminare dati, inviare denaro o modificare lo stato esterno, una persona dovrebbe approvarla prima.

Considerazioni su Sicurezza e Affidabilitร 

La chiamata di funzioni amplia ciรฒ che un LLM puรฒ fare. Amplia anche ciรฒ che un attaccante puรฒ fargli fare.

La minaccia principale qui รจ lโ€™iniezione di prompt.

Gli obiettivi finali delle iniezioni di prompt variano ma possono includere lโ€™esfiltrazione di dati privati tramite chiamate a strumenti downstream, lโ€™esecuzione di azioni non allineate o, in generale, la modifica del comportamento del modello in modo non previsto.

Quando le tue chiamate di funzione possono inviare email, interrogare database o attivare webhook, un attacco di injection non รจ solo un chatbot che esce dallo script โ€” รจ una potenziale violazione.

Man mano che i sistemi di AI vanno oltre la chat e iniziano a chiamare strumenti e intraprendere azioni, lโ€™iniezione di prompt diventa un problema molto piรน serio. Unโ€™istruzione malevola nascosta in una pagina web, in un documento o in uno strumento esterno puรฒ tentare di sovrascrivere il comportamento del sistema, esporre informazioni sensibili o attivare azioni che il modello non dovrebbe mai compiere.

La strategia di mitigazione ha alcuni livelli concreti.

Progetta workflow in modo che i dati non attendibili non guidino mai direttamente il comportamento degli agenti. Estrai solo campi strutturati specifici โ€” come enum o JSON validati โ€” dagli input esterni per limitare il rischio di injection che fluisce tra i nodi.

Inoltre,

verifica sempre le chiamate di funzione generate dal modello. Questo include controllare i parametri, la funzione chiamata e assicurarsi che la chiamata sia allineata con lโ€™azione prevista.

Una veritร  scomoda:

โ€œLโ€™iniezione di prompt, proprio come le truffe e lโ€™ingegneria sociale sul web, difficilmente sarร  mai completamente โ€˜risoltaโ€™.โ€

Questa รจ la valutazione di OpenAI. Lโ€™implicazione pratica รจ che non dovresti progettare sistemi agentici con chiamata di funzioni assumendo che il modello si comporterร  sempre come previsto. Difesa in profonditร  โ€” validazione, permessi con ambito, human-in-the-loop per operazioni distruttive โ€” รจ lโ€™unica postura sensata.

Chiamata di Funzioni vs. Ingegneria del Prompt โ€” Quando Usare lโ€™Una o lโ€™Altra

Questo confronto emerge continuamente. La risposta breve: risolvono problemi diversi, e confonderli porta a prompt eccessivamente ingegnerizzati dove basterebbe la chiamata di funzioni, o a schemi di funzione fragili quando un buon system prompt sarebbe piรน semplice.

Chiamata di funzioni vs Ingegneria del prompt

Lโ€™ingegneria del prompt consiste nel creare input testuali per guidare il ragionamento interno dellโ€™LLM โ€” per esempio, chiedendogli di โ€œpensare passo-passoโ€.

Influenza come il modello ragiona. La chiamata di funzioni, invece, influenza ciรฒ che il modello produce come output e lo instrada direttamente nel tuo sistema.

La chiamata di strumenti รจ la capacitร  che consente allโ€™LLM di interagire con sistemi esterni. Mentre usi lโ€™ingegneria del prompt per aiutare il modello a decidere quale strumento usare, la chiamata di strumenti รจ il meccanismo che esegue effettivamente lโ€™azione. Probabilmente ti servono entrambe, ma hanno scopi diversi.

Un vantaggio tecnico chiave della chiamata di funzioni rispetto allโ€™output strutturato basato su prompt:

la chiamata di strumenti รจ un concetto integrato direttamente nel modello. Non cโ€™รจ bisogno di sprecare token ed energie per spiegare al modello che dovrebbe restituire un formato specifico.

Quando crei un prompt che dice โ€œrestituisci la tua risposta come JSON con i campi X, Y e Zโ€, stai spendendo token per istruzioni che il modello potrebbe seguire in modo incoerente. Con la chiamata di funzioni, lโ€™applicazione dello schema avviene a livello di API.

Le API di chiamata di funzioni, ora supportate nativamente in molte piattaforme LLM, forniscono unโ€™interfaccia formale guidata da schemi che consente una rigorosa validazione dei dati e lโ€™integrazione con workflow programmabili.

Questo รจ il motivo reale per sceglierla rispetto allโ€™ingegneria del prompt per qualsiasi dato che debba fluire in sistemi a valle: lโ€™affidabilitร  non รจ opzionale una volta in produzione.

DimensioneIngegneria del PromptChiamata di Funzioni
Scopo principaleModellare il ragionamento e il tono del modelloProdurre output strutturati per lโ€™integrazione con i sistemi
Formato dellโ€™outputTesto libero (o JSON โ€œa forma di testoโ€)Schema JSON imposto
Affidabilitร  dello schemaBest effort; soggetta a driftGarantita con strict: true
Costo in tokenInferiore per output sempliciSuperiore (le definizioni delle funzioni aggiungono token)
Quando usarlaCompiti di ragionamento, generazione di testo, controllo dello stileEstrazione di dati strutturati, orchestrazione API, azioni agentiche
Esposizione a prompt injectionInferiore (nessuna esecuzione di strumenti esterni)Superiore (le chiamate possono attivare azioni nel mondo reale)

Lโ€™euristica pratica: se lโ€™output deve alimentare un sistema a valle โ€” una scrittura su database, una chiamata API, un ramo decisionale nel tuo codice โ€” usa la chiamata di funzioni. Se lโ€™output รจ destinato alla lettura umana, lโ€™ingegneria del prompt รจ di solito sufficiente e piรน economica.

Punti Chiave

ArgomentoCosa Ricordare
Cosโ€™รจIl modello produce JSON strutturato che descrive quale funzione chiamare โ€” non esegue la funzione
Superficie API attualeUsa tools e tool_choice; i parametri functions e function_call sono deprecati
Modalitร  strictImposta sempre strict: true nelle definizioni di funzione per imporre la conformitร  allo schema
Chiamate paralleleSupportate nei modelli rilasciati dopo novembre 2023; una richiesta puรฒ attivare piรน chiamate a strumenti
Costo in tokenGli schemi delle funzioni consumano token in input; minimizza il numero di funzioni esposte
SicurezzaValida tutte le chiamate di funzione generate; non consentire mai a contenuti esterni non attendibili di guidare direttamente le chiamate
vs. Ingegneria del PromptLa chiamata di funzioni impone la struttura dellโ€™output a livello di API; lโ€™ingegneria del prompt modella il ragionamento interno
Passi di confermaQualsiasi funzione con effetti reali (scrivere, inviare, eliminare) dovrebbe richiedere conferma dellโ€™utente prima dellโ€™esecuzione

Se vuoi sperimentare la chiamata di funzioni su modelli diversi โ€” GPT-5.4, claude opus 4.7, gemini 3.1 pro โ€” senza mantenere credenziali API separate per ciascuno, CometAPI ti dร  accesso a tutti tramite un unico endpoint e una singola chiave, rendendo i test cross-model significativamente meno gravosi.

CometAPI risolve lโ€™overhead infrastrutturale:

โœ… Sintassi unificata per la chiamata di funzioni su oltre 15 modelli

โœ… Unโ€™unica chiave API โ€” nessun account separato per OpenAI/Anthropic/Google

โœ… Traduzione automatica dello schema โ€” scrivi una volta, testa ovunque

โœ… Monitoraggio dei costi integrato โ€” confronta lโ€™uso di token per modello in tempo reale

Inizia a testare con crediti gratuiti โ†’ Ottieni lโ€™accesso

Pronto a ridurre i costi di sviluppo AI del 20%?

Inizia gratuitamente in pochi minuti. Crediti di prova gratuiti inclusi. Nessuna carta di credito richiesta.

Leggi di piรน