Sprachsteuerung mit einer Alexa Skill Development
Wie kann man Alexa Skills mit Hilfe des Alexa Skills Kit (ASK) entwickeln?
Lange Zeit war es ein Traum, der nun endlich wahr wurde. Seit der Einführung des sprachgesteuerten Smart-Speakers „Amazon Echo“, kurz „Alexa“ genannt, ist es möglich, selbst komplexe Prozesse durch einfache Spracheingabe zu steuern. Neben einer Vielzahl von bereits implementierten Funktionen kann jeder mittels des kostenlos zur Verfügung gestellten Alexa Skills Kit (ASK) weitere Funktionen selbst hinzufügen.
Durch diese Möglichkeit, den Funktionsumfang der Anwendung beliebig zu erweitern, können Drittanbieter ihre Dienste nun einfach und schnell den Anwendern von Alexa anbieten. Benötigt werden lediglich einige Grundkenntnisse, die im folgenden Text vermittelt werden.
Das Konzept der Alexa Skill Entwicklung
Wie jedes Programm, das mit einem Benutzer kommuniziert, hat auch Alexa eine Schnittstelle, über die Befehle entgegengenommen werden. Bei herkömmlichen Programmen oder Apps ist dies durch Schaltflächen und Auswahlmöglichkeiten realisiert. Bei Alexa hingegen werden alle Befehle über eine Spracherkennung ausgewertet und interpretiert. Wird die Anweisung eindeutig erkannt, führt ein Dienst die entsprechende Funktion aus. Dies kann die Beantwortung einer einfachen Frage („Alexa, wie ist das Wetter in Berlin?“) oder auch die Steuerung eines externen Gerätes sein („Alexa, bitte schalte die Kaffeemaschine ein!“).
Um also eine Erweiterung, die sich „Skill“ nennt, zu programmieren, müssen zwei Dinge gemacht werden. Als Erstes müssen die Sprachbefehle definiert werden, auf die das Gerät reagieren soll. Als Zweites werden die Funktionen definiert, die aufgerufen werden, wenn ein solcher Befehl erkannt wurde.
Die Skills sind nicht wie bei Programmen oder Apps lokal auf dem Gerät gespeichert. Sowohl die Spracherkennung als auch die ausführenden Funktionen werden als Anwendung in einer Cloud via einem Hosted Service, der von Amazon betrieben wird, ausgeführt. Darum müssen alle Endgeräte ständig mit dem Internet verbunden sein.
1. Wie läuft die Konversation mit Alexa?
Jede Kommunikation mit dem Gerät wird mit einem „Wake-Word“ eingeleitet. Dieses ist fest vorgegeben, meist ist es „Alexa“, und es bestehen nur begrenzte Auswahlmöglichkeiten.
Als Nächstes folgt die sogenannte „Starting Phrase“, die auch vorgegeben ist. Möglichkeiten sind unter anderem „Lade“, „Frage“, „Starte“, „Verwende“ und ähnliche Begriffe. Diese Phrase kann auch weggelassen werden, dann wird der Skill eine für diesen Fall implementierte Funktion (LaunchRequest) ausführen.
Nach der „Starting Phrase“ erwartet der Dienst den Namen des Skills, gefolgt von der Absicht bzw. Aufforderung. Ein typischer Aufruf könnte also wie folgt lauten: „Alexa, frage Bergmann-Infotech, wie Skills entwickelt werden“. Ist dieser Befehl in dem Skill implementiert, wird der zugehörige Code (Lambda Funktion) ausgeführt.
2. Die erste Anwendung des Amazon Echo Developers, das Frontend.
Nach dem Einloggen auf https://developer.amazon.com/de/alexa-skills-kit wird das Alexa Skill Kit gestartet.
Die Oberfläche der Internetseite ändert sich gelegentlich, darum werden in Folge nur die Funktionen behandelt. Alle Menüpunkte sind entweder in der oberen Auswahlleiste oder links in einem Menü zu finden.
Nach dem Einloggen wird eine Liste der bereits gespeicherten Skills angezeigt. Ist diese Liste leer, kann ein weiterer Skill durch Klick auf die Schaltfläche „Create Skill“ erstellt werden. Danach wird ein Name vergeben, unter dem der Skill gespeichert wird. Gegen wir ihm den Namen „Projekt Sonnenschein“.
Angenommen, der Skill sollte Informationen zu einem Projekt liefern. Dann wäre eine Phrase ähnlich wie „Alexa, frage Bergmann-Infotech nach dem Status zu dem Projekt Sonnenschein“. Nachdem der Name festgelegt ist, wird das Modell erfragt. Dort ist für ein einfaches Beispiel das Model „Custom“ das richtige.
Danach wird der „Skill Invocation Name“ festgelegt. Das ist das Stichwort, das den Skill definiert. Wählen wir also „Bergmann-Infotech“, damit Alexa später auf die Phrase korrekt antworten kann.
Ist dies geschehen, muss ein „Intent“ definiert werden. Dies ist genau genommen der Name der Funktion, die später aufgerufen wird, wenn von dem Spracherkennungsdienst eine Phrase erkannt wird. Nehmen wir also den Namen „GetInfoForProject“. Nach dem Erstellen wird nun danach gefragt, was der Benutzer sagen soll, um diese Funktion aufzurufen. Das sollten möglichst viele verschiedenen Phrasen sein, damit auch Aufrufe wie z. B. „Alexa, frage Bergmann-Infotech zum Projekt Sonnenschein“. oder „Alexa, frage Bergmann-Infotech, wann das Projekt Sonnenschein fertig ist“ beantwortet werden können. Sinnvoll sind acht bis dreißig Phrasen. Um so mehr, desto besser.
Sind genügend Phrasen definiert, wird das Modell mittels der Schaltfläche „Build Model“ gespeichert und übersetzt. Ist dies erfolgreich, wird der Endpunkt festgelegt. Diese Funktion ist ein wenig versteckt, weil dazu erneut in der oberen Auswahlleiste auf „Build“ geklickt werden muss. Als Endpunkt wird, wenn kein eigener Service verfügbar ist, „AWS Lambda ARN“ gewählt. Hier wird auch, nachdem das Backend definiert ist, die Adresse der Backendfunktion eingetragen, dazu im nächsten Abschnitt mehr.
3. Die erste Anwendung des Amazon Echo Developers, das Backend.
Nach dem Einloggen auf https://aws.amazon.com/de wird unter „Mein Konto“ der Unterpunkt „AWS Managment Console“ gewählt. Im Suchfeld wird nach dem Stichwort „Lambda“ gesucht und danach wird eine Liste mit bereits definierten Lambda-Services angezeigt. Unsere Funktion muss natürlich noch definiert werden, darum wir „Create function“ gewählt. Danach muss ein sogenannter „Blueprint“ bestimmt werden. Dies ist eine Vorlage, auf deren Grundlage dann unsere Funktion implementiert wird. Hier werden die Vorlagen zu „Alexa“ gesucht und dann die „alexa-skill-kit-sdk-factskill“ gewählt. Andere Entwürfe sind auch möglich, aber in dieser sind alle nötigen Bibliotheken enthalten. Im Anschluss daran wird der Trigger bestimmt. Hier wird „Alexa Skills Kit“ selektiert und ein Name samt Beschreibung vergeben. Die Runtime-Umgebung bleibt unangetastet „Node.js 6.10“.
Danach wird der vorgeschlagene Quellcode, der für dieses Beispiel unbrauchbar ist, durch den Code, den wir mittels des Internetdienstes unter https://skillinator.io/ aus dem im Frontend erzeugtem Code generieren, ersetzt.
Die weiteren Schritte sind selbsterklärend. Es muss nur noch die Rolle der Funktionen im Lambda-Model festgelegt werden und dann die erzeugte ARN, die sich oben rechts findet, im Frontend eingetragen werden. Danach kann in der Testumgebung der Skill getestet und weiter verfeinert werden.