Corso
I chatbot sensibili al contesto tengono traccia degli input precedenti dell’utente e li collegano alle interazioni recenti. In questo modo possono dialogare in stile conversazionale e migliorare l’esperienza utente. Amazon Lex è un chatbot sensibile al contesto della suite Amazon Web Services (AWS). È stato rilasciato nel 2017 e una versione migliorata, Lex V2, è stata lanciata nel 2021.
In questo tutorial presento i concetti di base di AWS Lex V2 e mostro come usarlo. Vedremo come configurare Lex, creare il tuo primo chatbot Lex e interfacciarlo con backend esterni. Fornirò anche una panoramica sull’integrazione di Lex con piattaforme di terze parti come siti web e app di messaggistica.
Che cos’è Amazon Lex?
Amazon Lex è un motore conversazionale basato sull’IA offerto da AWS. Lex accetta input dell’utente sotto forma di voce e testo. Lo sviluppatore specifica il flusso di conversazione. In base a questo, Lex gestisce il dialogo rispondendo agli input dell’utente. L’interfaccia conversazionale può quindi essere distribuita come voice bot, app web, piattaforma di chat (come Slack o Facebook Messenger), ecc. Lex è usato anche per costruire Amazon Alexa.
Lex combina due funzionalità di base: natural language understanding (NLU) e riconoscimento vocale automatico (ASR). Permette a sviluppatori senza competenze di deep learning di creare interfacce conversazionali per chatbot, assistenti virtuali e simili.
Essendo un prodotto Amazon, si integra con altri servizi AWS come:
- Amazon Cognito (per la gestione delle identità)
- Amazon CloudWatch (per monitorare il servizio)
- DynamoDB (per il database di backend)
- Amazon Lambda (per connettersi a fonti dati esterne come Salesforce e HubSpot), ecc.
Queste integrazioni facilitano il deployment e la scalabilità del servizio di IA conversazionale.
Configurare Amazon Lex
In questa sezione ti mostro come configurare Amazon Lex.
Nota che l’interfaccia utente di AWS cambia spesso. Quindi, l’aspetto e i testi di varie sezioni e titoli nelle istruzioni e negli screenshot possono variare nel tempo o da regione a regione.
Passaggio 1: Accedi alla console AWS
Presumo che tu abbia già un account AWS. In caso contrario, segui le istruzioni sulla pagina di registrazione AWS e crea un nuovo account.
In questa guida usiamo la console AWS per configurare e usare Lex. Inserisci le tue credenziali AWS per accedere alla console AWS Lex e atterrare sulla home page di Lex.
Passaggio 2: Crea un nuovo bot
- Per creare un nuovo bot, visita la console Amazon Lex.
- Seleziona Get Started.
Questo ti porta alla homepage Bots (mostrata sotto). Qui trovi l’elenco dei bot che hai già creato.

Homepage Amazon Lex Bots.
- In questa pagina, seleziona Create Bot.
Si apre la pagina di configurazione per un nuovo bot. Mostra due metodi per creare bot: Traditional e Generative AI.

