Kurs
Amazon Lex Tutorial: Ein Anfängerleitfaden für KI-Chatbots
Kontextbewusste Chatbots behalten frühere Benutzereingaben im Auge und verknüpfen sie mit aktuellen Interaktionen. So können sie mit den Nutzern im Gesprächsstil interagieren und das Nutzererlebnis verbessern. Amazon Lex ist ein kontextbezogener Chatbot aus der Amazon Web Services (AWS) Suite. Es wurde 2017 veröffentlicht, und eine verbesserte Version, Lex V2, wurde 2021 auf den Markt gebracht.
In diesem Tutorial stelle ich die grundlegenden Konzepte von AWS Lex V2 vor und zeige, wie man es benutzt. Ich zeige dir, wie du Lex einrichtest und konfigurierst, deinen ersten Lex-Chatbot erstellst und eine Schnittstelle zu externen Backends herstellst. Außerdem gebe ich einen Überblick über die Integration von Lex in Drittanbieter-Plattformen wie Websites und Messaging-Apps.
Was ist Amazon Lex?
Amazon Lex ist eine KI-basierte Konversationsmaschine, die von AWS angeboten wird. Lex nimmt Benutzereingaben in Form von Sprache und Text entgegen. Der Entwickler legt den Gesprächsverlauf fest. Auf dieser Grundlage steuert Lex den Dialog, indem er auf Benutzereingaben reagiert. Die Konversationsschnittstelle kann dann als Voice Bot, Web-App, Chat-Plattform (wie Slack oder Facebook Messenger) usw. eingesetzt werden. Lex wird auch für die Entwicklung von Amazon Alexa verwendet.
Lex kombiniert zwei grundlegende Funktionen: natürliches Sprachverständnis (NLU ) und automatische Spracherkennung (ASR). Es ermöglicht Entwicklern ohne Deep Learning-Kenntnisse, konversationelle Schnittstellen für Chatbots, virtuelle Assistenten und Ähnliches zu erstellen.
Da es sich um ein Amazon-Angebot handelt, lässt es sich mit anderen AWS-Diensten wie:
- Amazon Cognito (für das Identitätsmanagement)
- Amazon CloudWatch (zur Überwachung des Dienstes)
- DynamoDB (für das Datenbank-Backend)
- Amazon Lambda (zur Verbindung mit externen Datenquellen wie Salesforce und HubSpot), etc.
Diese Integrationen erleichtern die Bereitstellung und Skalierung des KI-Dienstes.
Amazon Lex einrichten
In diesem Abschnitt zeige ich dir, wie du Amazon Lex einrichtest.
Beachte, dass sich die AWS-Benutzeroberfläche häufig ändert. Daher können sich das Layout und der Text verschiedener Abschnitte und Titel in den Anleitungen und Screenshots im Laufe der Zeit oder von Region zu Region ändern.
Schritt 1: Anmeldung bei der AWS-Konsole
Ich nehme an, du hast bereits ein AWS-Konto. Wenn nicht, folge den Anweisungen auf dere AWS-Anmeldeseite und registriere ein neues Konto.
In diesem Leitfaden verwenden wir die AWS-Konsole, um Lex einzurichten und zu nutzen. Gib deine AWS-Anmeldedaten ein, um dich an der AWS Lex-Konsole anzumelden und auf der Lex-Startseite zu landen.
Schritt 2: Einen neuen Bot erstellen
- Um einen neuen Bot zu erstellen, besuche die Amazon Lex Konsole.
- Wähle Anfangen.
Dies führt zur Homepage der Bots (siehe unten). Diese Seite zeigt die Liste der Bots, die du bereits erstellt hast.
Amazon Lex Bots Homepage.
- Auf dieser Seite wählst du Bot erstellen.
Dies führt zur Konfigurationsseite für einen neuen Bot. Er zeigt zwei Methoden zur Erstellung von Bots: Traditionell und Generativ KI.
Erstelle einen neuen Bot.
Wir wollen lernen, wie man Bots einrichtet und konfiguriert. Wähle also die Traditionelle Methode und beginne mit einem leeren Bot .
- Botname: Gib dem Bot einen Namen und eine Beschreibung. In diesem Artikel erstellen wir einen einfachen Bot namens "CabBookBot" um ein Taxi zu buchen .
- IAM-Berechtigungen: Wähle die richtige Rolle, um die Autorisierung und Authentifizierung für den Bot zu verwalten.
- Wenn du bereits Bots erstellt hast, wähle aus der Dropdown-Liste der vorhandenen Rollen.
- Wenn dies dein erster Bot ist, wähle "Eine Rolle mit grundlegenden Amazon Lex-Berechtigungen erstellen".
- COPPA: Wenn dieser Bot für Kinder und Minderjährige bestimmt ist, gib an, dass er dem Children's Online Privacy Protection Act (COPPA) unterliegt. Wir wählen "Nein".
- Timeout für Leerlaufsitzung: Bots müssen sich die vorherigen Nachrichten des Nutzers merken, um den "Kontext" während des gesamten Gesprächs aufrechtzuerhalten. Wenn ein Nutzer eine Zeit lang nicht geantwortet hat, gehen wir davon aus, dass er den Bot nicht mehr nutzt und setzen den Kontext für einen neuen Nutzer zurück. Belasse es bei dem Standardwert.
Du brauchst die optionalen erweiterten Einstellungen nicht zu aktualisieren; fahre einfach mit dem nächsten Abschnitt fort.
Du musst auch die Sprache(n) des Bots einrichten, denn Lex Bots basierenauf der Verarbeitung natürlicher Sprache (NLP).
- In diesem Beispiel verwenden wir die Standard Englisch (US) Sprache.
- Behalte die Standardeinstellungen bei und wähle Erledigt.
Dann gelangst du zur Seite Intents Seite, die wir im nächsten Abschnitt konfigurieren werden.
Nachdem ich einen einfachen Bot erstellt habe, erkläre ich nun, wie wir ihn für unseren gewünschten Anwendungsfall konfigurieren: die Buchung eines Taxis.
Schritt 3: Intentionen konfigurieren
Wie der Name schon sagt, stellen die Intents die Absicht des Nutzers oder das Ziel der Konversation dar. Zum Beispiel könnte der Nutzer ein Hotel oder einen Flug buchen wollen. Jeder Bot kann mehrere Ziele verfolgen.
Lex stellt einige Beispieltexte (sogenannte Beispieläußerungen) für jede Absicht zur Verfügung und nutzt NLP, um die Eingaben des Nutzers auf der Grundlage dieser Äußerungen zu rekonstruierengnieren und der richtigen Absicht zuzuordnen. Ein Taxibuchungs-Bot kann zum Beispiel Musteräußerungen haben wie "Ich möchte ein Taxi buchen", "Buchen Sie mir ein Taxi von X nach Y an diesem Datum" usw.
Nach der Auswahl von Erledigt auf der Bot-Erstellungsseite im vorherigen Schritt ausgewählt hast, gelangst du zu der Seite, auf der du einen neuen Intent namens NewIntent
erstellen kannst.
Auf der Seite "Absicht":
- Finde den Konversationsfluss oben. Dies veranschaulicht den Ablauf und die Beispieltextnachrichten für jeden Gesprächsschritt.
- Aktualisiere den Namen des Intents auf einen aussagekräftigen Namen, z. B. "CabBookIntent", und gib eine passende Beschreibung an.
Schritt 4: Äußerungsbeispiele hinzufügen
Lex braucht für jede Absicht ein paar Beispieläußerungen, um zu erkennen, ob das Bedürfnis des Nutzers mit der aktuellen Absicht übereinstimmt.
- Scrolle auf der Seite Intent zum Abschnitt Sample utterances.
- Schalte das Editorfenster auf Klartext um.
- Füge ein paar Beispielsätze hinzu, zum Beispiel einen in jeder Zeile:
- Ich möchte ein Taxi buchen
- Buch mir ein Taxi
- Ich muss ein Taxi reservieren
Beispielhafte Äußerungen.
- Füge eine erste Antwort hinzu, wie z.B. "Ok, ich helfe dir, ein Taxi zu buchen", um die Anfrage des Nutzers zu bestätigen.
Einen Gesprächsfluss schaffen
Lex Bots folgen einer vordefinierten Gesprächsstruktur. Der Gesprächsablauf umreißt und spezifiziert die Komponenten des Gesprächs. In diesem Abschnitt erkläre ich, wie man die Konversation gestaltet, um mit dem Nutzer zu kommunizieren und die Informationen zu erhalten, die zur Erfüllung seiner Anfrage benötigt werden.
Schritt 1: Slots hinzufügen, um Benutzereingaben zu erfassen
Der Bot muss den Nutzer nach relevanten Informationen fragen. Slots enthalten Informationen, die der Bot braucht, um die Anfrage des Nutzers zu erfüllen. Der Taxibuchungs-Bot erhält zum Beispiel den Start- und Zielort sowie das Fahrtdatum als Slot-Werte.
Füge Slots zu Intents hinzu.
Für jeden Slot musst du diese Parameter angeben:
- Slot-Name: Der Bot verwendet diesen Namen als Platzhalter für den Wert des Slots. Du kannst die Antwort des Bots zum Beispiel so konfigurieren: "Du willst von {Quellstadt} reisen" und er ersetzt automatisch den Wert des
SourceCity
Slots, den der Nutzer eingegeben hat. - Slot-Typ: Wie die Programmiervariablen können auch die Lex-Slots verschiedene Typen haben. Es gibt viele vorgefertigte Slot-Typen, wie z.B.
AMAZON.City
,AMAZON.Date
, etc. Du kannst auch benutzerdefinierte Slot-Typen hinzufügen (dazu später mehr). - Aufforderung: Stelle eine Textvorlage zur Verfügung, mit der der Bot den Nutzer nach dem Wert jedes Slots fragen kann (Prompt).
- Wähle Slot hinzufügen und füge die folgenden Slots hinzu, indem du sie nach Bedarf markierst:
Slot-Name |
Schlitz Typ |
Prompt |
SourceCity |
AMAZON.Stadt |
Aus welcher Stadt reist du an? |
ZielStadt |
AMAZON.Stadt |
In welche Stadt wirst du reisen? |
TravelDate |
AMAZON.Date |
An welchem Tag wirst du verreisen? |
- Füge ein paar zusätzliche Äußerungen hinzu, die direkt die Slot-Werte erfassen. Zum Beispiel:
- Buche ein Taxi am {Reisetermin} von {Quellstadt} nach {Zielstadt}
- Buche ein Taxi von {QuellStadt} nach {ZielStadt} für {Reisedatum}
Benutzerdefinierte Steckplätze
Die eingebauten Steckplatztypen sind nicht immer für alle Anwendungsfälle ausreichend. Ein Taxibuchungsdienst könnte zum Beispiel einen Slot-Typ für die Art des Fahrzeugs (Kleinwagen, Fließheck, Limousine, SUV usw.) haben, das der Nutzer wünscht.
Um einen benutzerdefinierten Steckplatz hinzuzufügen:
- Gehe zu Slot-Typen aus dem Menü in der linken Spalte:
- CabBookBot > Bot-Versionen > Entwurfsversion > Alle Sprachen > Englisch (US) > Slot-Typen).
- Füge einen Namen (z. B.
CabType
) und eine Beschreibung für den neuen Slot-Typ hinzu. - Wähle eine von zwei Arten von Slot-Werten:
- Erweitern: Du gibst ein paar Beispielwerte für den Steckplatz an, und Lex nutzt diese als Beispiele, um neue mögliche Werte zu lernen. Wenn du zum Beispiel eine Liste von Nachnamen angibst, passt Lex den Slot-Typ so an, dass er ähnliche Nachnamen akzeptiert, die du nicht explizit angegeben hast.
- Beschränke dich: Der Slot akzeptiert nur Werte aus der Liste, die du angegeben hast. Es wird keine neuen Werte lernen.
In diesem Fall haben wir ein paar vorgegebene Kabinentypen. Deshalb beschränken wir unsere Slot-Werte auf diese Typen.
- Du kannst auch alternative Werte für jeden Wert angeben. Für den Kabinentyp ist zum Beispiel
Limo
ein akzeptabler Wert fürLimousine
.
Benutzerdefinierte Steckplätze.
- Wähle Slot-Typ speichern. Der neue Slot-Typ wird verfügbar, wenn ein Slot zum Intent hinzugefügt wird.
Schritt 2: Konfiguriere die Eingabeaufforderung und Fehlerbehandlung
Wenn der/die Benutzer/in eine ungültige Antwort auf eine Aufforderung zur Eingabe eines Slot-Wertes gibt, wiederholt Lex die Aufforderung. Die Sitzung wird beendet, wenn der/die Nutzer/in wiederholt keine richtige Antwort gibt (z. B. einen gültigen Städtenamen).
Richte Lex so ein, dass eine Fehlermeldung ausgegeben wird (bevor die Sitzung beendet wird), wenn der Benutzer wiederholt keinen gültigen Slot-Wert angibt:
- Wähle einen einzelnen Slot aus und wähle Erweiterte Optionen für diesen Slot.
- Scrolle im Fenster mit den erweiterten Optionen nach unten, um den Abschnitt Slot-Erfassung: Fehlerreaktion zu sehen.
- Gib eine angemessene Antwort auf ungültige Eingaben. Wenn der Nutzer zum Beispiel wiederholt eine Stadt eingibt, die er nicht kennt, kann der Bot antworten: "Sorry, wir bedienen diese Stadt nicht.
Fehlerbehandlung und Fehlerreaktion.
Alle Bots haben eine FallbackIntent
, die aufgerufen wird, wenn die Eingabe des Nutzers nicht mit den vorhandenen Intents übereinstimmt. Da dieser Intent als Standard aufgerufen wird, können seine Äußerungen nicht angepasst werden.
- Gib eine aussagekräftige abschließende Antwort mit der
FallbackIntent
an und beende das Gespräch.
Abschließende Antwort.
Schritt 3: Bestätigung, Erfüllung und Abschluss
Bestätige die Absicht des Nutzers, nachdem du die entsprechenden Werte für die Slots erhalten hast und bevor du die Anfrage erfüllst.
- Verwende den Abschnitt " Bestätigung", um eine Bestätigungsaufforderung zu erstellen.
- Beachte, dass es einen kleinen Kippschalter für den Bestätigungsdialog gibt. Aktiviere sie.
Es ist üblich, die Slot-Werte in die Bestätigungsaufforderung aufzunehmen. Zum Beispiel: "Bitte bestätige (ja oder nein), dass du am {Reisedatum} eine Buchung von {Quellstadt} nach {Zielstadt} vornehmen möchtest".
- Gib eine Ablehnungsantwort für den Fall, dass der/die Nutzer/in auf die Bestätigungsaufforderung negativ reagiert. Zum Beispiel: "Okay, wir werden diese Buchung nicht machen".
Bestätigungsaufforderung.
Die Erfüllungsantwort zeigt dem Nutzer an, dass der Bot mit der Bearbeitung seiner Anfrage (Buchung des Taxis) beginnt.
- Gib im Abschnitt " Erfüllung" eine weitere Nachricht an, nachdem die Anfrage erfolgreich erfüllt wurde. Zum Beispiel: "Okay, wir haben diese Buchung vorgenommen."
Die abschließende Antwort ist die letzte Nachricht, die an den/die Nutzer/in gesendet wird. Zum Beispiel: "Danke, dass du mit uns gereist bist. Ich wünsche dir eine gute Reise!".
- Aktualisiere die Antworten und wähle Absicht speichern.
Erfüllung und abschließende Antworten.
Teste deinen Amazon Lex Bot
Jetzt, wo wir den Bot und seine Gesprächsstruktur erstellt haben, können wir ihn testen!
Schritt 1: Test in der Lex-Konsole
- Oben auf der Absichtsseite findest du die Schaltflächen Erstellen und Testen.
- Baue den Bot. Du musst den Bot nach jeder Änderung neu erstellen.
- Wähle Test, um den Bot in der Lex-Konsole zu testen.
- Gib relevante Nachrichten in das Pop-up-Chatfenster ein und antworte auf die Aufforderungen des Bots.
Teste den Amazon Lex-Bot.
Häufige Konfigurationsfehler
Einige der Abschnitte, wie Bestätigung, Erfüllung und abschließende Antwort, sind im Prinzip optional. Um einen Abschnitt zu aktivieren, aktiviere den Kippschalter.
In manchen Fällen wird durch die Aktivierung eines Abschnitts oder einer Antwort automatisch eine Lambda-Funktion für diesen Abschnitt aktiviert. Wenn in einem bestimmten Abschnitt der Schalter für die Lambda-Funktion auf "on" gesetzt ist, es aber keine zugehörige Lambda-Funktion gibt, bekommst du eine Fehlermeldung wie die folgende:
Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.
Der obige Fehler stammt aus dem Abschnitt " Erfüllung". Um das Problem zu beheben, gehe zu den erweiterten Einstellungen im entsprechenden Abschnitt und entferne das Häkchen bei der Option zur Verwendung einer Lambda-Funktion.
Ein ähnlicher Fehler tritt auf, wenn der Fluss falsch konfiguriert ist. Sieh dir zum Beispiel diese Fehlermeldung in der Erstellungsphase an:
'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.
Um diesen Fehler zu beheben, gehst du in den erweiterten Optionen für die erste Antwort. Beachte, dass der Schalter Dialog Code hook aktiv ist. In diesem Stadium haben wir jedoch noch keine Lamba-Funktionen aktiviert und sie nicht für die Initialisierung der Konversation konfiguriert. Deaktiviere den Code-Hook und aktualisiere den Bot; er sollte jetzt normal gebaut werden.
Erweiterte Optionen für die erste Reaktion.
Schritt 2: Test mit Stimme (optional)
Lex Bots funktionieren standardmäßig sowohl mit Text als auch mit Sprache.
- Drücke das Mikrofon-Symbol im Chat-Fenster, um per Sprache zu kommunizieren.
- Der Platzhaltertext im Eingabefeld ändert sich in "Zuhören...".
- Sprich deine Absicht aus, zum Beispiel: "Ich möchte ein Taxi buchen."
- Drücke das Häkchen rechts neben dem Texteingabefeld.
- Lex transkribiert die Spracheingabe kurz und antwortet mit Audio.
Amazon Polly wandelt Text in natürliche Sprache um. Sie wird in sprachbasierten Anwendungen wie Newsreadern, Spielen, Bots usw. eingesetzt, um aus Text menschenähnliche Sprache zu erzeugen. Seit 2021 unterstützt Amazon Lex Amazon Polly Neural Text-to-Speech (NTTS). So kann der Lex-Bot direkt natürlich klingende Sprachantworten erzeugen.
So konfigurierst du die Stimme des Bots:
- Wählen Sie auf der Startseite des Bots Sprachen anzeigen.
- Wähle die passende Sprache.
- Du kannst die entsprechende Sprache auch unter dem Menüpunkt Alle Sprachen im linken Menü auswählen.
- In der Details zur Sprache wählst du bearbeiten..
- Dies führt dich zur Sprache Seite.
- Unter der Stimme kannst du dir verschiedene Sprachproben anhören und die bevorzugte Text-to-Speech-Stimme auswählen.
Fulfillment mit AWS Lambda definieren
In der Praxis muss ein Bot mit anderen Backend-Diensten kommunizieren. Ein Taxibuchungs-Bot muss zum Beispiel die Fahrtinformationen an einen API-Endpunkt senden und eine erfolgreiche Antwort erhalten. Lambda-Funktionen helfen dabei.
AWS Lambda-Funktionen sind eine Möglichkeit, serverseitige Logik zu schreiben und sie auszuführen, ohne explizit einen VPS oder Recheninstanzen mieten zu müssen.
Um mit Lambda-Funktionen zu beginnen:
- Gehe zur AWS Lambda Homepage.
- Wähle Funktion erstellen.
- Für dieses Beispiel wählst du die Option, eine Funktion von Grund auf zu erstellen.
- Wähle
Python 3.x
(3.13 zum Zeitpunkt des Schreibens) als Sprache undx86_64
als Prozessor, um die Funktion auszuführen. - Wenn dies deine erste Lambda-Funktion ist, erstelle eine neue Rolle. Du kannst auch eine der vorhandenen Rollen verwenden, wenn du weißt, dass sie die richtigen Berechtigungen hat.
- Wähle Funktion erstellen.
- Gib den Code der Funktion in das Feld Code auf der Webseite der jeweiligen Lambda-Funktion ein.
Im Folgenden zeigen wir eine kurze Lambda-Funktion, die eine Erfolgsmeldung in der Erfüllungsgrad Abschnitt sendet:
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
Konfiguriere den Bot so, dass er diese Lambda-Funktion aufruft:
- Gehe zur Startseite des Bots. Wähle im linken Menü die Option Aliase (Einsatz > Aliase) .
- Standardmäßig sollte er bereits einen Alias mit dem Namen TestBotAlias.
- Wähle den Alias aus.
- Auf der Alias-Seite findest du unter Sprachen die Sprache des Bots. Dieses Beispiel ist auf Englisch(US).
- Wähle die Sprache aus.
- Auf der Sprachenseite findest du den Abschnitt Lambda-Funktion.
- Wähle unter Quelle den Namen deiner Lambda-Funktion aus.
- Die Standardauswahl für die Version ist
$LATEST
. Lass es unverändert. - Speichere die Änderungen.
In diesem Beispiel wollen wir die Lambda-Funktion in der Erfüllungsphase verwenden:
- Gehen Sie auf der Seite Intent zu Erweiterte Optionen unter dem Menüpunkt Erfüllungsgrad Abschnitt.
- Unter dem Abschnitt Erfüllungs-Lambda-Code-Hakenmarkierst du das Kontrollkästchen mit der Bezeichnung Eine Lambda-Funktion für Fulfillment verwenden.
- Speichern Sie die Änderungen (wählen Sie Optionen aktualisieren) an den Erfüllungsoptionen.
- Speichere die Absicht.
- Gehe auf die Intent-Seite des Bots, baue ihn und teste ihn.
Jetzt kommt die Antwort von der Lambda-Funktion:
Testen der in den Lex-Bot integrierten Lambda-Funktion.
Einsetzen deines Amazon Lex Bot
Nachdem wir den Lex-Bot erstellt und getestet haben, sind wir bereit, ihn einzusetzen. Der Einsatz ist ein komplexes Thema, dessen Besonderheiten vom jeweiligen Anwendungsfall abhängen. In diesem Abschnitt gebe ich einen Überblick über die verschiedenen gängigen Einsatzmethoden.
Schritt 1: Einsatz in einer Web- oder mobilen Anwendung
Lex kann über die API, das SDK oder vorgefertigte Bibliotheken in Web-Apps und mobile Apps integriert werden:
- CloudFormation: AWS CloudFormation ist eine Infrastructure-as-Code-Lösung. Es ermöglicht die Verwendung von YAML-Dateien, um verschiedene AWS-Ressourcen zu bündeln, bereitzustellen, zu verteilen und als Gesamtprodukt zu verwalten. CloudFormation hat Vorlagen für die Integration verschiedener AWS-Produkte wie S3-Buckets, Lambda-Funktionen, Lex-Bots und mehr. Verwende die Lex YAML-Vorlagendatei, um den Lex-Bot als Teil eines CloudFormation-Projekts zu konfigurieren.
- Website-Integration: AWS hat eine Reihe von Javascript-Loader-Dateien und das AWS SDK zur Verfügung gestellt, um einen Bot in eine Website zu laden. Dazu gehören die vorgefertigten Lex UI-Dateien und eine Loader-Bibliothek zum Laden des Lex-Bots. Der Bot kann als eigenständige Webseite oder als Iframe in eine Website integriert werden.
- Mobile native Apps: AWS Amplify enthält die Tools zur Integration mit verschiedenen mobilen und Web-Frontends wie ReactJS / React Native, NextJS, Angular, Android, iOS und mehr. In der Amplify-Dokumentation wird erklärt, wie du einen Lex-Bot für die Arbeit mit diesen SDKs konfigurierst.
- Lex API: Um die vollständige Kontrolle über die Interaktionen und die Schnittstelle zu haben, kannst du die Lex API verwenden. Mit der API kannst du die Nachrichten des Nutzers und des Bots (aneinander) weitergeben, während du die Kontrolle über das Nutzererlebnis in deiner App behältst. Lex bietet zwei APIs:
- Die Runtime API wird für die Benutzerinteraktion verwendet, wie oben erklärt.
- Die Build API wird verwendet, um den Lex Bot programmatisch zu erstellen und zu konfigurieren, anstatt die GUI zu verwenden.
Die folgenden Schritte zeigen dir, wie du den Chatbot als Webseite einrichten kannst:
- Verwende die Lex Web UI Loader Bibliothek. Diese Bibliothek erstellt ein Objekt
ChatBotUiLoader
, das die KonstruktorenFullPageLoader()
undIframeLoader
enthält. Die Funktionload()
dieser Konstruktoren lädt den Bot in die Seite bzw. den iFrame. - Um den Bot auf die Webseite zu laden, gibst du die Chatbot-Konfiguration an:
- Die Cognito-Pool-ID. Beachte, dass dueinen AWS Cognito Identitätspool brauchst, um dich mit dem Bot zu verbinden. Du kannst einen Identitätspool über die AWS Cognito-Konsole erstellen. Du musst den Cognito-Identitätspool mit dem Lex-Bot verknüpfen.
- Der Name und die Details des Lex-Bots.
- Lade den Bot mit der Funktion
.load()
.
Das folgende Snippet zeigt den Umriss einer JavaScript-Funktion, die einen Lex-Bot auf einer Webseite einsetzt:
<!-- 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>
Schritt 2: Integration mit Messaging-Plattformen
Du kannst den Lex-Bot in Messaging-Dienste von Drittanbieternwie Facebook Messenger, Slack und Twilio SMSintegrieren.
In diesem Abschnitt erfahren wir, wie du Lex in den Facebook Messenger integrieren kannst. Bevor du anfängst, brauchst du:
- Ein Facebook-Entwicklerkonto
- Eine Unternehmensseite auf Facebook. Beachte, dass die Facebook-App die Erlaubnis braucht, die Messaging-API mit Lex zu nutzen. Nur Apps, die von Facebook als verifizierte Business-Apps geprüft und genehmigt wurden, erhalten diese Berechtigungen.
Im Folgenden beschreibe ich die Schritte, um den Lex-Bot in den Facebook Messenger zu integrieren, damit Nutzer/innen, die deiner Facebook-Seite eine Nachricht senden, Antworten vom Bot erhalten können.
- Erstelle eine neue Business-App, wenn du noch keine hast.
- Unter den Anwendungsfällen der App wählst du Andere.
- Wähle Business als App-Typ aus.
- Du kannst verschiedene Facebook-Produkte zu jeder App hinzufügen, wie Messenger, Instagram usw. Füge den Messenger zur App hinzu und wähle Einrichten.
- In der Messenger API-Einrichtung Abschnitt:
- Verbinde deine Facebook-Unternehmensseite mit dieser App.
- Erstelle ein neues Token (mit der Schaltflächegenerieren ) für diese App. Kopiere dieses Token in einen Texteditor.
- Beachte die Nachricht: "Um Nachrichten zu senden und zu empfangen, fordere die Berechtigung pages_messaging an." Wähle Berechtigung anfordern, um die erforderlichen Berechtigungen anzufordern .
- Wenn deine App noch nicht von Facebook geprüft und genehmigt wurde, reiche sie zur Prüfung ein.
- Von App-Einstellungen in den linken Menüoptionen wählst du Basis.
- Wähle anzeigen. unter App Geheimnis und kopiere den Geheimcode in eine Textdatei.
Gehe nun zur Lex-Konsole und wähle den Bot aus, den du in den Messenger integrieren möchtest.
- Im linken Menübaum findest du Kanal-Integrationen unter . Einsatz.
- Wähle Kanal hinzufügen unter Kanal erstellen:
- Wähle Facebook unter Plattform.
- Wähle KMS-Schlüssel unter Identitätsrichtlinien.
- Unter Integration Konfiguration:
- Gib der Integration einen Namen
- Wähle einen Alias (des Lex-Bots), den du in den Messenger integrieren möchtest
- Wähle die Sprache.
- Unter Zusätzliche Konfiguration:
- Gib unter Alias eine Zeichenfolge ein, um die App zu identifizieren, die Lex aufruft. Du wirst diesen String später brauchen.
- Unter Zugriffstoken für die Seiteden Zugriffstoken ein, den du in Facebook kopiert hast.
- Unter App Geheimschlüsselden geheimen Schlüssel ein, den du in Facebook kopiert hast.
- Verwenden Sie die Hinzufügen Taste, um den neuen Kanal zu erstellen.
- Kehre zur Seite Kanalintegrationen zurück und wähle den von dir erstellten Kanal aus.
- Kopieren Sie die URL unter Endpunkt in die Rückruf-URL Abschnitt.
Gehe zurück zur Facebook-Entwicklerkonsole und öffne die App, die du zuvor erstellt hast.
- Im linken Menü, unter Messengerwähle Messenger-API-Einstellungen.
- Unter Rückruf-URLgibst du die Callback-URL ein, die du in der Lex-Konsole kopiert hast.
- Unter Token verifizierenden Alias-String ein, den du in der Lex-Konsole eingegeben hast.
- Überprüfe und speichere die Änderungen.
- Wählen Sie unter Webhooks die Option Abonnements hinzufügen. Wähle im Pop-up-Fenster aus und kl icke dann auf Speichern.
Du kannst der Facebook-Seite jetzt eine Nachricht mit den Beispieläußerungen des Lex-Bots schicken und erhältst relevante Antworten.
Schritt 3: Verbindung von Lex mit AWS Lambda für mehr Interaktivität
Im vorherigen Abschnitt haben wir eine einfache Lambda-Funktion für den Erfüllungsabschnitt geschrieben. Es kam nur eine Textnachricht zurück: "Lambda hat deine Reservierung vorgenommen." In der Praxis würden wir die Erfolgsmeldung senden, nachdem wir die Anfrage erfüllt haben.
Die Lambda-Funktion sendet zum Beispiel eine Anfrage mit den Buchungsdaten des Nutzers an die Backend-API, die die Buchung vornimmt und dem Nutzer dann auf Grundlage der API-Antwort antwortet.
So würdest du das oben beschriebene tun:
- Das JSON-Objekt
slots
in der Lambda-Funktion enthält die Slot-Werte. Untersuche die Struktur des Codes mit einem Code-Optimierer, um die passenden Werte zu extrahieren. - Der folgende Codeschnipsel zeigt, wie du den Slot-Wert für
SourceCity
abrufst und diesen Wert an eine Backend-API weitergibst, die die Reservierungen bearbeitet. Füge diesen Code innerhalb der Funktionlambda_handler()
ein:
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
Ich zeige jetzt, wie man API-Anfragen aus der Lambda-Funktion heraus stellt. Für dieses Beispiel verwenden wir den Dummy-API-Endpunkt bei ASDFast. Mit diesem Dienst kannst du HTTP(S)-Anfragen an einen API-Endpunkt senden und eine realistische Antwort erhalten.
- Mit dem folgenden Code senden wir eine
GET
Anfrage an diesen Endpunkt. Wir passen dann die Nachricht an, die der Bot an den Nutzer sendet, je nach Antwortstatuscode derGET
Anfrage:
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
Die vollständige Lambda-Funktion ist unten abgebildet:
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 response
Best Practices für die Erstellung von Amazon Lex Bots
Nachdem ich die Grundprinzipien von Lex Bots und ihre praktischen Einsatzmöglichkeiten erläutert habe, stelle ich in diesem Abschnitt einige Best Practices für die Gestaltung von Bots vor.
Klare und prägnante Gespräche gestalten
Achte darauf, dass deine Gesprächswege und Slots präzise sind:
- Jeder Intent muss sich auf eine einzige Aufgabe konzentrieren, und jeder Slot muss den Wert einer einzigen Variablen erfassen.
- Mache die Aufforderungstexte nicht zu wortreich oder ausführlich. Halte die Dialoge kurz und komme schnell zu dem gewünschten Ergebnis.
Dieser Ansatz vermeidet Verwirrung und mögliche Missverständnisse durch Lex.
Nutze Slot-Typen und Validierung
Der Bot und die zugehörigen Backend-Dienste brauchen genaue Informationen über die Nutzeranforderungen. Die Verwendung der richtigen Steckplatztypen stellt dies sicher.
- Im Allgemeinen empfehle ich, die eingebauten Slots für gängige Datentypen zu verwenden, z. B.
AMAZON.Date
für Datumsangaben,AMAZON.City
für Städte und so weiter. Diese Steckplatztypen wurden ausgiebig getestet und sind bekannt dafür, dass sie mit verschiedenen Anwendungen kompatibel sind. - In Ausnahmefällen kannst du eigene Slot-Typen entwerfen. Achte darauf, dass sie richtig konfiguriert und getestet sind.
- Vergewissere dich nicht nur, dass du die richtigen Slot-Typen verwendest, sondern auch, dass der/die Nutzer/in die entsprechenden Informationen für alle obligatorischen Slots angegeben hat. So kann die Backend-API die Anfrage des Nutzers erfüllen und für ein reibungsloses Nutzererlebnis sorgen.
Ermöglicht Gespräche mit mehreren Gesprächspartnern
Für die Nutzer ist es oft mühsam, alle notwendigen Informationen in eine einzige Nachricht einzugeben, wie z.B. "Buche eine Fahrt für N Personen am Datum/Uhrzeit Z von X nach Y im Taxi Typ T."
- Nutze Multi-Turn-Konversationen, um ein besseres Nutzererlebnis zu gewährleisten. Wie viele moderne, auf Sprachmodellen basierende Tools kann Lex den Kontext durch eine Konversation mit mehreren Runden aufrechterhalten. So kann es frühere Aufforderungen und Antworten mit aktuellen Interaktionen in Verbindung bringen.
- Wenn du eine komplexe Aufforderung in eine Reihe von kurzen Fragen unterteilst, verbessert das den Gesprächsfluss.
Leistung überwachen und optimieren
Für einen Bot in der Produktion ist es wichtig, seine Leistung anhand verschiedener Metriken zu überwachen, z. B:
- Gesamtzahl der Unterhaltungen.
- Durchschnittliche Gesprächsdauer.
- Durchschnittliche Runden pro Gespräch.
- Anzahl (und Verhältnis) der erkannten und verpassten Äußerungen.
- Lambda-Fehler und mehr.
Nutze diese Metriken, um die Nutzerinteraktionen und die Leistung des Bots zu messen:
- Im linken Menü auf der Seite Bot Seite, wähle die Analytik Option.
- Zugriff auf das Konversations-Dashboarddas Leistungs-Dashboardund CloudWatch-Metriken um die Leistung des Bots zu untersuchen.
AWS CloudWatch ist ein Überwachungstool für AWS-Dienste. Sie fasst verschiedene Leistungskennzahlen in Echtzeit auf einer einzigen Seite zusammen. Nutze diese Metriken, um die Leistung des Bots zu verbessern und zu optimieren.
Fazit
In diesem Artikel haben wir Amazon Lex V2, den kontextabhängigen Chatbot-Service von AWS, vorgestellt. Wir haben einen einfachen Bot erstellt, ihn so konfiguriert, dass er mit den Nutzern interagiert, und ihn mithilfe von AWS Lambda in eine Backend-API integriert. Außerdembesprachen wir bewährte Praktiken und Einsatzmöglichkeiten, wie z.B. die Einbettung des Bots auf einer Website oder einer Facebook-Seite.
Wenn du mehr über die AWS-Services lernen möchtest, solltest du dein Wissen mit diesen Kursen erweitern:
- Erhalte eine solide Grundlage in AWS-Cloud-Services mit dem Kurs AWS Cloud Technology and Services.
- Im Kurs AWS Sicherheits- und Kostenmanagement lernst du, wie du AWS Sicherheit und Kosten effektiv verwalten kannst.
- Erkunde die programmatischen AWS-Interaktionen mit Boto3, dem AWS SDK für Python, im Kurs Einführung in AWS Boto in Python.
Wenn du diese Ressourcen nutzt, bist du gut gerüstet, um AWS-basierte Anwendungen zu erstellen, zu sichern und zu optimieren, einschließlich Chatbots, die von Amazon Lex!
FAQs
Lässt sich Lex mit anderen AWS-Diensten integrieren?
Ja, Lex lässt sich mit Diensten wie Lambda, S3, CloudWatch und mehr integrieren. So kannst du die Funktionalität des Bots erweitern, ihn mit anderen Produkten integrieren und seine Leistung überwachen.
Kann Lex sowohl Sprache als auch Text verarbeiten?
Ja, Lex kann standardmäßig sowohl Sprach- als auch Texteingaben verarbeiten. Lex unterstützt verschiedene Stimmen für gesprochene Interaktionen. Du kannst AWS Polly auch verwenden, um Sprache zu synthetisieren und die Audiodatei an Lex zu senden.
Kann ich eine eigene Benutzeroberfläche für einen Lex-Bot verwenden?
Ja, Lex verfügt über eine Laufzeit-API, die die Benutzereingaben an den Bot übertragen und seine (des Bots) Antworten empfangen kann. Der Lex-Bot dient also als Backend für die benutzerdefinierte Benutzeroberfläche.
Kann ich Lex ohne Lambda-Funktionen verwenden?
Im Prinzip ja. Du kannst die Konversation komplett in Lex gestalten. In der Praxis muss ein Bot eine Schnittstelle zu anderen Backend-API-Diensten haben, die die Anfrage des Nutzers erfüllen (z. B. ein Ticket buchen). Du brauchst AWS Lambda als Schnittstelle zu externen Services.
Ist es möglich, AWS Lex zu trainieren?
In gewissem Umfang, ja. Die NLU-Engine von Lex kann Benutzereingaben erkennen, die den Beispieläußerungen ähneln. Es kann auch die gültigen Werte eines Slot-Typs anhand einiger Beispiele erweitern. Erwarte jedoch nicht das gleiche Niveau wie bei einem LLM-Studium. Lex ist für begrenzte berufsspezifische Interaktionen und nicht für längere Gespräche gedacht.
Arun ist ein ehemaliger Startup-Gründer, der Spaß daran hat, neue Dinge zu entwickeln. Derzeit erforscht er die technischen und mathematischen Grundlagen der Künstlichen Intelligenz. Er liebt es, sein Wissen mit anderen zu teilen, also schreibt er darüber.
Neben dem DataCamp kannst du seine Veröffentlichungen auf Medium, Airbyte und Vultr lesen.
Lerne mehr über AWS mit diesen Kursen!
Kurs
AWS Cloud Technology and Services Concepts
Kurs
AWS Security and Cost Management Concepts
Der Blog
Top 30 Generative KI Interview Fragen und Antworten für 2024

Hesam Sheikh Hassani
15 Min.
Der Blog
Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Nisha Arya Ahmed
20 Min.

Der Blog
Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn
Der Blog
2022-2023 DataCamp Classrooms Jahresbericht
Der Blog