EINEN DIALOG ERSTELLEN



Bei der Entwicklung eines guten Dialoges kommt es vor allem darauf an, welche Gedanken Du Dir im Vorraus machst. Deinen Dialog kannst Du dann in Node Red nach einem Baukastenprinzip ganz einfach nachbauen.




Schritt 1: Brainstorming & Sortieren
  • Thema überlegen und Brainstorming machen: Was für Infos möchtest Du zu diesem Thema sammeln? Was für ein Gespräch möchtest Du führen? 
  • Was willst Du herausfinden und was ist Dein Ziel?
  • Dann macht es Sinn, die entwickelten Fragen zu sortieren, bzw. zu entscheiden in welcher Form gefragt werden soll:
  • Sind eher offene Fragen nützlich? Oder möchtest Du ganz konkrete Dinge abfragen? Nach unserer Erfahrung sind oft Kombinationen von beidem nützlich.
  • Welche Fragen sind eher leicht und daher gut zum Einstieg? 
  • Überlege Dir, wie Du die User*innen am besten durch den Dialog begleitest um die Informationen, die Dich interessieren zu bekommen.



Schritt 2: Ablauf skizzieren
  • Je nach geplanten Fragen mag es sinnvoll sein, unterschiedliche Dialogstränge zu verfolgen.
  • Zeichne Dir am besten auf, wie die unterschiedlichen Gesprächsverläufe aussehen könnten und nummeriere die Inhalte, die eingesprochen werden müssen.
  • Ein kostenloses Open-Source-Tool zum Diagramme zeichnen ist z.B. www.diagrams.net



Schritt 3: Audio einsprechen
  • Die Texte, welche Dein Gespräch strukturieren, müssen nun eingesprochen werden.
  • Falls Du noch kein passendes Programm dafür hast, ist Audacity eine gute kostenlose Open-Source-Option.
  • Gute Audiodateien lassen sich leicht mit einem einfachen Smartphone-Headset machen. Direkt in ein Smartphone zu sprechen, geht auch.
  • Prüfe die Aufnahmen. Sie sollten eine gute Lautstärke haben, und es sollten keine längere Pause am Anfang der Aufnahme sein.
  • Speichere die einzelnen Teile des Dialogs als einzelne Dateien und nutze dafür am besten leicht identifizierbare Namen.
  • Nutze das Format “.wav”. Mit Audacity lassen sich andere Formate wie “.m4a” oder “.aac” entsprechend umwandeln.   




Schritt 4: Node-Red öffnen 
  • Mit Node-Red lassen sich die Dialoge der Quasselstrippe nach Deinen Bedürfnissen anpassen. Node-Red erlaubt es, die erfassten Daten zu speichern oder an andere Dienste weiterzuleiten und ist nach einem Baukastenprinzip so konfigurierbar, dass man es auch ohne Software-Vorkenntnisse nutzen kann.
  • Auf die Node-Red-Oberfläche gelangt man, indem man im Browser die Adresse http://quasselstrippe.local:1880 aufruft.



Schritt 5: Node-Red Startscreen
  • Links: Liste von allen verfügbaren Nodes (d.h. Funktionalen Komponenten)
  • Oben: Liste von allen verfügbaren Flows, deaktivierte Flows sind ausgegraut.
  • Rechts: Informationen und Hilfe Texte zur momentan ausgewählten Node, Anzeige von Debugging-Nachrichten.
  • Mitte: Anzeige des momentan ausgewählten Flows und dessen Nodes.
  • Nodes sind die funktionalen Komponenten eines Flows. Sie können Nachrichten verändern, erzeugen oder verarbeiten. Sie werden durch Linien miteinander verbunden. 


Schritt 6: Dateien hochladen
  • Um die Audio-Dateien auf den Raspberry Pi zu laden und in Node Red zu nutzen, kannst Du das Upload-Interface verwenden.
  • Dieses erreichst Du, indem Du in Deinem Browserfenster http://quasselstrippe.local:1880/uploads/ eingibst.
  • Dort kannst Du nun Dateien von deinem Computer aus hochladen - Achtung: nur .wav Dateien.
  • Du kannst schon hochgeladene Dateien auch löschen.


Schritt 7: Neuen Dialog beginnen
  • Erstelle einen neuen Flow indem Du im Tabbereich oben rechts auf das ︎ drückst
  • Durch einen Doppelklick auf das neu erschienene Tab kannst Du seine Einstellungen bearbeiten.
  • Gebe dem Flow einen Namen an dem Du erkennen kannst, um was für einen Dialog es sich handelt. Bestätige den neuen Namen mit Done.


Schritt 8: Start
  • Um den Dialog auch unabhängig von einem Button abspielen zu können, beginnen wir mit einer allgemeinen Start-Node.
  • Dafür benötigen wir die inject-Node aus dem Node-Ordner common. Diese ziehen wir per Drag-and-Drop auf unsere Arbeitsfläche.