Crea un nuovo bot.
Vogliamo imparare il processo di configurazione dei bot. Quindi scegli il metodo Traditional e parti da un bot vuoto.
- Bot name: Assegna al bot un nome e una descrizione. In questo articolo creiamo un semplice bot chiamato “CabBookBot” per prenotare un taxi.
- IAM permissions: Scegli il ruolo corretto per gestire autorizzazione e autenticazione del bot.
- Se hai già creato bot in passato, scegli dal menu a discesa dei ruoli esistenti.
- Se è il tuo primo bot, scegli “Create a role with basic Amazon Lex permissions”.
- COPPA: Se questo bot è destinato a bambini e minori, specifica che è soggetto al Children’s Online Privacy Protection Act (COPPA). Noi scegliamo “No”.
- Idle session timeout: I bot devono ricordare i messaggi precedenti dell’utente per mantenere il “contesto” durante la conversazione. Se un utente non risponde per un po’, si presume che non stia più usando il bot e si azzera il contesto per un nuovo utente. Lascia il valore predefinito.
Non è necessario modificare le impostazioni avanzate opzionali; passa direttamente alla sezione successiva.
Devi anche impostare la/le lingue del bot perché i bot Lex si basano sull’elaborazione del linguaggio naturale (NLP).
- In questo esempio usiamo la lingua predefinita English (US).
- Mantieni le impostazioni predefinite e seleziona Done.
Verrai quindi indirizzato alla pagina Intents, che configureremo nella prossima sezione.
Creato un bot di base, ora spiego come configurarlo per il nostro caso d’uso: prenotare un taxi.
Passaggio 3: Configura gli intent
Come suggerisce il nome, gli intent rappresentano l’intenzione dell’utente o l’obiettivo della conversazione. Per esempio, l’utente potrebbe voler prenotare un hotel o un volo. Ogni bot può soddisfare più obiettivi.
Forniti alcuni testi di esempio (chiamati espressioni di esempio) per ciascun intent, Lex usa l’NLP per riconoscere e associare l’input dell’utente all’intent corretto in base a queste espressioni. Ad esempio, un bot per prenotare taxi può avere espressioni di esempio come “Voglio prenotare un taxi”, “prenotami un taxi da X a Y in questa data”, ecc.
Dopo aver selezionato Done nella pagina di creazione del bot del passaggio precedente, verrai portato alla pagina in cui puoi creare un nuovo intent chiamato NewIntent.
Nella pagina dell’Intent:
- In alto trovi il Conversation Flow. Illustra il flusso e i messaggi di esempio per ogni fase della conversazione.
- Aggiorna il nome dell’intent con qualcosa di significativo, ad esempio “CabBookIntent”, e fornisci una descrizione pertinente.
Passaggio 4: Aggiungi espressioni di esempio
Lex ha bisogno di alcune espressioni di esempio per ogni intent per riconoscere se l’esigenza dell’utente corrisponde all’intent attuale.
- Nella pagina Intent, scorri fino alla sezione Sample utterances.
- Passa l’editor a Plain Text.
- Aggiungi alcune espressioni di esempio, una per riga, ad esempio:
- Voglio prenotare un taxi
- Prenotami un taxi
- Devo fare una prenotazione per un taxi

Espressioni di esempio.
- Aggiungi una Initial response, ad esempio, “Ok, ti aiuterò a prenotare un taxi”, per confermare la richiesta dell’utente.
Creare un flusso di conversazione
I bot Lex seguono una struttura di conversazione predefinita. Il conversation flow descrive e specifica i componenti della conversazione. In questa sezione spiego come progettare il dialogo per comunicare con l’utente e ottenere le informazioni necessarie a soddisfare la sua richiesta.
Passaggio 1: Aggiungi slot per acquisire l’input dell’utente
Il bot deve chiedere all’utente le informazioni rilevanti. Gli slot contengono le informazioni di cui il bot ha bisogno per soddisfare la richiesta dell’utente. Ad esempio, il bot per prenotare un taxi riceve come valori degli slot la città di partenza e di destinazione e la data del viaggio.

