Development

Chatbot als alternative Navigation

Smarte Navigation per Chat: Wo gehts denn lang, API.AI?
Keine Kommentare

Kennen Sie das? Sie befinden sich in einer Anwendung und suchen beispielsweise die Möglichkeit, das Geburtsdatum in Ihrem Profil zu ändern. Es gibt viele Möglichkeiten zu navigieren, jedoch nichts, was auch nur ansatzweise nach der gewünschten Änderungsmöglichkeit aussieht. Wäre es da nicht schön, wenn man jemanden fragen könnte? Kann ein Chatbot in diesem Fall vielleicht weiterhelfen?

Systeme wie zum Beispiel der „Wikipedia-Bot“, der seinem Chatpartner auf Anfrage Wikipedia-Artikel heraussucht, sind immer öfter auf Webseiten und in mobilen Apps zu finden. Dabei handelt es sich um Chatbots. Das sind Chatsysteme, in denen der Anwender nicht wie gewohnt mit einem anderen Menschen schreibt, sondern mit einem künstlichen Gegenüber, einer künstlichen Intelligenz. Hierbei dienen die Chatbots meistens dazu, dem Nutzer Informationen bereitzustellen, ihn zu unterhalten oder Vorgänge, zum Beispiel das Bestellen einer Pizza, zu automatisieren.

Chatbot als Navigation

In Apps und Anwendungen ist es oft kompliziert, von einem Punkt zum nächsten zu gelangen. Nichts ist intuitiv aufgebaut, die Navigationspfade sind lang oder man weiß nicht genau, wo eine Funktion in der Anwendung zu finden ist. Schwierig wird es dann, wenn man nicht einmal weiß, ob die Applikation eine bestimmte Funktion überhaupt anbietet. Webseiten zum Beispiel, bei denen solche Probleme besonders häufig auftreten, versuchen oft mit einer einfachen Stichwortsuche Abhilfe zu schaffen. Diese funktioniert meist so, dass die eingegebenen Wörter in einem Navigationsbaum der Webseite, bestehend aus einer Sammlung aller Seitennamen, gesucht und die Ergebnisse dem Nutzer angezeigt werden.

Doch was ist, wenn das eingegebene Schlagwort falsch oder der gesuchte Begriff nur indirekt mit einer Seite zu tun hat? Wäre es nicht schön, man könnte einfach nach dem Weg fragen oder jemandem mitteilen, was man machen möchte und würde dann unverzüglich an sein Ziel gebracht?

Man könnte einen Chatbot einsetzen und ihn als Navigationsmittel in einer Anwendung verwenden. Hierbei kann der Nutzer in natürlicher Sprache beschreiben, welche Funktion er nutzen oder welche Seite er aufrufen möchte. Der Chatbot erkennt das Anliegen und öffnet für den Nutzer exakt die Seite, die der Nutzer benötigt. Das ist zum Beispiel mit Frameworks wie API.AI realisierbar.

API.AI

Damit ein Chatbot einen User verstehen kann – zum Beispiel wenn dieser in einer Anwendung navigieren möchte – gibt es so genannte „natural language understanding platforms“. Das sind Plattformen, die natürliche Sprache analysieren. Hierzu zählt auch API.AI, das 2014 gegründet und 2016 von Google gekauft wurde.

API.AI unterstützt sechzehn Sprachen, darunter auch Deutsch. Die Plattform ist sehr einfach zu bedienen, was sie ideal für Anfänger ohne Programmierkenntnisse macht und ist zudem für die private Nutzung kostenlos. Mit diesem Framework, das auf künstlicher Intelligenz basiert, lässt sich ein Chatbot umsetzen, der das Anliegen eines Gesprächspartners erkennt und diesem entsprechende, vordefinierte Antworten liefert.

Abb. 1: An unseren Anwendungsfall angepasste API.AI-Chatbot-Architektur (adesso, API.AI)

Abb. 1: An unseren Anwendungsfall angepasste API.AI-Chatbot-Architektur (adesso, API.AI)

In Abbildung 1 ist beispielhaft die Architektur für die Anbindung von API.AI in einem Projekt basierend auf der Architekturempfehlung der Plattformdokumentation beschrieben. Die blau unterlegten Komponenten des Diagramms stellen das API.AI-Framework dar. Wie die Grafik zeigt, schickt der Anwender Text- oder Sprachnachrichten über einen Backend-Service (interner Server) an das API.AI-Framework, das diese Anfragen analysiert. Die vom Entwickler definierten Intents und Entities, auf die der Artikel im weiteren Verlauf noch näher eingeht, werden dazu verwendet, die Anfrage zu klassifizieren und die relevanten Daten zu extrahieren. Anschließend werden entsprechend passende Antworten über den Server an den Anwender zurückgeschickt. Falls diese Antworten mit Daten angereichert werden müssen, kann der interne Server auf andere Services oder Datenbanken zugreifen. Nachdem dies erledigt ist, schickt der interne Server die Antwort an den Nutzer zurück.

