C'è una differenza sostanziale tra un LLM che risponde a domande e un AI Agent che esegue azioni. La tecnologia che rende possibile questo salto si chiama function calling - o tool use, secondo la terminologia di alcuni provider.
Capire cosa è il function calling è capire cosa distingue un chatbot da un agente che fa cose.
La limitazione di un LLM senza strumenti
Un LLM standard è un sistema chiuso. Riceve testo, produce testo. Non ha accesso a nulla di esterno: non può interrogare un database, non può leggere un file in tempo reale, non può chiamare un'API, non può inviare un'email.
Questo limita enormemente l'utilità in contesti aziendali. La maggior parte dei task che hanno valore in un'azienda richiedono di leggere da un sistema, scrivere su un altro, aggiornare uno stato, inviare una notifica.
Il function calling rompe questo limite.
Cosa significa function calling
Il function calling è un meccanismo che permette al LLM di dichiarare l'intenzione di chiamare una funzione esterna, specificando i parametri necessari. L'applicazione che gestisce il LLM intercetta questa intenzione, esegue la funzione reale, e restituisce il risultato al modello che può continuare il ragionamento.
Non è il LLM ad eseguire direttamente il codice. Il LLM dice "ho bisogno di chiamare la funzione cerca_cliente con il parametro id: 12345". Il sistema applicativo esegue questa chiamata, ottiene il risultato, lo inserisce nel contesto del modello, e il modello può usarlo per rispondere o per decidere il passo successivo.
Questo è esattamente il meccanismo che trasforma un LLM in un AI Agent: il modello ragiona, decide quali strumenti usare, usa i risultati per ragionare ulteriormente, e arriva a un'azione finale.
Un esempio concreto step by step
Immagina un agente AI per il supporto vendite. L'utente chiede: "Dammi un riepilogo degli ordini aperti del cliente Rossi SpA e mandami un'email di follow-up."
Il modello riceve la richiesta e ha a disposizione queste funzioni:
cerca_cliente(nome)- interroga il CRMlista_ordini(cliente_id, stato)- recupera ordini dal gestionaleinvia_email(destinatario, oggetto, corpo)- invia email via SMTP
Esecuzione:
- Il modello chiama
cerca_cliente("Rossi SpA")- ottiene l'ID cliente e l'email del referente - Il modello chiama
lista_ordini(cliente_id, stato="aperto")- ottiene la lista degli ordini - Il modello elabora le informazioni, compone il testo dell'email
- Il modello chiama
invia_email(destinatario, oggetto, corpo)- l'email viene inviata
Il tutto senza intervento umano intermedio. L'utente ha fatto una richiesta in linguaggio naturale; l'agente ha orchestrato quattro operazioni su sistemi diversi.
Perché il function calling è la chiave degli AI Agent
Prima del function calling, integrare un LLM con sistemi aziendali richiedeva architetture elaborate e pipeline rigide. Il modello non poteva decidere autonomamente quale API chiamare e quando.
Con il function calling, il modello diventa un orchestratore. Può scegliere quali strumenti usare in base al contesto della richiesta, chiamarli in sequenza o in parallelo, gestire errori e fallback, iterare finché il task non è completato.
Questo è il motivo per cui gli AI Agent moderni sono molto più flessibili dei bot RPA tradizionali: non seguono un flusso rigido pre-programmato, ma ragionano su cosa fare in base alla situazione.
Puoi vedere come questi agenti vengono costruiti in produzione nella pagina prodotti/ai-agent.
Come si progetta una funzione per un AI Agent
Non tutte le funzioni si creano allo stesso modo. La qualità delle funzioni disponibili all'agente determina in larga misura la qualità dell'agente stesso.
Descrizione precisa: ogni funzione deve avere una descrizione in linguaggio naturale che spieghi chiaramente cosa fa e quando usarla. Il modello usa queste descrizioni per decidere. Una descrizione ambigua porta a usi sbagliati.
Parametri tipizzati: i parametri devono avere tipo, descrizione e - se necessario - valori possibili. "cliente_id: stringa, l'ID numerico del cliente nel CRM" è molto più utile di "id".
Granularità giusta: funzioni troppo granulari richiedono molte chiamate per task semplici; funzioni troppo grandi sono rigide. Il bilanciamento richiede esperienza con il tipo di richieste che l'agente riceverà.
Gestione degli errori: cosa restituisce la funzione quando fallisce? Il modello deve ricevere errori comprensibili per poterli gestire nel ragionamento.
Sicurezza e controllo accessi
Questa è la parte che molte implementazioni trascurano.
Se un AI Agent può chiamare funzioni che scrivono su database, inviano comunicazioni o modificano sistemi, il perimetro di sicurezza dell'agente è critico. Un agente mal configurato - o manipolato tramite prompt injection - potrebbe eseguire azioni non desiderate.
Alcune misure essenziali:
Principio del minimo privilegio: ogni funzione deve avere solo le autorizzazioni strettamente necessarie. Un agente per il supporto clienti non ha bisogno di funzioni che modificano i permessi di sistema.
Funzioni di sola lettura vs scrittura: distinguere chiaramente le operazioni di lettura da quelle di scrittura. Per le operazioni che modificano dati o eseguono azioni irreversibili, valutare un meccanismo di conferma.
Rate limiting: limitare il numero di chiamate che l'agente può fare in un certo periodo. Previene loop involontari e comportamenti anomali.
Audit log: ogni function call eseguita da un agente deve essere loggata con timestamp, parametri e risultato. In caso di errore o comportamento anomalo, il log permette di capire cosa è successo.
Validazione degli input: le funzioni non devono fidarsi ciecamente dei parametri passati dall'agente. Una validazione lato funzione protegge da parametri inattesi o malevoli.
Human-in-the-loop per azioni critiche: per azioni con impatto significativo (cancellazione di dati, invio di comunicazioni massive, esecuzione di pagamenti), il pattern migliore è "l'agente propone, l'umano approva".
Il punto di arrivo: agenti che completano task, non solo rispondono
La differenza tra un chatbot e un AI Agent non è la sofisticazione delle risposte. È la capacità di completare task che richiedono più passi e più sistemi.
Un chatbot risponde "puoi trovare questo nelle condizioni contrattuali". Un AI Agent recupera le condizioni contrattuali specifiche per quel cliente, verifica l'applicabilità alla situazione, e prepara la risposta con le clausole rilevanti già citate.
Il function calling è l'infrastruttura che rende possibile questo salto. Progettarlo bene - con sicurezza, logging e controlli adeguati - è la differenza tra un agente che crea valore e uno che crea problemi.
La sezione tecnologia descrive le architetture con cui questi sistemi vengono costruiti e le scelte progettuali più rilevanti.