Aggiungi slot agli intent.
Per ogni slot devi specificare questi parametri:
- Slot name: Il bot usa questo nome come segnaposto per il valore dello slot. Ad esempio, puoi configurare la risposta del bot come “Vuoi viaggiare da {SourceCity}” e sostituirà automaticamente il valore dello slot
SourceCityinserito dall’utente. - Slot type: Come le variabili in programmazione, gli slot di Lex possono essere di vari tipi. Esistono molti tipi di slot predefiniti, come
AMAZON.City,AMAZON.Date, ecc. Puoi anche aggiungere tipi di slot personalizzati (discusso più avanti). - Prompt: Fornisci un modello di testo che il bot può usare per chiedere all’utente (prompt) il valore di ciascuno slot.
- Seleziona Add Slot e aggiungi i seguenti slot, marcandoli come obbligatori:
|
Slot name |
Slot type |
Prompt |
|
SourceCity |
AMAZON.City |
Da quale città partirai? |
|
DestinationCity |
AMAZON.City |
Verso quale città viaggerai? |
|
TravelDate |
AMAZON.Date |
In quale data viaggerai? |
- Aggiungi alcune espressioni aggiuntive che catturino direttamente i valori degli slot. Ad esempio:
- Prenota un taxi il {TravelDate} da {SourceCity} a {DestinationCity}
- Prenota un taxi da {SourceCity} a {DestinationCity} per {TravelDate}
Slot personalizzati
I tipi di slot integrati non sono sempre sufficienti per tutti i casi d’uso. Ad esempio, un servizio di prenotazione taxi potrebbe avere un tipo di slot per il tipo di auto (utilitaria, berlina, station wagon, SUV, ecc.) desiderato dall’utente.
Per aggiungere uno slot personalizzato:
- Vai a Slot types dal menu nella colonna di sinistra:
- CabBookBot > Bot versions > Draft version > All languages > English (US) > Slot types).
- Aggiungi un nome (ad esempio
CabType) e una descrizione per il nuovo tipo di slot. - Scegli uno dei due tipi di valori dello slot:
- Expand: Fornisci alcuni valori di esempio per lo slot e Lex li usa come esempi per apprendere nuovi possibili valori. Ad esempio, data una lista di cognomi, Lex adatta il tipo di slot per accettare cognomi simili non elencati esplicitamente.
- Restrict: Lo slot accetta solo valori dall’elenco che fornisci. Non apprenderà nuovi valori.
In questo caso abbiamo alcuni tipi di taxi predeterminati. Quindi, limitiamo i valori dello slot a questi tipi.
- Puoi anche fornire valori alternativi per ciascun valore. Ad esempio, per il tipo di taxi,
Limoè un valore accettabile perLimousine.

Slot personalizzati.
- Seleziona Save Slot type. Il nuovo tipo di slot sarà disponibile quando aggiungi uno slot all’intent.
Passaggio 2: Configura prompt e gestione degli errori
Quando l’utente fornisce una risposta non valida a un prompt che richiede il valore di uno slot, Lex ripete il prompt. Se l’utente non riesce ripetutamente a fornire una risposta corretta (come un nome di città valido), la sessione termina.
Configura Lex per mostrare un messaggio di errore (prima di terminare la sessione) se l’utente non riesce ripetutamente a fornire un valore di slot valido:
- Seleziona un singolo slot e apri le Advanced options di quello slot.
- Scorri nelle opzioni avanzate fino alla sezione Slot capture: failure response.
- Fornisci una risposta appropriata per input non validi. Ad esempio, se l’utente inserisce ripetutamente una città non riconosciuta, il bot può rispondere: “Spiacente, non serviamo quella città”.

Gestione errori e failure response.
Tutti i bot hanno un FallbackIntent, che viene invocato quando l’input dell’utente non corrisponde agli intent esistenti. Poiché questo intent è invocato come predefinito, le sue espressioni non possono essere personalizzate.
- Specifica una risposta di chiusura significativa con il
FallbackIntente termina la conversazione.

Risposta di chiusura.
Passaggio 3: Conferma, fulfillment e chiusura
Conferma l’intent dell’utente dopo aver ottenuto i valori appropriati per gli slot e prima di soddisfare la richiesta.
- Usa la sezione Confirmation per fornire un prompt di conferma.
- Nota il piccolo interruttore per il dialogo di conferma. Attivalo.
È comune includere i valori degli slot nel prompt di conferma. Ad esempio: “Confermi (sì o no) di voler effettuare una prenotazione da {SourceCity} a {DestinationCity} il {TravelDate}?”
- Fornisci una Decline response nel caso in cui l’utente risponda negativamente al prompt di conferma. Ad esempio: “Ok, non effettueremo questa prenotazione”.