API.AI an sich bietet noch viele Eigenschaften, die sowohl die Arbeit des Entwicklers vereinfachen als auch die Zufriedenheit des Anwenders erhöhen. Zum einen sind in API.AI vordefinierte Wissenspakete verfügbar, die dabei helfen, viele verschiedene Wünsche des Nutzers zu verstehen. Beispiele für diese Pakete sind „Small Talk“, „Weather“ oder „News“. Die Wissenspakete müssen in der API.AI-Weboberfläche aktiviert werden, damit der Chatbot sie nutzen kann. Diese Wissenspakete stehen in vielen Sprachen wie Englisch, Deutsch, Französisch, Spanisch, Russisch etc. zur Verfügung. Zum anderen bietet API.AI mit der so genannten One-Click Integration auch die Möglichkeit, den Chatbot sehr einfach an andere Plattformen wie Facebook, Telegram, Twitter oder Alexa anzubinden. Dies ermöglicht dem Nutzer eine direkte Kommunikation mit dem API.AI-Agent, ohne dass eine eigene Oberfläche programmiert werden muss. Außerdem bietet API.AI für unterschiedliche Programmiersprachen Bibliotheken an. Diese übernehmen die Anbindung von API.AI an das eigene System.

Navigation mit API.AI

Das folgende Beispiel zeigt, wie die Navigation in einer App mittels API.AI realisiert werden kann. Wir befinden uns in einem Kundenportal mit einem Profil, einer Homeseite, einem Chat, über den der Chatbot angesprochen wird, und ein paar weiteren Seiten wie einem Onlineshop und einer Supportseite.

Ein Anwender, der in besagter App einen Account hat, stellt nun fest, dass er sich bei der Registrierung vertippt und so irrtümlich ein falsches Geburtsdatum angegeben hat. Nun möchte er diesen Fehler beheben, also seinen in der App hinterlegten Geburtstag ändern. Er weiß aber nicht, wie er das machen kann. Dafür befragt er den Chatbot, der für ihn die Profilseite öffnet, auf der der Anwender dies erledigen kann.

Implementierung von API.AI

Zu Beginn werden auf der Website https://api.ai/ zunächst ein Account und dann ein neuer Agent erstellt. Ist das geschehen, gelangt man auf die Übersichtsseite des Agent. Hier lassen sich sowohl Intents als auch Entities erstellen.

Ein Intent ist das Anliegen des Nutzers, das von API.AI erkannt wird, um die Kommunikation zwischen Nutzer und Chatbot zu ermöglichen. Der Intent hat dabei drei Kernbereiche, die im Webinterface von API.AI ausgefüllt werden: Erstens den Bereich „User Say“, der Beispielsätze beinhaltet, die der Anwender im Chat verwenden könnte, zweitens die Sektion „Response“, mit Antworten, die der Chatbot dem Nutzer schickt, und drittens einen „Context“, der es API.AI ermöglicht, einen Konversationsfluss aufzubauen.

DevOps Docker Camp

Sie lernen die Konzepte von Docker und bauen Schritt für Schritt eine eigene Infrastruktur für und mit Docker auf.

Im Beispiel möchte der Anwender seinen Geburtstag ändern. Dafür soll er durch die App navigiert werden. Deshalb wird zunächst ein Intent namens „Navigation“ erstellt. In diesem Intent werden die Beispielsätze definiert, die der Nutzer verwenden könnte, wenn er zu einer bestimmten Seite in der App gelangen möchte. Dies könnten Sätze sein wie zum Beispiel „Zeig mir mein Profil“ oder auch „Ich möchte meinen Geburtstag ändern“ (Abb. 2). Es muss weder eine Antwort noch ein Kontext definiert werden, da der Anwender als Antwort keine Nachricht, sondern das Öffnen einer neuen Seite erwartet. Außerdem muss sich das Gespräch in keinem bestimmten Fluss befinden, damit API.AI den Nutzer navigieren kann.

Abb. 2: Ausschnitt des Intent „Navigation“ im Userbereich der API.AI-Webseite (Screenshot)

