Alexa Skills: technischer Überblick über Alexa
Alexa Skills: technischer Überblick. In diesem Artikel beschreibe ich die technische Architektur, die hinter Alexa steht, damit die Skills funktionieren.
Der folgende Artikel ist ein Auszug aus meinem Buch „Alexa Skills entwickeln“. Klicke auf das Bild, um das Buch auf Amazon ab 8,99€ zu kaufen. Es lohnt sich für Entwickler und die, die es werden wollen.
Contents
Alexa Skills: technischer Überblick über Alexa
Hier nun ein schematischer Überblick über Alexa. Der Alexa Cloud-service erhält eine Anfrage (request) und reagiert darauf mit einer response, die für den Skill zum Ausführungszeitpunkt ein event darstellt.
Skill Interface und Skill Service
Ein Custom Alexa Skill besteht aus dem Skill Service und dem Skill Interface. Vereinfacht könnte man sagen, das Frontend ist die Sprachschnittstelle (Voice user interface oder VUI), die über das Sprachinteraktionsmodell konfiguriert wird. Das Backend, der Skill service ist der Ort, an dem die Logik deiner Skills liegt und ausgeführt wird.
Andere Skill-Typen haben denselben Aufbau, er wird allerdings von Amazon bereitgestellt. Nur bei Custom Skills kann man dies selber festlegen.
Skill Interface und interaction model
Im Skill Interface kann der Programmierer, je nach Skilltyp, vieles festlegen. Das Skill Interface selbst besteht hauptsächlich aus dem Interaction model. Das ist die Datei, die alle intents, utterances, slots und optional Dialogtypen für Mehrfachdialoge eines Alexa-Skills enthält.
Somit legt sie die Logik des Skills und die Sprachschnittstelle fest, über die Benutzer mit dem Skill interagieren. Interaction models werden für jede Sprache einzeln in einer JSON-Datei festgelegt, die im Ordner models abgelegt wird. Somit liegen in /models bspw. bei einem Skill, der auf Deutsch und Englisch verfügbar ist, folgende Dateien:
- en-US.json
- de-DE.json
Das Interaction model kann auch Regeln zur Priorisierung von Nutzeranfragen beinhalten. Das Interaktionsmodell ist also wie die Abbildung einer grafischen Benutzeroberfläche für Alexa.
Das Interaktionsmodell-JSON wird unterteilt in drei Bestandteile:
languageModel: Das languageModel beinhaltet alle Intents für die Sprachanwendung. Intents sind einzelne Anforderungen eines Nutzers in einem Dialog, beispielsweise wenn der Nutzer in einem Ratespiel nach einer neuen Frage verlangt, oder das Programm beenden will, oder in einen anderen Modus gehen will. Intents sind ähnlich wie eine Methode in einem Programm, beispielsweise sind standardmässig die folgenden Intents in Custom Skills angelegt:
- CancelIntent
- HelpIntent
- StopIntent
- NavigateHomeIntent
- FallbackIntent
Jeder Intent enthält drei Felder, das Intent-Feld mit dem Namen, das Slot-Feld mit einem oder mehreren Slots und unter samples die sogenannten utterances (Äußerungen).
Utterances
Unter samples können eine oder mehrere Beispiel-Äußerungen auf diesen Intent gemappt werden, um ihn zu starten. So müssen die Nutzer nicht immer denselben Satz sagen, um genau diesen Intent auszulösen. Außerdem kennen die Nutzer den Satz nicht, also sollte hier eine möglichst breite Verteilung von natürlich klingenden Sätzen zu finden sein. Beispielsweise sagt nicht jeder „Sag mir…“, sondern auch „Gib mir…“, „Finde für mich…“, und so weiter.
Slots
sind die optionalen Arguments in einem Intent, also beispielsweise Namen, Mengen oder Daten, und werden durch ihren Datentyp definiert. Slots werden mit geschweiften Klammern und ihrem jeweiligen Namen referenziert. Meistens gibt man ihnen sprechende Namen, zum Beispiel {vacationPlace} für einen Skill zur Urlaubsplanung.
Es werden einige Slot-Typen und Intents von Amazon bereits ausgeliefert, man erkennt sie an dem vorgestellten Präfix AMAZON. Einige der bereits verfügbaren Slot-Typen sind zum Beispiel LITERAL (veraltet), NUMBER oder DATE.
Andere, selbst angelegte Slot-Typen sind im languageModel unter „types“ abgelegt, inklusive aller möglichen Ausprägungen für den Slot-Typ.
Diese Custom Slots helfen Alexa, die Präzision bei der Erkennung von Anfragen zu steigern. Beispiel könnten in einem Skill für U-Bahn Fahrpläne die Namen der Stationen sein. Allerdings bietet Amazon viele Slots bereits an, bei denen auch geografische Informationen beinhaltet sind. Es bietet sich dann immer an, die Amazon Slots zu verwenden. Auch können die slots von Amazon mit weiteren Einträgen erweitert werden, was im Kapitel 5 – häufige Fragen – gezeigt wird.
Auch beinhaltet languageModel den Invocation Name, er ist der eindeutige Name, mit der Skill aufgerufen wird.
Dialog:
Nach dem languageModel folgen die Elemente für den Dialog. Ein Dialog ist ein Gespräch des Benutzers mit Alexa, in dem Alexa Fragen stellt und der Benutzer antwortet und wird auch als session bezeichnet. Der Dialog ist an einen Intent gebunden, der den generellen Request des Nutzers repräsentiert. Alexa führt einen Dialog so lange, bis alle Slots, die vom Dialogmodell vorgegeben sind, gefüllt und bestätigt sind.
Daher werden im Dialog-Teil nur intents aufgeführt, bei denen es notwendig ist, slots zu füllen. Intents ohne slots könnten beispielsweise Anweisungen an Alexa sein. Bei intents mit slot(s) wird dann angegeben, ob eine Bestätigung (confirmation) oder ein Aufrufen (elicitation) notwendig ist. Außerdem werden hier Eingaben (prompts) für den jeweiligen intent referenziert, die Alexa dann konkret in diesem intent verwenden wird.
Prompts
Alexas Antworten (prompts) in einem Dialog werden im dritten Teil des JSONs angegeben und haben eine id zur Referenzierung im Dialogmodell. Alexa kann so nachfragen oder eine Antwort ausgeben. Man kann zudem für denselben Prompt zur Variation mehrere Varianten, also andere Sätze angeben.
Ein Beispiel für ein Interaktionsmodell ist die folgende Datei. Sie enthält (zur verkürzten Darstellung) einen Standard-Intent (StopIntent), zwei benutzerdefinierte Intents, ein Dialogmodell und einen benutzerdefinierten Slottyp. Die Klammern sind hier nicht zeilenweise abgeschlossen, sondern wurden zur Übersichtlichkeit teilweise in derselben Zeile eingerückt.
Das Handbuch zur Alexa Skill Entwicklung
Wenn der Artikel dich interessiert hat, sehe dir das Handbuch für Alexa Skill Entwicklung auf Amazon an, oder lies die Produktseite. Auf Github findest du alle Code-Beispiele.