Prompt di conferma.
La fulfillment response indica all’utente che il bot sta iniziando a soddisfare la sua richiesta (prenotazione del taxi).
- Nella sezione Fulfillment, fornisci un altro messaggio dopo aver soddisfatto con successo la richiesta. Ad esempio, “Ok, abbiamo effettuato questa prenotazione”.
La risposta di chiusura è il messaggio finale inviato all’utente. Ad esempio, “Grazie per aver viaggiato con noi. Buon viaggio!”
- Aggiorna le risposte e seleziona Save intent.

Risposte di fulfillment e chiusura.
Testare il tuo bot Amazon Lex
Ora che abbiamo creato il bot e la sua struttura di conversazione, possiamo testarlo!
Passaggio 1: Test nella console Lex
- Trova i pulsanti Build e Test in alto nella pagina Intents.
- Build il bot. Devi ricompilare il bot dopo ogni modifica.
- Seleziona Test per testare il bot nella console Lex.
- Inserisci messaggi pertinenti nella finestra di chat pop-up e rispondi ai prompt del bot.

Test del bot Amazon Lex.
Errori di configurazione comuni
Alcune sezioni, come Confirmation, Fulfillment e Closing response, sono in linea di principio opzionali. Per attivare una sezione, abilita l’interruttore.
In alcuni casi, abilitare una sezione o una risposta abilita automaticamente una funzione Lambda per quella sezione. Se una sezione specifica ha l’interruttore Lambda impostato su “on” ma non c’è alcuna funzione Lambda associata, otterrai un errore come il seguente:
Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.
L’errore sopra proviene dalla sezione Fulfillment. Per risolverlo, vai alle advanced settings nella sezione pertinente e deseleziona l’opzione per usare una funzione Lambda.
Un errore simile si verifica quando il flusso è configurato in modo errato. Ad esempio, considera questo messaggio di errore in fase di build:
'ElicitSlot' next step at 'InitialResponse:CodeHook:Success' in intent 'CabBookIntent' contains invalid slotToElicit setting. slotToElicit must be a required Slot within the intent. Change the slot name in slotToElicit and try your request again.
Per risolvere questo errore, vai alle Advanced options della Initial response. Nota che il toggle Dialog Code hook è attivo. Tuttavia, a questo punto non abbiamo ancora abilitato né configurato le funzioni Lamba per inizializzare la conversazione. Disattiva il code hook e aggiorna il bot; la build dovrebbe andare a buon fine.

