VoiceBooker

Bot multi‑stadio / prompt

In questo tutorial costruiamo un assistente più complesso basato su più stages.

Qui imparerai:

  1. la differenza tra bot a singolo stadio e bot multi‑stadio/prompt
  2. le transizioni di stage
  3. come accedere ai dati estratti dall’IA tramite la variabile params

Perché usare bot multi‑stadio?

In teoria è possibile creare flussi di chiamata complessi con una sola stage, cioè un solo prompt. Tuttavia, gli LLM a volte allucinano e prendono percorsi inattesi. Potrebbero fare affermazioni o porre domande non vere, ad esempio suggerendo slot di appuntamento che non esistono. Per evitarlo, possiamo usare più stages, in cui ogni stage rappresenta il proprio dialogo in una sessione di chiamata. Ogni stage ha il suo prompt che viene inserito durante la conversazione così possiamo istruire il LLM con precisione su cosa fare dopo.

Un esempio basato sulla prenotazione di appuntamenti:

L’assistente chiede prima all’utente/chiamante se vuole prenotare un appuntamento o annullare una prenotazione. Se l’utente vuole prenotare un appuntamento, l’assistente chiede il tipo di appuntamento e il giorno desiderato nella prima stage, mentre la seconda stage raccoglie tutte le informazioni sulla persona che prenota, ad es. nome, email, numero di telefono.

Nel caso di annullamento, il bot chiede prima il nome del chiamante per identificare l’utente, quindi recupera le prenotazioni esistenti, le elenca e chiede quale prenotazione specifica vuole annullare.

Questi due flussi possono essere espressi con regole if‑then in un singolo prompt, ma le regole possono diventare molto complesse e annidate, facendo deviare il LLM dal percorso. È proprio questo il problema che i bot multi‑stadio/prompt evitano.

Bot a singolo stadio vs. bot multi‑stadio/prompt

Per illustrare la differenza tra bot a singolo stadio e bot multi‑stadio/prompt, prima creiamo un bot a singolo stadio che raccoglie due informazioni e poi dividiamo il flusso in due stages.

Welcome‑Stage

Per prima cosa, definiamo/utilizziamo la stage Welcome con il seguente prompt:

You are an AI phone assistant that collects some user/customer data.
You respond in Italian.
You respond briefly and in a very friendly, conversational style.
Answer any question that is outside the purpose of collecting the customer's name and date of birth with: I don't know.
Do not invent any answers.

Greet the user and ask for their name and date of birth including the year.
Definire i parametri

Successivamente, nella scheda Actions/Tools, definiamo una funzione collectData con i seguenti parametri: name come String e dob come Date. I parametri della funzione dovrebbero quindi essere configurati come segue:

Definire la risposta

Nella scheda Functions, ora possiamo estendere la funzione JavaScript vuota collectData(params) con il testo che l’assistente dovrebbe dire quando questa funzione viene chiamata. Nel nostro esempio, l’assistente risponde semplicemente con "Grazie!" e il nome fornito dall’utente/chiamante dopo che il nome è stato acquisito.

function collectData(params) {
    return { text: "Grazie! " + params.name };
}

Il parametro params contiene tutti gli input raccolti in precedenza dal chiamante/utente come struttura dati JSON.

{
    "name": "Max",
    "dob": "14.09.1989"
}

Testare l’assistente a singolo stadio

Come mostra la conversazione, l’assistente saluta il chiamante e chiede il nome e la data di nascita. Una volta che l’utente/chiamante ha fornito le informazioni richieste, l’assistente risponde con un ringraziamento e ripete il nome fornito.

Puoi anche vedere la chiamata alla funzione collectData() e i valori del parametro params, che contengono i dati estratti dall’IA dalla conversazione.

Bonus

Nell’esempio sopra, l’assistente dice semplicemente ciò che è stato restituito come text nella funzione collectData(). Come mostrato, la conversazione si è svolta in italiano. Se vuoi che l’LLM formuli autonomamente una risposta nella lingua corretta, puoi restituire un campo data al suo posto.

function collectData(params) {
    return { data: "Thank the user and mention their name." };
}

Bot multi‑stadio/prompt

Questa volta dividiamo il bot sopra in modo che la stage Welcome chieda solo il nome e la stage successiva chieda solo la data di nascita.

Prompt per Welcome‑Stage

Per prima cosa, definiamo/utilizziamo la stage Welcome e impostiamo il seguente prompt:

You are an AI assistant that collects some user/customer data.
You respond in Italian.
You respond briefly and in a very friendly, conversational style.
Answer any question that is outside the purpose of collecting the customer's name and date of birth with: I don't know.
Do not invent any answers.

Greet the user and ask only for their name.

Nota che abbiamo abbreviato l’istruzione a sola richiesta del nome, ma non la data di nascita, perché quell’informazione viene raccolta nella seconda stage dopo aver raccolto il nome e aver effettuato la transizione alla stage successiva.

Azione per Welcome‑Stage

Poi aggiungiamo una seconda stage e la chiamiamo Stage DOB, ma la lasciamo vuota per ora. Successivamente, nella scheda Actions/Tools, definiamo una funzione collectName con il parametro name come string e forniamo una descrizione appropriata.

Gli strumenti dovrebbero quindi essere configurati come segue:

Nota che definiamo anche un key/path (percorso nello state) in cui le informazioni raccolte, cioè il nome, devono essere memorizzate nello state. E definiamo una transizione alla stage Stage DOB creata in precedenza perché vogliamo raccogliere la data di nascita successivamente.

Prompt per Stage DOB

Per questa stage, usiamo un prompt molto breve perché il LLM dovrebbe chiedere solo la data di nascita a questo punto.

Ask the caller for their date of birth.
Azione per Stage DOB

Infine, definiamo le azioni/funzioni per la stage DOB come segue:

Poi implementiamo la funzione collectDOB definita nella sezione Actions/Tools. Nel nostro esempio, rispondiamo semplicemente con "Grazie!" e riagganciamo.

function collectDOB(params) {
    return { text: "Grazie!", action: "hangup" };
}

Testare il bot multi‑stadio

Come mostra la conversazione, l’assistente saluta il chiamante e chiede il nome. Dopo che il chiamante fornisce il nome, la funzione collectName viene chiamata e attiva la transizione a Stage DOB. In questa stage, il LLM chiede la data di nascita come definito nel prompt. Infine, la funzione collectDOB viene chiamata con i dati forniti dal chiamante.

In modalità debug, puoi vedere in quale stage si trova l’assistente, così come lo stato corrente, l’ultimo prompt e i dati/variabili estratti, ecc.

Ordine di esecuzione: prompt e chiamate di funzione

Durante l’esecuzione, i valori/dati restituiti dalle chiamate di funzione e il prompt della stage successiva vengono combinati dal LLM in un’unica risposta seguita immediatamente dalla domanda successiva:

In questa pagina