Abb. 2: Ausschnitt des Intent „Navigation“ im Userbereich der API.AI-Webseite (Screenshot)

Weiterhin wird ein neuer Entity gebraucht. Entities sind im Kontext von API.AI vordefinierte Wortgruppen, die zu einer Einheit gehören. Innerhalb eines Entity können verschiedene Wörter und Synonyme eingetragen werden. Gäbe es beispielsweise ein Entity „Haus“, so wären Wörter dieser Wortgruppe „Tür“, „Fenster“, „Wand“, „Dach“ etc. Als Synonym von Tür könnte zum Beispiel „Eingang“ eingetragen werden.

Für das Beispiel wird ein Entity mit dem Namen NavigationTarget erstellt, in dem alle Navigationsziele eingetragen werden. Dabei beschränkt sich das Beispiel auf die Ziele Home und Profil (Abb. 3). Profil, da es die für den Anwendungsfall einzig relevante Seite ist und Home, um aufzuzeigen, dass ein Entity nicht auf ein Ziel begrenzt ist.

Außerdem muss für den Eintrag Profil noch Geburtstag als Synonym definiert werden. Geburtstag ist zwar eigentlich kein Synonym des Wortes Profil, wird in diesem Navigationskontext allerdings als solches verwendet. Das ist deshalb notwendig, da der Nutzer, der seinen Geburtstag ändern möchte, auf diese Weise später auch zu seinem Profil navigiert wird, in dem er dies erledigen kann.

Abb. 3: Ausschnitt des Entity „NavigationTarget“ im Userbereich der API.AI-Webseite (Screenshot)

Abb. 3: Ausschnitt des Entity „NavigationTarget“ im Userbereich der API.AI-Webseite (Screenshot)

Nachdem das Entity NavigationTarget erstellt wurde, muss es in den Intent Navigation eingebunden werden. Innerhalb dieses Intent lassen sich Entities definieren, die in dem Satz enthalten sein müssen, den der Nutzer an den Chatbot richtet. In diesem Fall wird der Entity NavigationTarget als zwingend benötigt eingetragen (Abb. 4). Außerdem wird definiert, was API.AI antworten soll, falls der eingehende Satz das Entity nicht enthält, zum Beispiel ein Satz wie „Zeig es mir“ an API.AI geschickt wird. Ist dies getan und abgespeichert, so ist API.AI bereit für die Anbindung. Nun muss die weitere Logik in der Anwendung implementiert werden.

Abb. 4: Ausschnitt des Intent „Navigation“ im Userbereich der API.AI-Webseite (Screenshot)

Abb. 4: Ausschnitt des Intent „Navigation“ im Userbereich der API.AI-Webseite (Screenshot)

Das Frontend der Beispielapplikation wurde mit Ionic 2 umgesetzt, einem Framework für plattformunabhängige Entwicklung, auf Basis von TypeScript.

Die Verbindung zu API.AI wird nicht direkt, sondern über einen Backend-Service aufgebaut. Der Service ist in diesem Beispiel in Java geschrieben und verwendet eine Bibliothek von API.AI, die die Kommunikation zu API.AI über eine REST-Schnittstelle umsetzt. In Abbildung 5 wird zum Verständnis der grobe Sequence-Flow der Anwendung dargestellt.

Abb. 5: Sequence-Flow-Interaktion mit API.AI (adesso)

Abb. 5: Sequence-Flow-Interaktion mit API.AI (adesso)

Der Backend-Service dient als Proxy zwischen der App und API.AI und übernimmt das Management der einzelnen Client-Sessions. Außerdem können an dieser Stelle die Antworten von API.AI ausgewertet und gegebenenfalls weitere Dienste, Datenbanken etc. zur Anreicherung der Antwort an das System angebunden werden.

…
private static final AIConfiguration config = new AIConfiguration(Client_Acess_Token);
…
/**returns the message, for the Application*/
Public BotResponse getResponse(String message){
  BotResponse toReturn = new botResponse;

  AIDataService service = new AIDataService(config);
  AIRequest request = new AIRequest(message);
  //sends the request to API.AI and returns the response.
  AIResponse response = service.request(request); 
  String intent = response.getResult().getMetadata().getIntentName();
  
  switch(intent){
  case: "Navigation":
    toReturn.setOrder("navigate");
    toReturn.addParam(response.getResult().getParameters());
  default:
    toReturn.setOrder("printToChat");
    toReturn.setMessage(response.getResult().getFulfillment().getSpeech());
  }
  
  return toReturn;
}

