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

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 – Einen Azure-Chatbot in NodeJS bauen
- Teil 2 – Den Bot mit einer automatisierten CI/CD-Pipeline auf Azure deployen (auf Englisch)
- Teil 3 – Den Bot in einen Microsoft-Teams-Kanal integrieren (auf Englisch)
- Teil 4 – Ausprobieren, wie man Mehrfachauswahlen, Benutzerabsichten (Intents), Dialogabläufe, Prompts und Antwortvalidierung baut. Unterstützung für eigene API-Interaktionen. (auf Englisch)
- Teil 5 – Azure Conversational Language Understanding (CLU) testen (auf Englisch)
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 …

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"

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

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.