Opzioni avanzate per la risposta iniziale.
Passaggio 2: Test con la voce (opzionale)
I bot Lex funzionano di default sia con testo che con voce.
- Premi l’icona del microfono nella finestra di chat per comunicare con la voce.
- Il testo segnaposto nel campo di input cambia in “Listening…”.
- Pronuncia il tuo intent, ad esempio “Voglio prenotare un taxi”.
- Premi la spunta a destra del campo di input testuale.
- Lex trascriverà brevemente l’input vocale e risponderà con audio.
Amazon Polly converte il testo in parlato naturale. È usato in applicazioni vocali come lettori di notizie, giochi, bot, ecc., per generare voce umana a partire dal testo. Dal 2021, Amazon Lex supporta Amazon Polly Neural Text-to-Speech (NTTS). Così, il bot Lex può generare direttamente risposte vocali naturali.
Per configurare la voce del bot:
- Nella homepage del bot, seleziona View languages.
- Scegli la lingua appropriata.
- Puoi anche selezionare la lingua pertinente sotto l’opzione All languages nel menu di sinistra.
- Nella sezione Language details seleziona Edit.
- Questo ti porta alla pagina Language.
- Nella sezione Voice puoi ascoltare vari campioni vocali e selezionare la voce text-to-speech preferita.
Definire un fulfillment con AWS Lambda
Nella pratica, un bot deve comunicare con altri servizi di backend. Ad esempio, un bot di prenotazione taxi deve inviare le informazioni del viaggio a un endpoint API e ricevere una risposta di successo. Le funzioni Lambda servono a questo.
Le funzioni AWS Lambda sono un modo per scrivere logica lato server ed eseguirla senza dover noleggiare esplicitamente un VPS o istanze di calcolo.
Per iniziare con le funzioni Lambda:
- Vai alla homepage AWS Lambda.
- Seleziona Create function.
- Per questo esempio, scegli l’opzione per creare una funzione da zero.
- Scegli
Python 3.x(3.13 al momento della scrittura) come linguaggio ex86_64come processore per eseguire la funzione. - Se è la tua prima funzione Lambda, crea un nuovo ruolo. Puoi anche usare uno dei ruoli esistenti se sai che ha le autorizzazioni corrette.
- Seleziona Create function.
- Inserisci il codice della funzione nella scheda Code sulla pagina web della specifica funzione Lambda.
Di seguito mostriamo una breve funzione Lambda che invia un messaggio di successo nella sezione Fulfillment:
import json
import urllib.request
def lambda_handler(event, context):
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
if event['invocationSource'] == 'FulfillmentCodeHook':
message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return response
Configura il bot per chiamare questa funzione Lambda:
- Vai alla home page del bot. Nel menu a sinistra, seleziona l’opzione Aliases (Deployment > Aliases).
- Per impostazione predefinita, dovrebbe esserci già un alias con il nome TestBotAlias.
- Seleziona l’alias.
- Nella pagina dell’alias, sotto le lingue, trova la lingua del bot. Questo esempio è in English(US).
- Seleziona la lingua.
- Nella pagina della lingua, trova la sezione Lambda function.
- Sotto source, seleziona il nome della tua funzione Lambda.
- La scelta predefinita per la versione è
$LATEST. Lasciala invariata. - Salva le modifiche.
In questo esempio, vogliamo usare la funzione Lambda nella fase di fulfillment:
- Nella pagina dell’Intent, vai alle Advanced options sotto la sezione Fulfillment .
- Nella sezione Fulfillment Lambda code hook, seleziona la casella Use a Lambda function for fulfillment.
- Salva le modifiche (seleziona Update options) alle opzioni di Fulfillment.
- Salva l’Intent.
- Vai alla pagina dell’Intent del bot, compila e testalo.
Ora la risposta proviene dalla funzione Lambda:

