Mit mehr als 2 Millionen Downloads handelt es sich bei Rasa um ein Open Source Framework mit zunehmender Relevanz zur Erstellung von Chatbots. Ein Rasa Gesprächsassistent kann den Usern als Chatbot über den Facebook Messenger oder Slack bereitgestellt werden. Zusätzlich kann der Assistent auch als Alexa Skill veröffentlicht werden. Rasa bietet einerseits die Möglichkeit selbst ohne Programmierkenntnisse einen Chatbot zu programmieren. Andererseits kann man mit in Python implementierten Erweiterungen den Funktionsumfang des Frameworks an die eigenen Bedürfnisse anpassen. Dieser Artikel gibt einen Überblick darüber, wie mit Rasa möglichst einfach Chatbots erstellt werden können. Hierzu erstellen wir einen Chatbot, welcher einfache Fragen über seine Ersteller beantworten kann. Das Projekt steht hier zur Verfügung. Ein beispielhafter Dialog, den wir führen können, ist hier abgebildet:
Bevor wir mit der Erstellung des Chatbots bzw. des Assistenten beginnen können, müssen wir zunächst Rasa installieren. Dafür wird Python 3.7 oder 3.8 benötigt. Nach der Installation können wir mit dem Rasa-CLI direkt ein neues Projekt initialisieren. Durch den Parameter --no-prompt bei der Initialisierung wird das Projekt im aktuellen Verzeichnis aufgesetzt und testweise ein initiales Modell trainiert. Ist dies nicht gewünscht, kann der Parameter entfernt werden.
Nach erfolgreicher Initialisierung wird eine Datenstruktur angelegt, wie sie der Abbildung zu entnehmen ist. Im Folgenden gehen wir darauf ein, welche Daten anzulegen sind, um einen Assistenten in Rasa zu erstellen.
Zunächst beginnen wir damit, sogenannte Stories anzulegen. In Stories wird festgelegt, wie der Assistent auf Fragen des Users reagiert. Dies wird durch das sogenannte Dialog Management durchgeführt und die angelegten Stories dienen als Trainingsdaten hierfür.
Stories werden in data/stories.yml erstellen. Der Beginn eines Dialoges wird durch deren Namen in Form einer Markdown-Überschrift vom Typen H2 gekennzeichnet. Userintentionen werden über einen Stern gekennzeichnet und Aktionen des Assistenten über einen eingerückten Bindestrich.
Der beispielhafte Dialog, wie er oben dargestellt wurde, lässt sich als Story wie folgt darstellen:
Die Geschichte heißt "Bot challenge and ask for creator", wie mit dem Schlüsselwort "- story" makiert wird. Damit fängt eine Geschichte an.
In der nächsten Zeile startet der Dialog zwischen dem Assistenten und dem User. Er beginnt mit einem sogenannten "intent". Bei einem Intent handelt es sich um eine Intention des Users, beispielsweise um die Frage, ob der Gesprächspartner des Users ein Bot ist. Dieser Intent hat auch einen Namen, in diesem Beispiel "is_bot".
Auf die verschiedenen Ausprägungen dieser Frage gehen wir in der Beschreibung des Natural Language Understanding (NLU) ein.
Der Assistent reagiert, indem er mit utter_i_am_a_bot antwortet.
Der Assistent reagiert, indem er mit der Aktion utter_i_am_a_bot antwortet. Auch das ist nur der Name dieser Aktion. Die Definition des Antworttextes sehen wir gleich in der Erstellung der Domain.
Es folgt noch ein weiterer Intent des Users, auf welchen mit utter_created_by_steadforce geantwortet wird. In diesem Muster ist es möglich verschiedene Storys anzulegen, welche als Grundlage für das Dialog Management des Assistenten dienen. Rasa bietet auch die Möglichkeit, Stories in einem interaktiven Modus zu erstellen. Diese können auch im Markdown-Format gespeichert und für das Training verwendet werden.
Nachdem anhand der Stories Beispieldialoge angelegt wurden, erstellen wir mögliche Ausprägungen der Intents. Bei der Interaktion des Users mit dem Assistenten erfolgt die Erkennung des Intents anhand der Eingabe mittels sogenanntem Natural Language Understanding. Auch hierfür legen wir Beispieldaten, also mögliche Ausprägungen, an. Dies nehmen wir in data/nlu.yml vor.
Die einzelnen Intents müssen im Format
- intent: <intent-name>
angegeben werden. Die Trainingsdaten müssen als Liste angegeben werden. Für ein sinnvolles Training benötigen wir mindestens vier Beispieldaten pro Intent. Das folgende Beispiel zeigt dies anhand des Intents is_bot.
Auch für den Intent how_created legen wir Trainingsdaten nach dem gleichen Muster an.
Nachdem wir Beispieldialoge und Trainingsdaten für das NLU angelegt haben, müssen wir nur noch die Domain festlegen. Bei der Domain handelt es sich um das Umfeld, in welchem der Assistent operiert. Dort sind unter anderem intents und responsesdefiniert. Die Konfiguration der Domain ist in domain.yml vorzunehmen. In diesem Beispiel nehmen wir die Konfiguration wie folgt vor:
Hier sind die einzelnen Intents aufgeführt und zu den Responses, den Antworten des Assistenten, definieren wir in dieser Datei die Texte. Des Weiteren ist hier die sogenannte Conversation Session konfiguriert. Die Conversation ist ein Dialog zwischen dem User und dem Assistenten. In dieser Konfiguration wird die Session nach 60 Minuten ohne Interaktion vom User beendet und Slots werden in neue Sessions übernommen. Bei Slots handelt es sich um einen Key-Value-Store, welchen der User während der Conversation füllen kann. In diesem Artikel wollen wir aber nicht weiter auf Slots eingehen.
Bevor wir mit dem Training des Bots beginnen können, müssen wir einige Konfigurationen vornehmen. Neben der Erstellung der Trainingsdaten für die NLU müssen wir die Sprache des Assistenten festlegen, um eine korrekte Erkennung der Absichten der Benutzer zu ermöglichen. Diese Einstellung kann in der Datei config.yml vorgenommen werden.
In unserem Beispiel wollen wir die Sprache auf Deutsch einstellen. Standardmäßig ist Englisch als Sprache vorkonfiguriert. So müssen wir den Wert en durch de ersetzen.
In dieser Datei werden neben der Sprache auch die NLU Pipeline spezifiziert und die Policies konfiguriert, welche das Dialog Management für den Assistenten umsetzen. Diese Konfigurationen passen wir in unserem Beispiel nicht an und übernehmen die Standard-Werte, die von Rasa vorgegeben werden.
Nachdem wir alle notwendigen Konfigurationen vorgenommen haben, können wir das Training durchführen und den Assistenten über die Konsole testen. Beides ist über das Rasa CLI möglich.
Zunächst ist das Training des Assistenten auszuführen.
Nach einem erfolgreichen Training kann der Assistent direkt über die Konsole genutzt werden.
Hier können wir die zu Beginn definierte Konversation testen und sehen, ob unser Assistent die richtigen Antworten gibt.
In diesem Beispiel haben wir gezeigt, wie ein einfacher Chatbot erstellt wird, der leichte Fragen mit fest definierten Antworten beantwortet. Rasa bietet unter anderem noch die Möglichkeit, mittels sogenannten actions Pythoncode auszuführen, um so beispielsweise dynamische Antworten zu erzeugen. Auch können Assistenten erstellt werden, die im Dialog Formulare ausfüllen. Dazu dienen Rasa Forms. Ein Anwendungsszenario hierfür sind beispielsweise Assistenten, die Reservierungssysteme vereinfachen. Sind bereits Trainingsdaten in einem bestimmten Datenformat vorhanden, so ist es möglich, eigene Importer zu erstellen, um diese Daten nicht erst in das im Artikel beschriebene Format zu konvertieren.
Rasa bietet eine einfache Möglichkeit, Chatbots/Gesprächsassistenten zu erstellen. Bei Bedarf bietet es auch ein hohes Maß an Flexibilität, um Erweiterungen und Konfigurationen vorzunehmen, die den Anforderungen der einzelnen Zielgruppen gerecht werden. In unserem Artikel "LAMBADA AI-Methode: Conversational Systems erschaffen" können Sie mehr über die Gestaltungsmethoden von Conversational Systems erfahren..