Auf dem Weg zu einem intelligenten Azure-Chatbot – Teil 1

Auf dem Weg zu einem intelligenten Azure-Chatbot – Teil 1
Foto von Alex Knight / Unsplash

Vorweg ein Geständnis: Stand heute habe ich keine Ahnung, wie man mit Microsoft Azure einen Chatbot baut. Keinen der folgenden Schritte habe ich je zuvor gemacht – es wird also Recherche nötig sein.
Davon abgesehen sind das die Ziele und zugleich die Funktionen des Bots, den wir in dieser Blogserie bauen. Wenn wir sie erreichen, erleichtert das einen guten Teil des Tagesgeschäfts:

Teil 1 – Inhalt

Einleitung

Schon länger hatte ich mir vorgenommen, mir Zeit zu nehmen und mehr Erfahrung in der Chatbot-Entwicklung zu sammeln. Wie gesagt habe ich auf diesem Gebiet noch wenig Erfahrung, aber ich weiss, welche Funktionen ich mir vom Bot wünsche.
Wenn das Thema auch für Sie neu ist und Sie Node.js bereits kennen, können Sie dieser Blogserie folgen und die Azure-Chatbots gemeinsam mit mir erkunden.

Wir binden ausserdem ChatGPT an, einfach weil es gerade in aller Munde ist. Hier ein paar erste Links, die ich vor dem Start des Projekts zur Recherche angeschaut habe:

Entwicklungsumgebung

Ich arbeite mit folgendem Setup:

  • Ein MacBook Pro
  • NPM: '8.19.2'
  • Node: '18.12.1'
  • Kenntnisse in NodeJS
    Sie können Ihren Bot auch in anderen Sprachen bauen
  • VSCode
  • Ein Azure-Abonnement

Die Azure-Ressourcen verursachen geringe Kosten. Ich plane aber, Ressourcen mit kleiner Skalierung zu verwenden und sie abzuschalten oder vorübergehend abzubauen, solange ich nicht am Bot arbeite. Für die Schritte im heutigen ersten Beitrag fallen allerdings noch keine Kosten an.

Los geht's: Wir bauen den Bot

Zuerst erstellen wir die Codebasis für unseren Bot. Los geht's.
Wir installieren den Bot-Builder-Generator von Microsoft für JavaScript und generieren damit einen Bot.

# install bot builder
npm install -g generator-botbuilder

# generate a bot
yo botbuilder

# open the project
code .

Ich habe «core bot» und «javascript» gewählt. So sieht mein Grundprojekt im Moment aus. Den eigentlichen Bot habe ich nach «src/bots» verschoben – ansonsten ist alles Standard …

Die Ordnerstruktur des generierten Bot-Projekts im VS-Code-Explorer: cognitiveModels, deploymentTemplates, dialogs, node_modules, resources und src/bots mit dialogAndWelcomeBot.js und dialogBot.js
Bild – das JavaScript-Chatbot-Projekt direkt nach dem Generieren

Unter «deploymentTemplates» wurden offenbar einige Azure-Resource-Manager-Templates (ARM) generiert, die später für das Deployment auf Azure nützlich sind.

Im Ordner «dialogs» finde ich die mainDialog.js, die ihrerseits die bookingDialog.js verwendet. Sehr schön: Microsoft liefert hier bereits Beispielcode mit, der ein Gespräch führen kann, um einen fiktiven Flug zu buchen.

Es ist auch schon Code für die Spracherkennung mit LUIS eingebaut. Den verwenden wir aber nicht, weil LUIS bald abgekündigt wird. Später in der Blogserie setzen wir stattdessen Conversational Language Understanding (CLU) ein.

Den Bot starten

Den Bot-Emulator habe ich hier heruntergeladen.
Dann habe ich den eben erstellten Bot gestartet («npm start»), und er lief auf Port 3978:

npm start
> testbot@1.0.0 start
> node ./index.js

(node:99354) [DEP0111] DeprecationWarning: Access to process.binding('http_parser') is deprecated.
(Use `node --trace-deprecation ...` to show where the warning was created)

restify listening to http://[::]:3978

Get Bot Framework Emulator: https://aka.ms/botframework-emulator

To talk to your bot, open the emulator select "Open Bot"

Im Emulator habe ich also auf «Open Bot» geklickt und mich verbunden mit:

 "http://localhost:3978/api/messages"
Der Dialog «Open a bot» im Bot Framework Emulator mit der Bot-URL http://localhost:3978/api/messages und leeren Feldern für Microsoft App ID und Passwort
Bild – Microsoft Bot Framework Emulator, Version 4

So weit, so gut: Die Grundeinrichtung scheint zu funktionieren. Ich habe ein wenig mit dem vorgefertigten Buchungsdialog herumgespielt.

Ein Live-Chat im Bot Framework Emulator: Der Bot fragt nach dem Reiseziel, der Benutzer antwortet «paris», rechts daneben das Aktivitätsprotokoll der Nachrichten
Bild – ein laufender Chat mit dem Chatbot

Wie schon im Code (Ordner «dialogs») zu sehen war, kann dieser Bot mit mir ein Gespräch führen, um einen Flug zu buchen. Er fragt «To what city would you like to travel?» – als Ziel können Sie «paris» oder «london» eingeben und auch ein Datum angeben. Danach antwortet er mit einer Bestätigung und wiederholt die eingegebenen Angaben.

Fazit

Na also. Damit ist unser erstes Ziel, «einen Azure-Chatbot in NodeJS bauen», bereits erreicht. Das war einfach, auch wenn ich zugeben muss, dass ich den Aufbau der Dialoge noch nicht wirklich verstehe. Aber das ist ein Thema für einen anderen Tag und für die nächsten Teile unserer Blogserie.