Schritt 9: Node bearbeiten
  • Die Nodes können bearbeitet werden, indem wir (wie beim Flow zuvor auch) sie per Doppelklick auswählen.
  • Nun können wir die Einstellungen (Properties) bearbeiten:
  • Wir benötigen nur einen deskriptiven Namen (z.B. “Start”), können die anderen Einstellungen also löschen (︎).
  • Danach bestätigen wir mit Done und haben unsere erste fertige Node!


Schritt 10: Deploy
  • An dem blauen Punkt an unserer neuen Node erkennen wir, dass die Veränderung noch nicht in Kraft getreten ist.
  • Um diese Veränderung in unserem Flow zu bestätigen, drücken wir Deploy (übersetzt: “Anwenden”) oben rechts.
  • Als Bestätigung taucht ein Fenster mit “Successfully deployed” auf.
  • Kontrolliere also immer, dass all Deine Änderungen auch “angewendet” wurden!


Schritt 11: Comment
  • Mit Hilfe der Node comment (per Drag-and-Drop an die gewünschte Stelle ziehen) kannst Du Deinen Flow kommentieren und so für Dich und andere leichter nachvollziehbar machen.
  • Gerade während des Lernprozesses kann es hilfreich sein, die unterschiedlichen Elemente auf der Arbeitsfläche durch Kommentare zu beschreiben.


Schritt 12: Button hinzufügen
  • Da wir den Dialog langfristig durch den Button an der Quasselstrippe starten wollen, fügen wir schonmal die entsprechende Node hinzu.
  • In der Node-Sammlung auf der linken Seite findest Du im Ordner quasselstrippe die Node qs-button.
  • Positioniere diese Node am besten in der Nähe der Start Node, denn sie startet ebenfalls den Dialog.


Schritt 13: Dialogeinstieg
  • Nun kommen wir zum Einbinden der ersten Audiodatei.
  • Hier startet der Dialog wirklich: Was Du Dir als Einstieg in den Dialog überlegt hast - z.B. eine Begrüßung, kurze Vorstellung, Geschichte o.ä. – wird hier als Audiodatei eingebunden.
  • Dafür wählen wir die Node play-soundfile aus dem Ordner function und ziehen sie auf die Arbeitsfläche.


Schritt 14: Audiodatei
  • Gehe außerdem sicher, dass der richtige Ordnerpfad ausgewählt ist, der Node also gezeigt wird, wo sie die richtige Audiodatei finden kann.
  • In Schritt 6 solltest Du Deine Audiodateien auf den Raspberry Pi geladen haben - diese sind dann unter folgendem Pfad zu finden: /home/pi/sounds/
  • Gebe bei “File” den Namen der Datei an, die als erstes abgespielt werden soll und bestätige anschließend.


Schritt 15: Nodes verknüpfen
  • Damit Dein Flow abgespielt werden kann, müssen die einzelnen Nodes miteinander verknüpft sein.
  • Flows in Node-Red sind grundsätzlich von links nach rechts aufgebaut.
  • Nodes können verbunden werden, indem man auf einen Output einer Node (graues Rechteck auf der rechten Seite der Node) klickt und sie bei gedrückter Maustaste mit einem Input (linke Seite) einer anderen Node verbindet. Durch diese Verbindung wird der Output einer Node an eine andere Node weitergeleitet.
  • Im Beispiel wird die Start Node mit der Audiodatei-Node verbunden.
  • Die Nodes können auch mit mehreren anderen verknüpft sein. Hier folgt z.B. sowohl auf die Start Node als auch auf die qs-button Node die Audiodatei.



Schritt 16: Delay einbauen
  • Da anschließend an die Begrüßung gleich die erste Frage abgespielt werden soll, bauen wir zwischendrin eine kurze Verzögerung ein.
  • Dafür nutzen wir die Node Delay aus dem Ordner function.
  • Wie bei den anderen Nodes auch, können wir durch Doppelklick in einem Menü die Einstellungen der Node verändern (z.B. 1 Sekunde Verzögerung).


Schritt 17: Datenbankeintrag starten
  • Damit die Antworten der interagierenden Personen gespeichert, gruppiert und später genutzt werden können, sollten wir am Anfang des Dialogs einen neuen Datenbankeintrag starten.
  • Dafür nutzen wir die Node qs-output aus dem Ordner quasselstrippe.
  • In den Einstellungen dieser ersten qs-output Node müssen wir als Operation “new” auswählen - wir starten den Eintrag nur.


Schritt 18: Dialog fortsetzen
  • Den Dialog setzen wir nun fort indem wir eine weitere Audiodatei (wie in Schritt 13/14) einbinden.


