Function calling negli assistenti vocali: come la gestione dello stato riduce le allucinazioni


André Martin
André Martin
28 agosto 2025  - 6 min di lettura
Function calling negli assistenti vocali: come la gestione dello stato riduce le allucinazioni

Sintesi

I grandi modelli linguistici possono allucinare parametri tecnici come ID di prodotti o tariffe durante le function call, soprattutto quando devono essere trasmessi più valori contemporaneamente. In flussi di ordine complessi, questo può portare a richieste backend errate o non valide. Un approccio molto più affidabile consiste nel raccogliere le decisioni dell'utente passo dopo passo e salvare ogni scelta in uno stato persistente prima di eseguire la transazione finale. VoiceBooker supporta questo approccio con una gestione dello stato integrata e consente così di creare bot di servizio robusti, molto affidabili e con un basso tasso di errore.

Introduzione

Gli assistenti telefonici complessi per le linee di supporto spesso devono recuperare dati da sistemi backend, identificare informazioni cliente o eseguire transazioni su un account utente. Gli assistenti vocali moderni basati su LLM consentono una conversazione naturale e possono interagire con sistemi esterni tramite il function calling.

In pratica, però, emerge presto una sfida: l'affidabilità delle function call dipende in modo decisivo da come le informazioni vengono raccolte ed elaborate durante il dialogo.

Il problema: parametri e ID allucinati

Consideriamo un esempio tipico del settore delle telecomunicazioni. Un cliente desidera acquistare un piano mobile. Il flusso di ordine è composto da diverse decisioni:

  1. Scegliere tra prepagato e postpagato
  2. Se viene scelto il prepagato: selezionare un pacchetto minuti
  3. Scegliere un pacchetto SMS

Ognuna di queste opzioni possiede un ID tecnico univoco nel backend. Ad esempio, i prodotti disponibili potrebbero essere modellati così:

Opzione ID
Prepagato 101
Postpagato 102
100 minuti 201
500 minuti 202
100 SMS 301
500 SMS 302

Un approccio ingenuo consiste nel lasciare che l'assistente vocale raccolga prima tutte le informazioni necessarie e poi esegua una singola function call:

{
  "product_type_id": 101,
  "minutes_package_id": 202,
  "sms_package_id": 302
}

A prima vista questo approccio sembra sensato. Nella pratica, però, spesso crea problemi.

I grandi modelli linguistici tendono ad allucinare. Ciò significa che possono inventare informazioni che in realtà non esistono. Questo diventa particolarmente critico quando sono coinvolti ID tecnici. Se un modello deve compilare più parametri contemporaneamente, aumenta la probabilità di confondere i valori o addirittura di inventarne uno.

Al posto di utilizzare l'ID valido 202, per esempio, il modello potrebbe improvvisamente generare un ID inesistente come 205. Più opzioni e parametri devono essere elaborati nello stesso momento, più questo rischio aumenta.

Perché la complessità cresce in modo esponenziale

Il problema di fondo è la dimensione dello spazio di ricerca.

Se, ad esempio, esistono due tipi di prodotto, cinque pacchetti minuti e quattro pacchetti SMS, si ottengono già:

2 × 5 × 4 = 40

combinazioni possibili.

Nei prodotti reali, centinaia o migliaia di combinazioni valide possono emergere rapidamente. Il modello deve quindi non solo identificare l'opzione corretta, ma anche selezionare più ID corretti e combinarli in modo coerente.

Questo tipo di complessità combinatoria aumenta notevolmente la probabilità di errori.

L'approccio migliore: raccolta delle informazioni basata sullo stato

Una strategia molto più robusta consiste nel raccogliere le informazioni passo dopo passo e memorizzarle in uno stato centrale.

Il dialogo potrebbe svolgersi così:

Passo 1: scegliere il tipo di prodotto

{
  "product_type_id": 101
}

Il valore viene salvato nello stato.

Passo 2: scegliere il pacchetto minuti

{
  "minutes_package_id": 202
}

Il nuovo valore viene anch'esso salvato nello stato.

Passo 3: scegliere il pacchetto SMS

{
  "sms_package_id": 302
}

Anche questo valore finisce nello stato.

Ad ogni passo, l'assistente vocale deve prendere solo una singola decisione. Invece di scegliere tra tutte le possibili combinazioni in una volta sola, si concentra su un insieme limitato di opzioni per ciascun passo.

Solo dopo che tutte le informazioni sono state raccolte viene eseguito il commit finale:

{
  "product_type_id": 101,
  "minutes_package_id": 202,
  "sms_package_id": 302
}

Poiché tutti gli ID sono già stati validati e memorizzati in precedenza, il rischio di allucinazioni si riduce drasticamente.

Perché questo approccio è più affidabile

Il vantaggio decisivo è la riduzione del carico cognitivo per il modello.

Con una singola function call con molti parametri, l'LLM deve:

  • prendere più decisioni contemporaneamente
  • ricordare gli ID corretti
  • formare la combinazione corretta
  • restituire tutti i valori in un solo passaggio

Con l'approccio basato sullo stato, invece, il modello deve solo:

  • prendere una decisione
  • selezionare un ID
  • salvarlo nello stato

La probabilità di errori si riduce quindi in modo significativo. Al posto di un grande problema combinatorio, si creano diversi compiti piccoli e molto più semplici.

VoiceBooker e gestione dello stato integrata

VoiceBooker supporta questo paradigma tramite una gestione dello stato integrata.

Per tutta la durata della conversazione è disponibile un oggetto JSON che può essere letto e aggiornato a ogni passo del dialogo. Le informazioni già raccolte restano quindi disponibili in modo persistente e non devono essere ricostruite dal modello.

Uno stato tipico potrebbe apparire così:

{
  "customer_id": "12345",
  "product_type_id": 101,
  "minutes_package_id": 202,
  "sms_package_id": 302
}

Ogni nuova decisione dell'utente si limita ad arricchire lo stato esistente. Solo quando tutte le informazioni necessarie sono disponibili viene attivata la transazione reale.

Questo schema porta a function call molto più affidabili e minimizza le allucinazioni nei parametri tecnici.

Conclusione

Il function calling è una tecnologia centrale per i moderni assistenti vocali e di supporto. La sfida principale, però, non è la chiamata alla funzione in sé, ma il recupero affidabile dei parametri necessari.

Quando più ID e decisioni vengono elaborati nello stesso momento, la probabilità di allucinazioni e di function call errate aumenta in modo significativo. Un approccio basato sullo stato, in cui le informazioni vengono raccolte e memorizzate passo dopo passo, riduce notevolmente la complessità.

Con la gestione dello stato integrata di VoiceBooker, proprio questo tipo di dialoghi può essere implementato in modo efficiente. Gli ID e altri parametri tecnici vengono memorizzati in modo sicuro nello stato durante la conversazione e possono poi essere usati in modo affidabile per la transazione finale. Il risultato sono bot di servizio robusti, scalabili e di alta qualità, in grado di modellare in modo affidabile anche processi aziendali complessi.

Tag
Voice AIChiamate di funzioneGestione dello statoAllucinazioniProgettazione conversazionaleTecnico