Test della funzione Lambda integrata con il bot Lex.
Distribuire il tuo bot Amazon Lex
Dopo aver creato e testato il bot Lex, siamo pronti a distribuirlo. Il deployment è un argomento complesso i cui dettagli dipendono dal singolo caso d’uso. In questa sezione fornisco una panoramica di vari metodi di distribuzione comuni.
Passaggio 1: Deployment su un’app web o mobile
Lex può essere integrato in app web e mobile usando l’API, l’SDK o librerie predefinite:
- CloudFormation: AWS CloudFormation è una soluzione di Infrastructure as code. Consente di usare file YAML per raggruppare, effettuare il provisioning, distribuire e gestire varie risorse AWS come un prodotto completo. CloudFormation offre template per integrare vari prodotti AWS come bucket S3, funzioni Lambda, bot Lex e altro. Usa il file template YAML di Lex per configurare il bot Lex come parte di un progetto CloudFormation.
- Integrazione su sito web: AWS ha reso disponibili un set di file loader Javascript e l’AWS SDK per caricare un bot in un sito web. Includono i file UI Lex predefiniti e una libreria loader per caricare il bot Lex. Il bot può essere integrato in un sito come pagina autonoma o in un iframe.
- App native mobile: AWS Amplify include gli strumenti per integrarsi con vari frontend mobile e web, come ReactJS / React Native, NextJS, Angular, Android, iOS e altro. La documentazione di Amplify spiega come configurare un bot Lex per funzionare con questi SDK.
- Lex API: Per avere il pieno controllo sulle interazioni e sull’interfaccia, puoi usare la Lex API. Con l’API puoi passare i messaggi dell’utente e del bot (reciprocamente) mantenendo il controllo dell’esperienza utente tramite la tua app. Lex offre due API:
- La Runtime API è usata per l’interazione con l’utente, come spiegato sopra.
- La Build API è usata per creare e configurare il bot Lex in modo programmatico invece che tramite la GUI.
I passaggi seguenti delineano come distribuire il chatbot come pagina web:
- Usa la Lex Web UI Loader library. Questa libreria crea un oggetto
ChatBotUiLoader, che include i costruttoriFullPageLoader()eIframeLoader. La funzioneload()di questi costruttori carica il bot nella pagina o nell’iFrame, rispettivamente. - Per caricare il bot sulla pagina web, specifica la configurazione del chatbot:
- L’ID del pool Cognito. Nota che ti serve un’identity pool AWS Cognito per connetterti al bot. Puoi creare un identity pool dalla console AWS Cognito. Devi collegare l’identity pool di Cognito al bot Lex.
- Il nome e i dettagli del bot Lex.
- Carica il bot usando la funzione
.load().
Lo snippet seguente mostra lo schema di una funzione JavaScript che distribuisce un bot Lex su una pagina web:
<!-- LexWebUi loader -->
<script src="./lex-web-ui-loader.js"></script>
<script>
// instantiate the loader
var lexWebUiLoader = new ChatBotUiLoader.FullPageLoader();
var chatbotUiconfig = {
cognito: {
poolId:
},
lex: {
initialText: 'How can I help you?',
botName: 'CabBookBot'
},
ui: {
toolbarTitle: 'Cab Booking Lex Bot',
toolbarLogo: ''
},
};
lexWebUiLoader.load(chatbotUiConfig)
.then(function () {
console.log('chatbot UI loaded');
})
.catch(function (error) {
console.error('chatbot UI failed to load', error);
});
</script>
Passaggio 2: Integrazione con piattaforme di messaggistica
Puoi integrare il bot Lex con servizi di messaggistica di terze parti come Facebook Messenger, Slack e Twilio SMS.
In questa sezione vediamo come integrare Lex con Facebook Messenger. Prima di iniziare, ti servono:
- Un account sviluppatore Facebook
- Una pagina aziendale su Facebook. Nota che l’app Facebook necessita dell’autorizzazione per usare la Messaging API con Lex. Solo le app esaminate e approvate da Facebook come app business verificate ottengono queste autorizzazioni.
Di seguito, delineo i passaggi per integrare il bot Lex con Facebook Messenger affinché gli utenti che scrivono alla tua pagina Facebook ricevano risposte dal bot.
- Crea una nuova app Business se non ne hai già una.
- Tra i casi d’uso dell’app, scegli Other.
- Seleziona Business come tipo di app.
- Puoi aggiungere vari prodotti Facebook a ciascuna app, come Messenger, Instagram, ecc. Aggiungi Messenger all’app e scegli Set up.
- Nella sezione Messenger API Setup:
- Collega la tua pagina Facebook aziendale a questa app.
- Genera un nuovo token (con il pulsante Generate ) per questa app. Copia questo token in un editor di testo.
- Nota il messaggio, “To send and receive messages, request pages_messaging permission.” Seleziona Request Permission per richiedere le autorizzazioni necessarie.
- Se la tua app non è ancora stata esaminata e approvata da Facebook, inviala per la revisione.
- Da App Settings nel menu di sinistra, scegli Basic.
- Seleziona Show sotto App Secret e copia il codice segreto in un file di testo.
Ora vai alla console Lex e scegli il bot che vuoi integrare con Messenger.
- Nel menu ad albero a sinistra, trova Channel integrations sotto Deployment.
- Seleziona Add Channel sotto Create Channel:
- Scegli Facebook sotto Platform.
- Scegli KMS Key sotto Identity policies.
- Sotto Integration configuration:
- Assegna un nome all’integrazione
- Scegli un alias (del bot Lex) che vuoi integrare con Messenger
- Scegli la lingua.
- Sotto Additional configuration:
- In Alias, inserisci una stringa per identificare l’app che chiama Lex. Ti servirà più avanti.
- In Page access token, inserisci il token di accesso che hai copiato su Facebook.
- In App secret key, inserisci la chiave segreta che hai copiato su Facebook.
- Usa il pulsante Add per creare il nuovo canale.
- Torna alla pagina Channel Integrations e seleziona il canale che hai creato.
- Copia l’URL sotto Endpoint nella sezione Callback URL.
Torna alla console sviluppatori Facebook e apri l’app che hai creato in precedenza.
- Dal menu a sinistra, sotto Messenger, scegli Messenger API Settings.
- In Callback URL, inserisci l’URL di callback che hai copiato nella console Lex.
- In Verify token, inserisci la stringa alias che hai immesso nella console Lex.
- Verifica e salva le modifiche.
- In Webhooks, scegli Add subscriptions. Seleziona messages nella finestra pop-up, quindi Save.
Ora puoi scrivere alla pagina Facebook usando le espressioni di esempio del bot Lex e ricevere risposte pertinenti.
Passaggio 3: Collegare Lex con AWS Lambda per un’interattività avanzata
Nella sezione precedente abbiamo scritto una semplice funzione Lambda per la sezione di fulfillment. Restituiva solo un messaggio di testo: “Lambda has placed your reservation.” In pratica, invieremmo il messaggio di successo dopo aver soddisfatto la richiesta.
Ad esempio, la funzione Lambda invia una richiesta con i dettagli della prenotazione dell’utente al backend API, che effettua la prenotazione e poi risponde all’utente in base alla risposta dell’API.
Ecco come procedere:
- L’oggetto JSON
slotsnella funzione Lambda contiene i valori degli slot. Studiane la struttura usando un code beautifier per estrarre i valori appropriati. - Lo snippet di codice seguente mostra come ottenere il valore dello slot
SourceCitye passarlo a un’API di backend che gestisce le prenotazioni. Aggiungi questo codice all’interno della funzionelambda_handler():
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
Ora mostro come effettuare richieste API dalla funzione Lambda. Per questo esempio, usiamo l’endpoint API fittizio di ASDFast. Questo servizio consente di inviare richieste HTTP(S) a un endpoint API e ricevere una risposta realistica.
- Con il codice seguente inviamo una richiesta
GETa questo endpoint. Personalizziamo quindi il messaggio che il bot invia all’utente in base al codice di stato della risposta della richiestaGET:
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
La funzione Lambda completa è mostrata di seguito:
import json
import urllib.request
def lambda_handler(event, context):
print("event - ", event)
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
print("intent - ", intent)
if event['invocationSource'] == 'FulfillmentCodeHook':
print("FulfillmentCodeHook")
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
#message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return responseBest practice per creare bot Amazon Lex
Dopo aver discusso i principi di base dei bot Lex e i loro usi pratici, presento alcune best practice per progettare i bot in questa sezione.
Progetta conversazioni chiare e concise
Assicurati che i tuoi percorsi conversazionali e gli slot siano precisi:
- Ogni intent deve concentrarsi su un singolo compito e ogni slot deve catturare il valore corrispondente a una singola variabile.
- Non rendere i testi dei prompt troppo prolissi. Mantieni i dialoghi brevi e vai rapidamente al risultato desiderato.
Questo approccio evita di confondere l’utente e possibili fraintendimenti da parte di Lex.
Usa tipi di slot e validazione
Il bot e i servizi di backend associati hanno bisogno di informazioni accurate sui requisiti dell’utente. L’uso dei tipi di slot corretti lo assicura.
- In generale, consiglio di usare gli slot integrati per i tipi di dati comuni, come
AMAZON.Dateper le date,AMAZON.Cityper le città e così via. Questi tipi di slot sono stati ampiamente testati e sono noti per essere compatibili con varie applicazioni. - Puoi progettare tipi di slot personalizzati in casi eccezionali. Assicurati che siano configurati e testati correttamente.
- Oltre a usare i tipi di slot corretti, verifica che l’utente abbia fornito le informazioni corrispondenti a tutti gli slot obbligatori. Ciò consente all’API di backend di soddisfare la richiesta dell’utente e garantisce un’esperienza fluida.
Abilita conversazioni multi-turn
Gli utenti possono trovare difficile inserire tutte le informazioni necessarie in un singolo messaggio, come “Prenota un viaggio per N persone alla data/ora Z da X a Y con tipo di taxi T.”
- Usa conversazioni multi-turn per garantire una migliore esperienza utente. Come molti strumenti moderni basati su modelli linguistici, Lex può mantenere il contesto in una conversazione multi-turn. Questo gli consente di collegare prompt e risposte precedenti alle interazioni recenti.
- Scomporre un prompt complesso in una serie di domande brevi migliora il flusso conversazionale.
Monitora e ottimizza le prestazioni
Per un bot in produzione è fondamentale monitorarne le prestazioni su varie metriche come:
- Numero totale di conversazioni.
- Durata media della conversazione.
- Turni medi per conversazione.
- Numero (e rapporto) di espressioni rilevate e mancate.
- Errori Lambda e altro.
Usa queste metriche per valutare le interazioni degli utenti e le prestazioni del bot:
- Nel menu a sinistra della pagina Bot, seleziona l’opzione Analytics.
- Accedi al Conversation dashboard, al Performance dashboard e alle metriche CloudWatch per studiare le prestazioni del bot.
AWS CloudWatch è uno strumento di monitoraggio per i servizi AWS. Raggruppa in tempo reale varie metriche di performance in un’unica pagina. Usa queste metriche per migliorare e mettere a punto le prestazioni del bot.
Conclusione
In questo articolo abbiamo esplorato Amazon Lex V2, il servizio di chatbot sensibile al contesto di AWS. Abbiamo seguito il processo di creazione di un bot di base, configurandolo per interagire con gli utenti e integrandolo con un’API di backend usando AWS Lambda. Inoltre, abbiamo discusso best practice e opzioni di deployment, incluso l’inserimento del bot in un sito web o in una pagina Facebook.
Se continui a imparare i servizi AWS, considera di ampliare le tue conoscenze con questi corsi:
- Ottieni basi solide sui servizi cloud AWS con il corso AWS Cloud Technology and Services.
- Impara a gestire in modo efficace sicurezza e costi AWS nel corso AWS Security and Cost Management.
- Esplora le interazioni programmatiche con AWS tramite Boto3, l’AWS SDK per Python, nel corso Introduction to AWS Boto in Python.
Sfruttando queste risorse, sarai ben attrezzato per creare, mettere in sicurezza e ottimizzare applicazioni basate su AWS, compresi i chatbot alimentati da Amazon Lex!
FAQs
Lex si integra con altri servizi AWS?
Sì, Lex si integra con servizi come Lambda, S3, CloudWatch e altri. Questo ti consente di ampliare le funzionalità del bot, integrarlo con altri prodotti e monitorarne le prestazioni.
Lex gestisce sia voce che testo?
Sì, per impostazione predefinita Lex gestisce sia input vocali che testuali. Lex supporta varie voci per le interazioni parlate. Puoi anche usare AWS Polly per sintetizzare la voce e inviare il file audio a Lex.
Posso usare un’interfaccia utente personalizzata per un bot Lex?
Sì, Lex dispone di una runtime API che può trasmettere l’input dell’utente al bot e ricevere le sue risposte. In questo modo, il bot Lex funge da backend per l’interfaccia personalizzata.
Posso usare Lex senza funzioni Lambda?
In linea di principio, sì. Puoi progettare l’intera conversazione all’interno di Lex. In pratica, però, un bot deve interfacciarsi con altri servizi API di backend che soddisfano la richiesta dell’utente (come prenotare un biglietto). Hai bisogno di AWS Lambda per interfacciarti con servizi esterni.
È possibile addestrare AWS Lex?
Entro certi limiti, sì. Il motore NLU di Lex può riconoscere input dell’utente simili alle espressioni di esempio. Può anche estendere i valori validi di un tipo di slot in base ad alcuni esempi. Tuttavia, non aspettarti lo stesso livello di addestrabilità di un LLM. Lex è progettato per interazioni limitate e specifiche del compito, non per conversazioni estese.