Schritt 19: Spracherkennung
  • Um auf die Antwort auf unsere Startfrage reagieren zu können, müssen wir diese aufnehmen und den Inhalt auswerten.
  • Für den ersten Schritt der Spracherkennung und Transkription (Umwandlung von Sprache in Text) nutzen wir die Node qs-speech-to-text aus dem quasselstrippe Ordner.
  • In den Eigenschaften dieser Node lässt sich insbesondere die Länge der Wartezeiten anpassen, z.B.: timeout (wie lange wird nach aufgenommener Sprache gewartet bis die Aufnahme beendet wird).


Schritt 20: Ja oder Nein?
  • Wir wollen entsprechend der aufgenommenen Antwort den Dialog unterschiedlich fortsetzen, müssen also eine Fallunterscheidung in den Dialog einbauen, sozusagen eine Kreuzung mit zwei Abbiegeoptionen.
  • Hierfür wird die transkribierte Antwort nach passenden Worten durchsucht: Ja/Okay/Klar/... bzw. Nein/Nee/Lieber nicht/...
  • Dafür kann man die Node fuzzy match aus dem Ordner function verwenden und die zu erkennenden Optionen selbst eintragen oder auch einfach die Node recognize yes/no aus dem Flow mit den Komponenten kopieren (copy-paste).
  • Je nach erkanntem Input wird nun die Botschaft “Ja” oder “Nein” an die nächste Node weitergeleitet.
  • Achtung: Verknüpfe die neuste Node mit dem oberen Punkt der qs-speech-to-text Node, da über diesen der transkribierte Output fließt.


Schritt 21: Fallunterscheidung
  • Die nächste Node entspricht nun der Kreuzung, an der abhängig davon, ob die Antwort “Ja” oder “Nein” war, zur entsprechenden Folgefrage geschaltet wird.
  • Dafür kannst Du Dir entweder die switch yes/no Node aus dem Dialog Components Flow kopieren (copy-paste) oder die switch node aus dem Ordner function nutzen.
  • Diese switch Node erhält unterschiedliche “Nachrichten” / “Messages” (msg.) und unterscheidet entsprechend in die unterschiedlichen Fälle (in diesem Fall Nein/Ja/anders)
  • Jedem Fall entspricht dann einer der Ausgangspunkte (1/2/3).


Schritt 22: Dialog fortsetzen
  • Nun folgen unterschiedliche Fragen in Form von Audiodateien.
  • Hier gilt es darauf zu achten, die unterschiedlichen Ausgänge der switch Node mit den richtigen Folgefragen zu verknüpfen.
  • Wenn man die Maus über die grauen Punkte rechts an der Node hält, erkennt man, dass der obere Punkt der “Nein”-Anwort entspricht, der mittlere Punkt bedeutet “Ja”. Dies passt zu den Einstellungen der switch Node, die wir oben gesehen haben.
  • Falls keine passende Antwort erkannt wurde, wird der Dialog mit qs-dialog-ended aus dem Ordner quasselstrippe vorzeitig beendet.


Schritt 23: Datenbankeintrag ergänzen
  • Wir setzen in beiden Strängen wieder die qs-speech-to-text Node ein, um die Antworten aufzunehmen.
  • Da wir diese Antwort nicht nur nutzen möchten, um den Dialog in unterschiedliche Richtungen zu leiten, sondern wir den Inhalt speichern möchten, nutzen wir hier die qs-output Node mit der operation-Eigenschaft “append”. Unser Datenbankeintrag wird also ergänzt.
  • Falls Du diese Antworten unter einem bestimmten Thema gruppieren (und später anzeigen lassen) willst, kannst Du dieses bei topic eintragen.


Schritt 24: Dialog fortsetzen
  • Die Dialogstränge werden jetzt mit einer Abschlussfrage wieder vereint und die Antwort wieder gespeichert.
  • Darauf folgt ein letztes Audio mit der Verabschiedung.


Schritt 25: Datenbankeintrag speichern
  • Bis jetzt wurde der Datenbankeintrag nur angefangen und mit Inhalt ergänzt – um gespeichert zu werden, brauchen wir am Ende noch die Node qs-save-output aus dem quasselstrippe Ordner.
  • Der Dateipfad (wo die Daten gespeichert werden sollen) führt am besten zu einer Textdatei im data Ordner auf dem Raspberry Pi, z.B. /home/pi/data/example-answers.txt


Schritt 26: Debug
  • Mit einer debug Node können wir den Dialog schon während des Bauens testen, da uns damit die transkribierten Nachrichten oder auch Fehlermeldungen angezeigt werden.


Schritt 27: Dialog beenden
  • Ganz zum Schluss beenden wir den Dialog mit der qs-dialog-ended Node aus dem Ordner quasselstrippe, die für den Reset aller Werte notwendig ist.


Fertig 🎉


PS: Die Antworten auf Deine Fragen findest Du im Frontend unter 
http://quasselstrippe.local:1880/output/



Quasselstrippe by DRLab︎created with fun in 2021