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.
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.โ
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.
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.
| Dimensione | Ingegneria del Prompt | Chiamata di Funzioni |
|---|---|---|
| Scopo principale | Modellare il ragionamento e il tono del modello | Produrre output strutturati per lโintegrazione con i sistemi |
| Formato dellโoutput | Testo libero (o JSON โa forma di testoโ) | Schema JSON imposto |
| Affidabilitร dello schema | Best effort; soggetta a drift | Garantita con strict: true |
| Costo in token | Inferiore per output semplici | Superiore (le definizioni delle funzioni aggiungono token) |
| Quando usarla | Compiti di ragionamento, generazione di testo, controllo dello stile | Estrazione di dati strutturati, orchestrazione API, azioni agentiche |
| Esposizione a prompt injection | Inferiore (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
| Argomento | Cosa Ricordare |
|---|---|
| Cosโรจ | Il modello produce JSON strutturato che descrive quale funzione chiamare โ non esegue la funzione |
| Superficie API attuale | Usa tools e tool_choice; i parametri functions e function_call sono deprecati |
| Modalitร strict | Imposta sempre strict: true nelle definizioni di funzione per imporre la conformitร allo schema |
| Chiamate parallele | Supportate nei modelli rilasciati dopo novembre 2023; una richiesta puรฒ attivare piรน chiamate a strumenti |
| Costo in token | Gli schemi delle funzioni consumano token in input; minimizza il numero di funzioni esposte |
| Sicurezza | Valida tutte le chiamate di funzione generate; non consentire mai a contenuti esterni non attendibili di guidare direttamente le chiamate |
| vs. Ingegneria del Prompt | La chiamata di funzioni impone la struttura dellโoutput a livello di API; lโingegneria del prompt modella il ragionamento interno |
| Passi di conferma | Qualsiasi 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