In Listing 1 ist die Anbindung der API.AI-Schnittstelle im Backend-Service exemplarisch umgesetzt. Jede Anfrage muss über einen Client-Access-Token, der in den Einstellungen des API.AI-Agenten hinterlegt ist, authentifiziert werden. Als Antwort auf eine an den Chatbot gerichtete Nachricht erhält der Backend-Service nicht nur den Antworttext, der im Intent Navigation nicht definiert wurde, sondern auch den Intent der Anfrage sowie die von API.AI erkannten Entities mit deren Werten und viele weitere Informationen. Diese lassen sich anschießend analysieren und weiter verarbeiten.

Im Beispiel kommunizieren der Backend-Service und die App auch über eine REST-Schnittstelle. Auf eine Anfrage bekommt die App als Antwort ein Objekt mit den Attributen Navigationsbefehl order, einen Antworttext responseMessage und Parameter parameters:

export interface BotResponse {
  order: string;
  responseMessage: string;
  parameters: Array;
}

Im Fall einer Navigationsanfrage erkennt API.AI den Intent Navigation, das Entity NavigationTarget und den zugehörigen Wert des Entity, also das Navigationsziel. Das Backend schickt der App anschließend den Befehl navigation mit dem Navigationsziel als Parameter und einem leeren Antworttext zurück. In der App wiederum wird die Antwort des Proxys verarbeitet. Hierzu wird zunächst der Befehl in response.order verarbeitet (Listing 2).

processResponse(response: BotResponse) {
  if (response.order != undefined) {
    switch (response.order) {
      case "navigation":
        this.navigateToTarget(response.parameters[0]);
        break;
      case "print":
        this.printMessage(response.responeMessage, "messageBot");
        break;
    }
  }
}

Im Falle der Navigation wird die Methode navigateToTarget mit dem aus der Antwort hervorgehenden Navigationsziel aufgerufen und somit die entsprechende Seite in der App geöffnet (Listing 3).

navigateToTarget(target: string) {
  switch (target) {
    case "Profil":
      this.provider.showMenuButton = false;
      this.navCtrl.push(ProfilPage);
      break;
    case "Home":
      this.provider.showMenuButton = false;
      this.navCtrl.push(HomePage);
      break;
  }
}

Im konkreten Anwendungsfall aus dem Beispiel teilt ein Nutzer dem Chatbot mit, dass er seinen Geburtstag ändern möchte. Der Nutzer schreibt die Nachricht „Ich möchte meinen Geburtstag ändern“. Diese schickt die App via REST an den Backend-Service, der die Nachricht wiederum an das API.AI-Framework weiterleitet. Abbildung 6 zeigt das Chatinterface in der App.

Abb. 6: Das Chatinterface in der App (Screenshot)

Das Framework analysiert die Nachricht und erkennt den Intent Navigation mit dem Entity NavigationTarget und dem Synonym „Geburtstag“. Die Antwort, die API.AI an den Backend-Service schickt, enthält auch den Intent Navigation. Als Wert des Entity NavigationTarget wird allerdings nicht das Synonym Geburtstag, sondern das Wort Profil an den Backend-Service geschickt.

Der Backend-Service analysiert die Antwort von API.AI und antwortet der App. Dabei wird in der Antwort der Befehl navigate und das Ziel Profil in den Parametern übermittelt. Die App erkennt den Befehl, den sie vom Backend-Service erhalten hat, und öffnet die im Parameter spezifizierte Seite.

Fazit

Wie wir gesehen haben, ist es sehr einfach, mit einem Framework wie API.AI einen Chatbot zu entwickeln. Es ist ebenfalls möglich, einen Chatbot als Wegweiser durch eine Anwendung zu nutzen, wie unser einfaches Beispiel zeigt.

Grundlage dafür sind Intents und Entities, mit denen man API.AI füttern muss. Es bleiben jedoch auch noch diverse Fragen offen, beispielsweise der Datenschutz. Ein System wie API.AI zeichnet komplette Chatverläufe auf und wertet diese aus. Außerdem muss man sich über den Aufbau einer Taxonomie für die Wortgruppen (Entities) Gedanken machen. Hier können beispielsweise Machine-Learning-Ansätze zum Einsatz kommen, um dynamisch auf die Benutzerbedürfnisse reagieren zu können.

Kombiniert man den Chatbot mit einem menschlichen Gesprächspartner für all die Fälle, die noch nicht automatisiert beantwortet werden können, so kann dieser den Chatbot um seine Antworten erweitern. Unser Ziel, die Anwendungsnavigation näher an die natürliche Sprache heranzuführen, haben wir aus unserer Sicht jedoch erreicht.

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -