Chatbot volodymyr hryshchenko V5vq WC9gy EU unsplash

07.03.2022

Verwendung von Googles Dialogueflow zur Erstellung eines KI-Chatbots

Thomas Eldridge - Tech Evangelist.jpg
Thomas Eldridge
Teilen:

Dialogueflow von Google bietet eine Alternative zu Amazon Alexa für diejenigen, die KI-Assistenten entwickeln möchten. Diese erfordern keine Sprachinteraktion und können in Slack, in den Facebook Messenger und mehr integriert werden. Lesen Sie hier über die Erstellung eines Dialogueflow-Agenten, der Meteomatics-Wetter-API-Daten abfragen kann.

Vor einigen Monaten habe ich in einem Blogbeitrag beschrieben, wie wir einen Voice Skill für Alexa-fähige Geräte erstellt haben. Sprachassistenten haben in den letzten zehn Jahren stark an Popularität gewonnen, was vor allem auf die Fortschritte in der künstlichen Intelligenz zurückzuführen ist. Insbesondere im Bereich der Verarbeitung natürlicher Sprache (Natural Language Processing, NLP) - einer Mischdisziplin aus Informatik und Linguistik - ist es dank der Einführung neuronaler Netze viel einfacher geworden, eine KI zu trainieren, die menschliche Sprache zu interpretieren, zu verarbeiten und darauf zu reagieren. In meinem heutigen Artikel werde ich über meine Arbeit mit dem entsprechenden Dienst von Google und der Software, die ihn betreibt - Dialogueflow - sprechen und erläutern, warum sich dieses Tool erheblich von dem von Amazon angebotenen Dienst unterscheidet. Zunächst jedoch ein wenig Kontext...

Eine kurze Geschichte des NLP

Obwohl die Umwandlung der Sprache eines Benutzers in einen auf einem Computer registrierten Text und die anschliessende Text-to-Speech-Antwort des Computers an den Benutzer an sich schon eine technologische Errungenschaft darstellen, war die Verarbeitung des dazwischen liegenden Textes in der Vergangenheit die grösste Herausforderung.

Man kann sich die frühesten Versuche des NLP im Wesentlichen als komplizierte Flussdiagramme vorstellen. Bei einem Gesprächsthema geht man davon aus, dass es nur eine bestimmte Anzahl von Fragen gibt, die gestellt werden können, und nur eine bestimmte Anzahl von Antworten auf jede dieser Fragen. Dies ist jedoch eine grobe Vereinfachung. Obwohl der Mensch durchaus in der Lage ist, die am besten passende Option in Abhängigkeit von seiner Absicht auszuwählen, ist diese Interaktion in hohem Masse roboterhaft und keineswegs "natürlich". Ausserdem ist es eine unglaublich schwierige Aufgabe, an alle möglichen Antworten auf eine Frage zu denken. Oftmals gelingt dies nicht einmal annähernd - denken Sie zum Beispiel an Ihr letztes "Gespräch" mit einem Telefonbanking-Menü.

Bedenken Sie, wie "vorhersehbar" ein durchschnittliches Gespräch ist: Selbst wenn Sie eine gute Vorstellung davon haben, was der nächste Satz Ihres Gesprächspartners bedeuten wird, versuchen Sie einfach, jedes Wort in der richtigen Reihenfolge zu erraten, bevor es aus seinem Mund kommt. Das ist natürlich nicht machbar, und so wurde dieser Ansatz im späten 20. Jahrhundert aufgegeben, woraufhin sich das NLP auf ein statistisches Verständnis eines Korpus konzentrierte. Algorithmen des maschinellen Lernens (1) konnten eine riesige Anzahl von früheren Gesprächsbeispielen aufnehmen und einige wahrscheinliche Kombinationen von Schlüsselwörtern ermitteln, die einer Absicht entsprechen.

Dieser Ansatz, der stark auf einer Chomskianischen Interpretation von Sprache und ihrer Funktionsweise beruht, wird auch heute noch weitgehend verwendet. Die wichtigste Neuerung in den letzten 10 Jahren war die Anwendung neuronaler Netze auf dieses Problem. Neuronale Netze sind eine Untergruppe der Algorithmen des maschinellen Lernens, aber für den Laien sind sie im Wesentlichen Black Boxen (2). Die Ergebnisse sind jedoch beeindruckend: Während ein typischer Algorithmus für maschinelles Lernen einen Korpus von Tausenden von Büchern benötigt (3), kann ein neuronales Netz mit nur einer Handvoll Sätzen ähnliche Ergebnisse erzielen.

Tatsächlich sind Sprachassistenten und NLP-KI noch weit davon entfernt, die menschliche Interaktion vollständig zu emulieren - stellen Sie sich zum Beispiel vor, Sie stellen Ihrem Gerät zwei Fragen gleichzeitig (und erwarten eine Antwort auf beide). Aber die Idee, dass Sprache aus Erfahrung und nicht aus einer Vorlage gelernt wird, und die Fähigkeit, diese Idee in Computercode zu übersetzen, bedeutet, dass wir heute zumindest annähernd ein Gespräch mit unseren Telefonen führen können.

Wie unterscheidet sich Dialogueflow?

Was die obige Geschichte hoffentlich deutlich macht, ist, dass NLP die Füllung im Sandwich des Sprachassistenten ist. Die Leser meines vorherigen Blogbeitrags werden sich jedoch fragen: Warum machen Sie das noch einmal?; der Alexa-Artikel deckt doch sicher alles ab, was wir wissen müssen?

Die Antwort ist, dass es aufgrund der Art und Weise, wie Alexa-Skills entwickelt werden, viel schwieriger ist, das Sandwich zu zerlegen, falls Sie eine Sprache-zu-Text-Intoleranz haben und die Füllung stattdessen zwischen Scheiben von Pop-up-Messenger legen möchten. Da Google Dialogueflow völlig unabhängig von seiner Spracherkennungssoftware entwickelt hat, kann die KI, die die Unterhaltungen verwaltet, in Software von Drittanbietern integriert werden. Natürlich können Sie die Software auch mit anderen Telefonprodukten wie Genesys und Twilio verwenden, aber Sie können damit auch einen vollständig textbasierten Chatbot für Facebook Messenger, Slack und andere erstellen oder einen Twitter-Bot erstellen - alles mit derselben Software.

Wie funktioniert es?

Abgesehen von einigen Änderungen in der Nomenklatur ist das allgemeine Rezept für einen Dialogueflow-"Agenten" (4) dem von Alexa sehr ähnlich: Ein "Endnutzer" gibt einen "Ausdruck" (Äusserung) ab, der einer "Absicht" entspricht, die "Parameter" (Slots) bestimmter "Entitäts-(Slot-)Typen" haben kann oder nicht. Hier habe ich die von Alexa verwendete Nomenklatur in Klammern hinter jeden anders benannten Begriff gesetzt - ich verweise interessierte Leser wieder auf meinen früheren Blogbeitrag oder einfach auf die Dialogueflow-Dokumentation, die leicht zu folgen ist (zumindest was die Erfüllung angeht - siehe unten).

Es gab ein paar Dinge, die mir an der Arbeit mit Dialogueflow im Gegensatz zu Alex besonders gut gefallen haben. Zum einen waren die Quickstarts in logischer Reihenfolge aufgebaut und grösstenteils leicht verständlich. Ausserdem gefällt mir die zusätzliche Funktion "Follow-up Intent", die es dem Designer ermöglicht, bestimmte Intents erst dann aufzurufen, wenn ein vorangegangener Intent bereits ausgelöst wurde, was die Organisation von Intents ohne Überschneidungen wesentlich erleichtert. Ich schätze auch die einfache Schnittstelle von Dialogueflow, die es ermöglicht, sich an die vom Benutzer eingegebenen Parameter zu erinnern, was in Alexa nur schwer möglich war.

Erledigung

Der Hauptunterschied - und für mich die grösste Herausforderung von Dialogueflow - zeigt sich an dem Punkt, an dem wir mit einer externen Informationsquelle (in diesem Fall der Meteomatics-API) interagieren müssen. Im Falle von Alexa mussten wir lediglich Python-Code auf der Registerkarte Code der Alexa-Entwicklerkonsole schreiben. In Dialogueflow sind die Dinge etwas komplizierter. Anstatt die API direkt aufzurufen, müssen wir dies über einen "Webhook" tun.

"Was ist ein Webhook?" höre ich Sie schreien. Gute Frage. So wie ich es verstehe, ist ein Webhook im Wesentlichen eine Anwendung, die unter einer bestimmten URL lauscht. Sie kann also über das Internet kontaktiert werden und fungiert als Vermittler zwischen dem Benutzer (Dialogueflow) und einem Dritten (in unserem Fall die Meteomatics-API). Warum man das tun sollte, weiss niemand, aber es ist die Dialogueflow-Methode, um auf eine externe API zuzugreifen, und wer bin ich, die grundlegende Weisheit von Google in Frage zu stellen...

Zum Glück für Sie, liebe Webplebs, habe ich einen Beispielcode beigefügt, der zeigt, wie ich einen Webhook in Python erstellt habe, um Wetterdaten von der Meteomatics API abzurufen. Ich habe mich auf dieses triviale Beispiel beschränkt, da ihr zweifelsohne eure eigenen erstellen wollt, aber kontaktiert mich für weitere Beispiele, oder schaut auf dem Meteomatics GitHub vorbei, wo ich bald welche hochladen werde.

from flask import Flask
from markupsafe import escape
import meteomatics.api as api
import datetime as dt


username = 'XXXXXXX'
password = 'XXXXXXX'
app = Flask(__name__)


@app.route("/api-call/variable:<variable>", methods=["POST"])
def api_call(variable):
 lookup = {
 'temperature': 't_2m:C'
 }
 var = lookup[variable]
 df = api.query_time_series([(47.43, 9.4)], dt.datetime.now() - dt.timedelta(hours=24), dt.datetime.now(),
 dt.timedelta(hours=1), [var], username, password)
 t = df['t_2m:C'].iloc[-1]
 return f"It's {t} degrees Celsius"

Ich habe dies geschrieben, nachdem ich den Schnellstart in der Dokumentation für Flask (das Python-Paket, das für die Erstellung von Webanwendungen verwendet wird) verfolgt habe. Ich empfehle, diese Dokumentation zu lesen, da zum erfolgreichen Ausführen eines Webhooks etwas mehr gehört als nur das Schreiben des Python-Skripts; insbesondere müssen Sie die App von einem Terminal aus ausführen.

Screenshot 2022 03 07 at 17 23 30

Sobald wir den Webhook so konfiguriert haben, dass er API-Daten abruft und sie entsprechend unserer Anfrage verarbeitet, müssen wir nur noch auf der Registerkarte "Erfüllung" unseres Dialogueflow-Agenten auf "Aktiviert" klicken und ihn auf die URL des von uns erstellten Webhooks verweisen. Für die Zwecke des Experiments habe ich meine Flask-App auf dem LocalHost meines Computers laufen lassen - das heisst, sie ist für Computer ausserhalb meines Netzwerks unsichtbar.

Screenshot 2022 03 07 at 17 25 35

Das ist also mehr oder weniger alles, was es zu tun gibt! Die beiden Dinge, die ich im heutigen Beitrag nicht behandelt habe, sind das Hosten des Webhooks auf einem öffentlich sichtbaren Server und die Integration der fertigen App in ein Tool eines Drittanbieters. Halten Sie die Augen offen für diese Entwicklungen, die möglicherweise in kommenden Blogbeiträgen behandelt werden. In der Zwischenzeit wünsche ich Ihnen viel Spass beim Spielen mit Dialogueflow und zögern Sie nicht, mich unter [email protected] zu kontaktieren, wenn Sie Fragen haben oder Ihre Erfolge mit dem Tool teilen möchten.

Viel Spass beim Interfacing!

Thomas Eldridge - Tech Evangelist.jpg
Thomas Eldridge

Schreiben Sie mir eine Nachricht!

Sie haben Fragen zu einem meiner Artikel oder wollen sich einfach nur mit mir über Technik und Wetterdaten unterhalten? Dann schicken Sie mir eine Nachricht, ich freue mich auf Sie!