Mentre l’intelligenza artificiale continua ad evolvere, porta con sé incredibili vantaggi. Una delle ultime e più discusse innovazioni nel mondo dell’Intelligenza Artificiale è il GPT-3, un modello rivoluzionario e innovativo di elaborazione del linguaggio naturale sviluppato da OpenAI, che utilizza apprendimento avanzato per generare del testo che imita, in modo quasi perfetto, il linguaggio umano.
Perché è così importante?
Rappresenta una rivoluzione assoluta nella creazione di chatbot e, in combinazione con un builder grafico come Landbot è in grado di rendere la creazione di bot basati su intelligenza artificiale accessibile a chiunque.
In questo tutorial dettagliato andremo a dimostrare come costruire un chatbot con GPT-3 per il tuo canale WhatsApp e lo faremo senza andare a scrivere una sola linea di codice; cosa che è ancora più interessante se scrivere codice non è il tuo forte o se vuoi velocizzare il processo di creazione dei chatbot.
Prima di iniziare, andiamo a spiegare un paio di cose che devi conoscere quando lavori con GPT.
Differenze tra GPT Completion API e Chat API
OpenAI offre due tipi principali di prodotti GPT: Completion API e Chat API.
Queste due API offrono funzioni e vantaggi diversi ma spesso vengono considerate, a torto, intercambiabili. Per ottenere i migliori risultati è essenziale che tu scelga quella giusta per il tuo caso d’uso.
I modelli Completion API sono progettati per generare testo in base a un prompt o a un input parziale. Eccellono in compiti come il completamento di un testo (come i suggerimenti automatici che appaiono quando si scrive un’email), la generazione di testo e le traduzioni automatiche. Vengono usati, per lo più, come supporto per la scrittura, per generare contenuti o per creare riassunti.
Invece, i modelli Chat API vengono specificatamente allenati per facilitare le interazioni di tipo conversazionale. Il loro scopo è quello di simulare una conversazione che si sviluppa in modo simile a quanto avverrebbe con un essere umano. Questi tipi di modelli sono più adatti a compiti che coinvolgono interazioni bidirezionali, come fornire risposte a domande di un utente e gestire applicazioni basate su dialoghi.
I modelli Chat sono più difficili da allenare rispetto ai modelli Completion.
Mentre un modello di tipo Completion tipicamente fornisce una risposta singola a un determinato prompt, un modello Chat è capace di gestire una conversazione attendendo il proprio turno per parlare ed è in grado di rimanere fedele al contesto anche in caso di più input da parte dell’utente.
Pertanto, quando scegli un modello, devi considerare, con attenzione, qual è il tuo caso d’uso, qual è l’obiettivo che vuoi raggiungere e quali sono le competenze tecniche del tuo team.
Limiti e problemi dei GPT
I modelli di linguaggio GPT non sono privi di problemi.
Di seguito è riportata una lista dei problemi più comuni che possono verificarsi.
- Allucinazioni. Quando un bot parte per la tangente e fornisce risposte sconclusionate, si parla di allucinazioni. Puoi ridurre le probabilità che questo avvenga fornendo un prompt molto chiaro e impostando la temperatura (ovvero il fattore di “casualità” o “creatività” del testo) su un livello quanto più basso possibile. Ciò detto, non ci sono garanzie che le allucinazioni non si verifichino comunque di tanto in tanto.
- Timeout. Come tutte le API, talvolta i GPT vanno in errore o si prendono troppo tempo per rispondere. Come puoi vedere nel tutorial di seguito, puoi ridurre il problema aggiungendo “Response Routing” al tuo Webhook. In questo modo, quando si verifica un errore puoi rimuovere l’utente dalla conversazione e offrire un messaggio di errore, o che invita l’utente a riprovare, o semplicemente portare l’utente su un flusso alternativo basato su regole anziché continuare a utilizzare la conversazione guidata dall’intelligenza artificiale.
Anche se non è possibile eliminare i completamente problemi descritti, ci sono modi per tenerli sotto controllo e minimizzarne l’impatto. Ne riparleremo più avanti nel corso del nostro tutorial.
Come costruire un chatbot con GPT-3 senza scrivere codice
In questo tutorial ti mostreremo un modello WhatsApp GPT-3 pre-realizzato. Il bot di cui parliamo è un bot per la soddisfazione dei clienti che è stato progettato per raccogliere dati e riassumere il problema nel caso in cui un cliente comunica che non è soddisfatto del servizio o del prodotto ricevuto. Utilizza il modello Completion API.
Questo articolo descrive passo-passo il modello e spiega con chiarezza il PERCHÈ e le RAGIONI dietro ogni scelta che viene effettuata.
Clicca qui per accedere al modello WhatsApp-GPT-3 in modo da poter seguire meglio il tutorial.
NOTA: se leggere non è il tuo modo preferito di imparare, puoi guardare la registrazione del webinar WhatsApp AI, che segue e spiega lo stesso flusso:
1. Creazione dell’account
Per riprodurre o creare un chatbot simile, devi prima creare un account, o accedere con un account esistente, su Landbot e OpenAI. Landbot offre una prova gratuita. Nel caso di OpenAI, riceverai un credito di $5, che è un importo sufficiente per tre settimane di test intensivi, e che deve essere utilizzato entro tre mesi. In generale, i prezzi di OpenAI dipendono dal volume delle richieste e dal modello GPT che intendi utilizzare. Rappresenta comunque un ottimo incentivo.
Non appena apri un account OpenAI, verrai reindirizzato all’area delle chiavi API. Se questo non avviene, devi semplicemente cliccare sull’icona nell’angolo in alto a destra e scegliere “View API keys” (Visualizza le chiavi API).
2. Descrizione generale/analisi dello scopo e del flusso del chatbot
Vogliamo che questo bot, basato sull’intelligenza artificiale, faccia tutto ciò che occorre per recuperare il numero dell’ordine del cliente e il suo indirizzo email e ottenere un riepilogo del problema. Poi deve mettere insieme queste informazioni e inviarle al database del servizio di assistenza, in questo caso in Airtable, per controllare che l’indirizzo email e il numero di ordine siano corretti.
Il flusso è diviso in due parti principali.
La prima parte è un ciclo dove il GPT richiede le informazioni necessarie all’utente. Il dialogo prosegue fino a quando il bot non raccoglie tutte le informazioni che deve inviare.
Nella seconda parte del flusso, il bot genera un riassunto della conversazione e lo invia al database Airtable.
3. Configurare un messaggio iniziale
Prima di tutto dobbiamo definire il primo messaggio che l’utente riceve tramite WhatsApp. L’idea qui è quella di utilizzare una domanda semplice e diretta, con un pulsante per valutare l’esperienza:
Il modello offre questa semplice configurazione, ma puoi comunque modificare la domanda a tuo piacimento. Dato che questo è un bot WhatsApp, questo significa che potrai usare il nome utente automaticamente, senza chiederlo, per personalizzare la conversazione sin dall’inizio.
Ora, dato che il GPT è progettato per raccogliere dati su problemi e incidenti, solo gli utenti che cliccano sull’icona della faccia triste vanno a iniziare una conversazione con il bot basato su IA. Coloro che cliccano sull’icona della faccia sorridente o neutra, ricevono un semplice ringraziamento e la chat viene chiusa.
Dato che questo avviene per la maggior parte delle risposte, il modello collega il pulsante viola (di default) con il messaggio “Grazie” e chiude la chat. Il pulsante di default è particolarmente comodo nei casi in cui ci sono molte risposte diverse, che sono comunque importanti, ma che non hanno influenza sulla direzione del flusso. Non serve trascinare una freccia da ciascuna risposta singola.
Ora trascineremo una freccia separata a partire dal pulsante “faccia triste” per creare un flusso IA rivolto ai clienti insoddisfatti.
4. Impostare una conversazione “Memory Box”
Prima di procedere andiamo a creare una memoria per la chat. Puoi immaginarla come una scatola vuota, che viene progressivamente riempita allo svilupparsi della conversazione.
Perché questo è passaggio importante?
Quando inviamo questa “scatola” al GPT, essa agisce come memoria, per cui il bot non andrà a richiedere le stesse informazioni due volte, aiutando a mantenere un flusso conversazionale efficiente e logico. Senza di essa il bot potrebbe continuare a formulare sempre le stesse domande.
Per creare questa “scatola”, utilizziamo il blocco “Set a Variable” (Imposta una variabile):
Dato che questo è un modello, la variabile e i valori dei campi sono già popolati.
È importante tenere presente che la variabile che memorizza tutti i dati della conversazione è nel formato array. Il campo “Type the value” (Digita il valore) include parentesi quadre vuote, che rappresentano il contenitore inizialmente vuoto dove la conversazione verrà memorizzata.
Nota: puoi comunque sempre creare le tue variabili per memorizzare i dati raccolti dal chatbot. È consigliabile dare loro nomi descrittivi (come ad esempio “@conversation_history” nel nostro caso, ovvero “storico della conversazione”), in modo da sapere subito che informazioni contengono.
5. Collegare il flusso al GPT
Come prima cosa andremo a usare nuovamente il blocco “Set a Variable” per memorizzare la chiave API OpenAI. Questo passaggio non è obbligatorio se stai costruendo il tuo flusso. È comunque molto utile quando costruisci dei modelli, dato che rende la configurazione dei template molto più facile da modificare. In effetti, grazie a esso, per attivare la connessione in pratica devi solo impostare la variabile.
Vai al tuo account OpenAI e copia la tua chiave API.
Fatto questo, puoi semplicemente testare la connessione in un blocco Webhook. Per chiarezza, andremo comunque a spiegare la configurazione, nel caso in cui tu voglia riprodurre la connessione da zero.
Clicca sul blocco Webhook per aprire l’editor.
Potrai vedere che, nel caso di questo modello, il campo “URL & Method” (URL e metodo) è già popolato con il metodo POST e l’URL di un modello Completion.
Se volessi popolare tu questo campo, troveresti queste informazioni nei documenti dell’API OpenAI, sotto Completions > Create Completion.
Per cui, anche se vuoi impostare tutto da zero, tutto quello che devi fare è copiare e incollare l’URL e impostare il comando su POST.
Ora passiamo al segmento “Customize Header” (Personalizza Header) dell’editor del Webhook.
Qui è dove devi andare a inserire l’autorizzazione API.
Puoi trovare queste informazioni in “Example request” (Richiesta esempio), nel segmento “Create Completion” (Crea Completion).
La chiave dell’header è “Authorization”, e il suo valore è la parola “Bearer”, seguita da uno spazio e dalla tua chiave API.
Dato che hai già creato la variabile con la chiave API, il modello inserisce automaticamente l’API nel Webhook utilizzando tale variabile.
La sezione successiva che richiede attenzione è quella denominata “Customize Body” (Personalizza corpo). Di nuovo, nel modello questa sezione è già popolata.
Se volessi riempire questa sezione da solo, dovresti fare riferimento alla sezione “Example request” della documentazione OpenAI Completion e copiare quanto segue:
Questa sequenza specifica i dati riportati di seguito.
- Modello GPT (Ci sono molti modelli GPT disponibili. Nel nostro caso utilizziamo “text-davinci-003” che, in base ai nostri test, reputiamo il più affidabile).
- Prompt (Un prompt è in pratica un set di istruzioni per il GPT che chiarisce lo scopo e l’ambito della richiesta. Dovrebbe essere quanto più semplice, chiaro e diretto possibile, senza lasciare spazio alle interpretazioni. Ripeti tranquillamente i comandi varie volte per raggiungere questo obiettivo. Un prompt chiaro aiuta a prevenire le allucinazioni).
- Token massimi (I Token sono le unità di base che i modelli OpenAI GPT, incluso ChatGPT, utilizzano per calcolare la lunghezza di un testo. Sono caratteri, o gruppi di caratteri, che possono - o non possono - corrispondere a parole. A scopi semplificativi puoi immaginare che rappresentino il numero di caratteri. “Example request” ci fornisce 7 token, che corrispondo al massimo a 3-4 parole. Puoi notare che in questo modello il numero è impostato a 2000 anche se è improbabile che questa conversazione raggiungerà questo numero. Va interpretato semplicemente come un limite massimo prima che la conversazione venga chiusa).
- Temperatura (Il livello di temperatura nel modello GPT, in parole semplici, indica all’intelligenza artificiale quanto più improvvisare e diventare “creativa”. La temperatura più bassa possibile è 0, mentre quella più alta è 1. Gli incrementi vengono misurati in decimali, ad esempio 0,1 o 0,2 etc. Noi impostiamo la temperatura del nostro bot a 0, il che significa che può utilizzare solo ciò che abbiamo deciso. Per i casi d’uso più creativi potresti voler aumentare la temperatura).
Il prompt usato nel nostro modello è il seguente:
Un cliente (@home) ci sta contattando perché ha avuto un problema. Devi agire come un operatore cordiale con lo scopo di capire quale problema si è verificato con l’ordine ponendo domande. Sappiamo che c’è stato un problema ma dobbiamo capire quale sia stato, per cui devi scoprirlo. Inoltre recupera l’indirizzo email e il numero dell’ordine (non mostrare il riepilogo all’utente e non creare informazioni). Formula una sola domanda alla volta e rimani sempre cordiale. Il tuo compito non è di fornire assistenza ma di recuperare le informazioni. Non creare alcuna informazione; le informazioni devono essere fornite dal cliente. Questo è lo storico della conversazione con il cliente: @ conversation_history; una volta che hai raccolto le tre informazioni necessarie dal cliente e non ha più bisogno di aiuto, devi dire: “Un operatore si occuperà del problema”. Accertati di usare le parole chiave: “Un operatore si occuperà del problema” solo quando hai un quadro chiaro del problema (con almeno una frase dell’utente), il numero dell’ordine e l’indirizzo email e il cliente non ha più bisogno di aiuto. Cliente: @user_text: Tu: \n"
Questo impedisce al bot di creare informazioni lui stesso, ponendo invece enfasi sulla raccolta e il riepilogo delle informazioni, e facendolo più volte. Introduce anche la variabile dove è contenuta l’intera conversazione, in modo che il bot possa accedere alla memoria aggiornata in qualsiasi momento. Inoltre dice al bot che le risposte create dall’utente sono memorizzate in @user_text. Dato che è un modello Completion, è progettato per completare il dialogo, ecco perché è presente il prompt “Tu: \n”, in modo che il bot sappia che deve completare le risposte a quanto scrive l’utente.
La sezione successiva nell’editor Webhook è Test Your Request” (Testa la tua richiesta). Di nuovo, tutto è già configurato. Ciò detto, clicca comunque sul pulsante “Test the request” per verificare che tutto funzioni correttamente.
Se la connessione funziona correttamente, riceverai la risposta 200.
Le ultime sezioni di cui ci occupiamo sono “Save Responses as Variables” (Salva le risposte come variabili) e “Response Routing” (Instradamento risposta).
“Save Responses as Variables” ti permette di salvare la risposta del GPT in una variabile e mostrarla all’utente. Il modello è configurato in modo da recuperare e mostrare solo il testo che vuoi che l’utente veda.
NOTA: se sei curioso di sapere come impostare questa variabile in modo da salvare solo la parte testuale della risposta GPT, senza tutta la parte di codice, puoi fare riferimento al webinar WhatsApp-GPT al minuto 49:10.
“Response Routing” serve, in un certo senso, per limitare i danni. Se il collegamento Landbot-GPT funziona correttamente (200) il flusso continua nel ciclo GPT che abbiamo disegnato. Se si verifica un errore (429) e i server GPT sono sovraccarichi, ti permette di reindirizzare il flusso al messaggio “Riprova più tardi”.
Questo è tutto per il blocco Webhook. Grazie al modello non devi fare altre operazioni di configurazione. Comunque sia, se decidi di costruire tu stesso un chatbot con GPT, questi sono i passaggi che devi effettuare.
6. Impostare una formula per inviare la conversazione in una “Memory Box”
Mentre l’errore 429 ridireziona l’utente su un messaggio che invita a riprovare più tardi, la risposta 200 lo conduce in un ciclo di conversazione con il bot basato sull’intelligenza artificiale.
Come detto prima, per fare in modo che la conversazione abbia successo e produca risultati, il bot deve ricordare i dati raccolti a ogni interazione. Per fare questo dobbiamo essere sicuri di andare a memorizzare la conversazione all’interno delle scatole vuote che abbiamo creato all’inizio del flusso usando il blocco “Set a Variable”.
Per riempirle utilizziamo il blocco Formule. In breve, questo blocco ti permette di effettuare azioni che normalmente richiederebbero la scrittura di codice, come effettuare calcoli complessi, applicare formattazioni avanzate o modifiche, ecc. Anziché scrivere codice puoi usare funzioni che sono simili a quelle che si possono trovare in GoogleSheets.
Se vuoi ulteriori informazioni sui blocchi Formule e su cosa puoi fare con essi, puoi consultare il video tutorial nella Landbot Academy.
Per gli scopi di questa guida, non c’è altro da aggiungere sull’argomento. Ti basta sapere che stiamo usando la formula “Push” per inviare @response (GPT) e in seguito @user_text' (l’input dell’utente) alla nostra ”scatola” di memoria vuota per la conversazione: @conversation_history.
La formula è questa:
Push(Push(@conversation_history, '@response'), '@user_text')
7. Creare il ciclo della conversazione
Una volta che abbiamo la formula che invia i dati nelle nostre “scatole” della conversazione, possiamo procedere con la conversazione vera e propria.
Il blocco Formule ci porta direttamente al blocco “Ask a question” (Fai una domanda). Anziché un testo fisso, il campo “question text” (testo della domanda) del bot è popolato con la variabile @response che salva e mostra la risposta del GPT, qualunque essa sia, in quella fase del ciclo della conversazione. L’utente ha modo di rispondere con le proprie parole, e la sua risposta viene salvata nella variabile @user_text.
In teoria potremmo tornare subito al blocco Webhook. Ciò, tuttavia, creerebbe una conversazione che non ha mai fine. Ecco perché, prima di ricollegarci al Webhook e chiudere il ciclo, dobbiamo dare al bot una via di uscita se possiede tutte le informazioni di cui ha bisogno.
8. Impostare una condizione per chiudere la conversazione una volta raggiunto l’obiettivo
Un modo semplice per chiudere la conversazione e raccogliere tutti i dati è utilizzare il blocco Conditional Logic (Logica condizionale).
Dato che nel nostro prompt abbiamo detto al GPT di dire, “Un operatore si occuperà del problema” una volta in possesso di tutte le informazioni necessaria, il modello usa questa risposta come una condizione che permette al bot di uscire dal ciclo:
In questo modo, se il bot IA dice che un operatore si metterà in contatto con l’utente, il flusso interpreta questo come un segnale che tutte le informazioni necessarie sono state raccolte e prende l’uscita verde verso il flusso di uscita EXIT. Se la variabile @response non contiene la parola “Operatore”, prenderà l’uscita rosa e riporterà la conversazione sul blocco Webhook per ripetere il ciclo.
9. Definire il flusso di uscita
Se vuoi costruire questo flusso da zero, la cosa più semplice da fare qui è copiare il blocco Webhook che avevi impostato in precedenza, andare su “Customize Body” e, semplicemente, aggiornare il prompt per fornire nuove istruzioni (puoi fare riferimento al webinar, al minuto 54:20).
Ciò detto, dato che il modello che stiamo utilizzando è stato creato per semplificarti la vita, se non vuoi puoi tranquillamente evitare di doverti occupare del blocco Webhook. Abbiamo usato lo stesso trucco di prima, utilizzando il blocco “Set a Variable” in modo che tu non ti debba occupare dei campi Webhook se non hai familiarità con essi.
Se vuoi modificare il prompt finale, apri l’editor “Set a Variable” e applica le modifiche al campo “Type the value”.
All’interno del Webhook, questo è il prompt:
Dato che include la variabile @final_prompt anziché un testo prefissato, qualsiasi modifica apporti al prompt all’interno del blocco “Set a Variable” si riflette nel sistema immediatamente.
La risposta finale del GPT include un riepilogo dell’incidente con tutte le informazioni del cliente necessarie a risolverlo.
10. Invio delle informazioni al database
L’ultima cosa che resta da fare è inviare i dati raccolti al database. Il modello utilizza la nostra integrazione nativa Airtable:
Per imparare come utilizzare Airtable, puoi fare riferimento al breve tutorial riportato di seguito:
Comunque puoi anche sostituire il blocco Airtable con il blocco di integrazione GoogleSheets o altro.
Una volta inviate le informazioni al database prescelto, il bot saluta e chiude la chat.
11. Evitare gli errori più comuni
Costruire un bot è un’avventura e spesso è difficile fare attenzione a tutti i dettagli. Per cui, se si verificano degli errori, verifica che:
- i nomi delle variabili siano scritti in modo corretto
- nessuna delle variabili sia stata cancellata per errore
- stai usando la chiave API corretta
- stai usando il modello GPT corretto
- i tuoi token non sono scaduti.
Questo è tutto.
Ora disponi di un chatbot WhatsApp basato su GPT senza aver dovuto scrivere una singola linea di codice!
In conclusione
Ci auguriamo che tu abbia trovato questo articolo interessante nel tuo percorso verso il diventare un esperto di GPT e nella creazione di bot che possono migliorare l’esperienza utente e far crescere il tuo business.
Se sei interessato in altre risorse che illustrano come usare il GPT in collaborazione con il builder Landbot, puoi consultare la nostra base della conoscenza. Come sempre, tieni d’occhio il nostro blog per ulteriori consigli e tutorial!