Inhalt/Content
Erstellen eines Projektes / Agenten
Wenn Sie Ihren novomind iAGENT Help Agenten von Grund auf neu gestalten wollen, muss zu Beginn der Entwicklung ein novomind iAGENT Help-Projekt angelegt werden. Dies ist auf der Startseite (Projekte) über die Schaltfläche Neu möglich.
Es stehen dann Vorlagen für unterschiedliche Anwendungszwecke zur Verfügung (Chatbot, FAQ-Center, Wissensbasis) zur Verfügung. Alle Vorlagen sind in ihrer grundsätzlichen Architektur identisch aufgebaut, unterscheiden aber sich in Bezug auf ihre Voreinstellungen, wie zum Beispiel vorangelegte Kontexte und Regeln.
Mit einem Klick auf Erstellen wird das Projekt angelegt und erscheint nun in der Projektübersicht und kann von dort aus erneut wieder geladen werden.
Sollen weitere Agenten hinzugefügt werden, muss der Agenten-Bereich im Baum markiert werden. Anschließend kann über das Dreipunkt-Menü unter dem Baum über Bot hinzufügen ein neuer Agent angelegt werden. Im folgenden Dialog wird dann der Name des Agenten sowie die Sprache der Expressions festgelegt.
Erstellen eines Kontextes
An dieser Stelle soll zuerst eine Begrüßung durch einen Chatbot mit dem Composer erstellt werden. Die Begrüßung des Benutzers kann am besten mit einem eigenen Kontext, dem Begrüßungskontext, erfolgen.
Dazu im Kontext-Baum den Namen des Agenten markieren (in diesem Beispielprojekt wäre dies der Eintrag Agent) und über das Dreipunktmenü unter dem Kontextbaum Kontext hinzufügen wählen. Im darauffolgenden Fenster den Namen des Kontextes eingeben, in unserem Beispiel „Begruessung“ (es dürfen keine Sonderzeichen wie beispielsweise Umlaute verwenden werden).
Alle Kontexte, die sich unterhalb des Agenten befinden, gehören zum Agenten-Bereich. Oberhalb des Agenten, im Common-Bereich werden automatisch universell einsetzbare Regeln mitgeliefert. Sollten Änderungen erwünscht sein, so sollten nicht direkt die Regeln im Common-Bereich geändert werden. Phrases und Specialinput müssen kopiert und im Agenten-Bereich eingefügt werden. Erst hier sollten Änderungen vorgenommen werden. Es ist dabei wichtig, die Kopien der Kontexte im Agenten-Bereich als Phrases oder Specialinput anzulegen. Der Shared-Bereich kann nicht kopiert werden, muss also ggf. direkt im Common-Bereich geändert werden.
Erstellen von Regeln
In dem neuen Kontext muss nun eine Regel angelegt werden, die den Benutzer begrüßt. Wählen Sie den Kontext „Begruessung“ mit der Maus aus und klicken Sie auf das Dreipunktmenü unterhalb des des Kontextbaums. Es erscheint das Menü. Wählen Sie Regel hinzufügen aus. Geben Sie der Regel (wie dem Kontext) den Namen „Begruessung“. Die neue Regel erscheint jetzt im Kontext-Baum.
Unter dem Reiter Matching wird der Regelausdruck eingegeben, der vom Agenten ausgewertet wird, um eine passende Antwort zu finden. Das können Stichworte oder auch Formulierungen sein, die in der Eingabe des Benutzers vorkommen müssen, damit diese Regel gefeuert wird. Unter dem Reiter Aktionen können eine oder mehrere entsprechende Aktionen des Agenten der Eingabe zugewiesen werden.
Geben Sie nun unter Aktionen den Text für die erste Zeile der Tabelle ein: „Hallo, mein Name ist XYZ. Ich bin Ihr Online-Berater auf dieser Website.“
Sicherlich werden nicht alle Benutzer den Agenten mit „Hallo“ begrüßen, sodass der Regelausdruck erweitert werden muss. Wechseln Sie zu Matching und geben Sie verschiedene mögliche Ausdrücke zur Begrüßung ein, z. B. „Hallo“, „Guten Morgen“, „Guten Tag“ (bestätigen Sie nach jedem Ausdruck mit Enter, sodass für jeden Ausdruck ein neuer Eintrag erstellt wird).
Vor jedem Ausdruck erscheint dabei ein grüner Haken. Dies zeigt an, dass der Ausdruck ein positiver Beispielsatz ist, d.h. die Regel bei diesem Ausdruck greifen soll. Es können hier ebenfalls negative Beispielsätze, also Ausschlussvarianten, eingegeben werden, bei denen die Regel nicht ausgeführt werden soll. Mit einem Klick auf den grünen Haken wechselt man zwischen Positiv- und Negativbeispiel, der grüne Haken wird dann zu einem roten Kreuz. Für unser aktuelles Beispiel soll es aber kein Negativbeispiel geben.
Da es noch mehrere Eingabevarianten gibt, die mit „Guten…“ beginnen, kann man den Ausdruck auch verallgemeinern. Hierzu kann die Expression manuell bearbeitet werden, indem der Schalter Editiere Expression manuell umgelegt und anschließend auf Erstelle Expression geklickt wird. Dadurch wird aus den vorher eingegebenen (sprachlichen) Ausdrücken automatisch ein regulärer Ausdruck erstellt, der alle sprachlichen Varianten beinhaltet. Dieser reguläre Ausdruck kann nun manuell bearbeitet werden.
In diesem Beispiel sind folgende Regelausdrücke denkbar (die Thematik Expressions wird weiter unten noch genauer behandelt):(("hallo") || ("guten .*"))
Um zu testen, ob die editierte Expression tatsächlich auf die oben eingegebenen sprachlichen Ausdrücke zutrifft, dient die Schaltfläche Teste Expression. Nach Durchführung des Tests zeigt ein zweiter grüner Haken an, ob die Regel bei diesem Ausdruck greift.
Regeln mit mehreren Aktionen
Manche Eingaben können wiederholt vom Benutzer gemacht werden, deshalb ist es ratsam, für solche Fälle mehrere Aktionen des Agenten vorzusehen. Die Reihenfolge des Feuerns dieser Aktionen wird über die Aktionslogik bestimmt. Um eine Aktionslogik hinzuzufügen, klickt man auf das oberste Plus-Symbol und wählt Aktionslogik aus. Es stehen dann zur Auswahl:
- TILLEND – die Aktionen werden bei wiederholtem reaktivem Auslösen der Regel der Reihe nach ausgeführt. Sind alle Aktionen durchlaufen, wird immer wieder die letzte Aktion ausgeführt. Feuert die Regel proaktiv, wird die letzte Aktion nicht mehr gefeuert und die Regel wird für die proaktive Suche ungültig.
- INORDER – die Aktionen werden der Reihe nach ausgeführt, danach ist die Regel ungültig und feuert im weiteren Gespräch nicht mehr. Dieses Verhalten gilt für die reaktive und die proaktive Suche.
- INORDERLOOP – die Aktionen werden der Reihe nach ausgeführt, danach wird wieder bei der ersten Aktion anfangen. Die Regel wird nicht ungültig. Dieses Verhalten gilt für die reaktive und die proaktive Suche.
- RANDOM – die Aktionen werden in zufälliger Reihenfolge ausgeführt, danach ist die Regel ungültig und feuert im weiteren Gespräch nicht mehr. Dieses Verhalten gilt für die reaktive und die proaktive Suche.
- RANDOMLOOP – die Aktionen werden in zufälliger Reihenfolge ausgeführt. Wenn alle gefeuert wurden, wiederholen sich die Aktionen erneut in zufälliger Reihenfolge. Dieses Verhalten gilt für die reaktive und die proaktive Suche.
- RANDOMTILLEND – abgesehen von der letzten Aktion werden alle Aktionen in zufälliger Reihenfolge ausgeführt. Sind alle Aktionen einmal ausgeführt worden, wird immer wieder die letzte Aktion ausgeführt. Feuert die Regel proaktiv, wird die letzte Aktion nicht mehr gefeuert und die Regel wird für die proaktive Suche ungültig.
- SWITCH – die Ausführung der Aktionen ist von Bedingungen abhängig (s. Abschnitt Regeln mit dem Switch-Aktionslogik erstellen)
Über das Plus-Symbol unter dem Aktionslogik-Block können dann die weiteren Aktionen hinzugefügt werden.
Regeln mit Switch-Aktionslogik erstellen
Mit dem Switch-Action-Selector ist es möglich, eine Regel zu erstellen, die abhängig von einer beliebigen Bedingung unterschiedliche Aktionen ausführt, beispielsweise unterschiedliche Aktionen auf Grund der Altersanalyse eines Benutzers (Antwort auf „wie alt sind Sie?“). Eine weitere mögliche Anwendung wäre zum Beispiel die Analyse der Beantwortung einer Frage, die mit Ja oder Nein beantwortet werden kann (dies ist die typische Analyzerregel). Beide Fälle werden mit der Switch-Regel erkannt und der Agent kann angemessen reagieren. Jede Switch-Regel verfügt weiterhin über eine Default-Aktion, die ausgeführt wird, wenn keine der Bedingungen greift. Neben der Ja-/Nein-Erkennung sind natürlich auch beliebige andere Bedingungen möglich. Ein Beispiel ist hier wieder die Begrüßung. Abhängig von einer Zeitvariablen kann die Begrüßungsformel unterschiedlich gestaltet werden, z. B. „Guten Morgen…“, „Guten Abend…“ oder „Sie sind aber ein Frühaufsteher…“ (dieses Beispiel ist als fertige Regel in den novomind Basisagenten vorhanden, ist aber an dieser Stelle zu komplex).
Als Beispiel hier ein Auswahlvorschlag zu verschiedenen Produkten. Sehen wir uns an, wie eine Switch-Regel genutzt werden kann: Angenommen ein Kunde interessiert sich für den Kauf eines Produktes, so hätte der Agent die Möglichkeit, abhängig von dem gewünschten Produkt entsprechende Vorschläge zu machen. Zunächst wird einen Kontext mit dem Namen „Produkte“ erstellt, und in diesem Kontext eine Regel mit dem Namen „Produkte“, die z. B. auf Worte wie „Produkte“ reagiert. Der Agent könnte nun Vorschläge bezüglich der Ausführung machen:
„Wir haben die Produkte A, B oder C im Angebot, für welches interessieren Sie sich?“
Für diese Art von Auswahl eignen sich besonders die sogenannten Intelli-Links. Intelli-Links sind markierte Auswahlmöglichkeiten in der Agentenantwort. Klickt der Benutzer auf einen Link, wird der Intelli-Link wie eine manuelle Benutzer-Eingabe behandelt. Dem Benutzer bleibt somit die Eingabe der Antwort erspart. Intelli-Links werden im Actioncode gesetzt. Dazu wird die Auswahl markiert und anschließend auf die Schaltfläche oberhalb des Textfelds geklickt. Anschließend sollte die Markierung blau erscheinen.
Erstellen Sie nun eine Regel mit dem Namen „Produkte_Analyzer“ und fügen Sie unter dem Reiter Aktionen eine Aktionslogik hinzu und wählen Sie SWITCH. Daraufhin ändert die Actiontabelle im unteren Teil der Regelmaske ihr Aussehen. Über das Plus-Symbol unterhalb der Aktionslogik können Bedingungen hinzugefügt werden. Eine Default-Action wird automatisch generiert.
Als Expression definieren Sie nun ein Matchfeld (“<MATCH1>(.*)<\MATCH1>“), welches das Modell oder die Ausführung für das gewünschte Produkt aufnehmen kann. Mit dem Button „Add“ im Action-Block fügen Sie eine neue Action hinzu. Geben Sie als Bedingung (MATCH1 #= “_a_“) ein – beachten Sie bitte die Unterstriche „_“, die sind sehr wichtig (s. Kapitel 6.9.2) – und fügen Sie eine Textantwort hinzu:
„Das Produkt A ist eine hervorragende Wahl für jeden, der die A-Eigenschaften mag.“
Fügen Sie eine weitere Action hinzu mit der Bedingung (MATCH1 #= “_B_“) und schreiben Sie in das zugehörige Textfeld:
„Da kann ich Ihnen ein phantastisches Produkt der Ausführung B anbieten.“
Eine dritte Action bekommt die Bedingung (MATCH1 #= “_c_“) und den Text:
„Hier habe ich für Sie das Produkt C, ein wirklich hochwertiges Produkt.“
Nun muss noch eine Default-Action eingetragen werden. Tragen Sie zum Beispiel Folgendes ein (da man jedoch nicht sicher sein kann, dass der Benutzer an dieser Stelle die Frage tatsächlich beantwortet, ist es besser, hier keine konkrete Antwort auszugeben, sondern mit Hilfe der Systemfunktion thinkagain nach einer passenden Antwort in der Wissensbasis zu suchen):
„Dieses Produkt habe ich derzeit leider nicht vorrätig. Vielleicht schauen Sie nächste Woche noch einmal, ob wir das dann vorliegen haben“
Um die Verknüpfung herzustellen zwischen der Regel, die nach der Ausführung fragt, und der Regel, die auf die entsprechende Nennung des gewünschten Produktes reagiert, muss diese Antwort-Erwartungsregel als Analyzer-Regel definiert werden. Dazu wählen Sie noch einmal die Regel „Produkte“ aus und legen Sie den Schalter bei Analyzer um. Selektieren Sie die Regel „Produkte_Analyzer“ im Baum. Nach der Kundeneingabe wird diese Regel ausgeführt.
Da unsere Analyzer-Regel aber natürlich nicht in jeden Suchprozess einbezogen werden darf, sondern nur dann feuern soll, wenn auch tatsächlich eine Produktauswahl vom Kunden gemacht wurde („A“, „B“ oder „C“), müssen Sie diese Regel aus dem Suchprozess herausnehmen. Dazu löschen Sie die Markierung im Feld „Process“ der Regel „Produkt_Analyzer“.
Expressions
Die sogenannten Rule Expressions sind – neben der Antwort des novomind iAGENT Help Agent – der zentrale Bestandteil einer Regel. Die Erstellung einer Expression orientiert sich im Wesentlichen an regulären Ausdrücken, wie sie auch in der Informatik verwendet werden. Der Regelausdruck ist nicht sensitiv, d.h. bei der Eingabe des Benutzers wird nicht zwischen Groß- oder Kleinschreibung unterschieden.
Exkurs über reguläre Ausdrücke
Reguläre Ausdrücke bieten die Möglichkeit, die Regelausdrücke flexibel zu halten. Hier einige Ausdrücke mit Beispielen:
| Zeichen | Funktion |
| . | Beliebiges Einzelzeichen |
| ? | Vorangegangenes Zeichen kommt einmal oder keinmal vor. Beispiel: bo?x für „bx“ oder „box“ |
| + | Vorangegangenes Zeichen kommt einmal oder beliebig oft vor. Beispiel: ja+ für „ja“, „jaa“, „jaaa“ |
| * | Vorangegangenes Zeichen kommt keinmal oder beliebig oft vor. Beispiel: bo*x für „bx“, „box“ oder „boox“ |
| [] | Ein beliebiges, zwischen den Klammern angegebenes Zeichen oder ein beliebiges Zeichen im angegebenen ASCII-Bereich. Beispiel: finde[nt] für „finden“ oder „findet“; [a-z] für ein beliebiges Zeichen zwischen „a“ und „z“ (also a, b, c, d, e, etc.) |
| ^ | Beginn der Eingabe. Beispiel: ^arm für „Arm“, „Armbeuge“, nicht: „Unterarm“, „mein Arm“ |
| $ | Ende der Eingabe. Beispiel: arm$ für „Arm“, „Unterarm“, nicht: „Armbeuge“, „…arm ab“ |
| () | Gruppierung von Zeichen. |
| _ | Definition des Wortrandes |
Beispiele für Expressions
Um möglichst viele verschiedene Formulierungsvarianten eines Sachverhalts abzubilden, gibt es bei der Erstellung von Regelausdrücken mehrere Möglichkeiten. Zur Veranschaulichung im Folgenden einige Beispiele:
- Einfache Expression
| „Was kannst du?“ | (”was kannst du“) |
- Expressions mit definiertem Wortrand
Um sicherzugehen, dass eine in der Expression definierte Zeichenkette nur als eigenständiges Wort angesehen wird und nicht als Teil eines längeren Wortes, muss diese Zeichenkette mit zwei Unterstrichen abgegrenzt werden, die den Wortrand festlegen. Der Wortrand kann ein Leerzeichen, ein Eingabeanfang oder -ende oder ein Satzzeichen (wie , oder ; oder -) sein. Beispiel: Eine Regel soll auf „Oma“ oder „Oma?“, aber auf keinen Fall auf „Thomas“ oder „Tomaten“ feuern.
| „Oma“, „Oma?“, nicht: „Thomas“, „Tomaten“ | (“_oma_“) |
- Expressions mit ODER-Verknüpfung:
| „Was kannst du?“, „Was können Sie?“ |
(“was kannst du|was können sie“) |
((“was kannst du“) || (“was können sie“)) |
|
(“was (kannst|können) (du|sie)“) |
- Expressions mit UND-Verknüpfung
Bei einer Verknüpfung mit && (UND) können die Worte in der Benutzer-Eingabe in beliebiger Reihenfolge vorkommen.
| „Was kannst du?“, „Ich möchte wissen, was du kannst?“, „Erzähl mir, was du kannst?“ | ((”_was_“) && (”_kannst_“) && (”_du_“)) |
- Expressions mit UND- und untergeordneter ODER-Verknüpfung
| „Was kannst du?“, „Was können Sie?“, „Ich möchte wissen, was du kannst?“, „Ich möchte wissen, was Sie können“, „Erzähl mir, was du kannst?“, „Erzähl mir, was Sie können“ | ((“_was_“) && (“_kannst_|_können_“) && (“_du_|_sie_“)) |
- Expressions mit UND- und übergeordneter ODER-Verknüpfung
Achten Sie hierbei auf die Klammerung – die Begriffe, die innerhalb eines Ausdrucks gemeinsam Voraussetzung für das Feuern einer Regel sind, müssen in Klammern gesetzt werden.
| „Was kannst du?“, „Ich möchte wissen, was du kannst?“, „Erzähl mir, was du kannst?“, „Dein Aufgabenbereich“ | ((“_was_“) && (“_kannst_“) && (“_du_“)) || (“dein aufgabenbereich“) |
- Expressions mit Platzhaltern
| „Was kannst du eigentlich nicht?“, „Was kannst du denn jetzt schon wieder nicht“ | (”was kannst du .* nicht“) |
((”_was_“) && (”_kannst_“) && (”_du_“) && (”_nicht_“)) |
- Expressions mit verneinten Begriffen
Um sicher zu gehen, dass ein bestimmter Begriff auf keinen Fall in einer Eingabe vorkommt, kann mit einem vorangestellten Ausrufezeichen der Begriff ausgeschlossen werden.
| „Was kannst Du“, nicht: „Was kannst Du nicht“ | ((”_was_“) && (”_kannst_“) && (”_du_“) && (!(”_nicht_“))) |
- Variablen in Expressions
In Expressions können neben regulären Ausdrücken auch Variablen abgefragt werden. Eine Besonderheit sind Variablen vom Typ „String“. Sie können entweder auf exakte Gleichheit (inklusive Groß- und Kleinschreibung) (==) oder auf ‚enthalten sein‘ (#=) geprüft werden.
| „liefernachfrage“ – wenn die Variable „mandant“ genau den Wert „myCompany“ hat | (”liefernachfrage”) && (mandant == “myCompany”) |
| „liefernachfrage“ – wenn die Variable „mailTo“ den Wert „myCompany“ enthält. | (”liefernachfrage”) && (mailTo #= ”myCompany”) |
- Matches und Matchgroups
Bei der Verarbeitung von Expressions werden durch das System intern globale Match-Variablen belegt, ohne die entsprechenden Stellen in der Expression explizit mit Match-Tags markiert wurden. Zu Matches werden im Wesentlichen in Expressions verwendete Patterns und geklammerte Ausdrücke. Daher kann in der Expression einer Analyzer-Regel vereinfachend „(.*)“ geschrieben werden anstelle des ausführlicheren<MATCH1>.*<\MATCH1>.
Um sicherzugehen, dass während der Verarbeitung einer Eingabe die richtigen Teile als Match aufgefasst werden, sollte in komplexeren Expressions immer mit Match-Tags gearbeitet werden (s.u. im Beispiel). Ein Matchtag sieht (ähnlich wie html) wie folgt aus:<MATCHZahl>Expression<\MATCHZahl>
‚Zahl‘ ist eine ganze Zahl, die im vorderen und hinteren Tag gleich sein muss (man fängt üblicherweise mit 1 an, für weitere Match-Variablen wählt man MATCH2, MATCH3 etc). Analog zu den Match-Tags werden durch das System in den globalen Variablen automatisch MATCH-Variablen angelegt, die den gleichen Namen haben wie das verwendete Tag und den gematchten Ausdruck speichern. Diese Match-Variablen lassen sich dann wie andere globale Variablen auch im Action-Code oder in Switch-Conditions verwenden.
Der Inhalt der Match-Variablen sollte gelöscht werden, wenn er nicht mehr gebraucht wird. Um den Inhalt einer Match-Variablen zu löschen, kann ihr ein leerer String zugewiesen werden:MATCH1 = ““;
| Eine Regel soll das Personalpronomen und die Person aus folgender Eingabe speichern: „Ich suche ein Geschenk für meine Schwester“ (mit dem Pattern #WORT# als Platzhalter für ein beliebiges Wort) |
(“#GESCHENK# für (.*) (.*)“)MATCH1=GeschenkMATCH2=meineMATCH3=Schwester |
(“#GESCHENK# für <MATCH1>#WORT#<\MATCH1> <MATCH2>#WORT#<\MATCH2>„)MATCH1=meineMATCH2=Schwester |
Referenzierungen
Üblicherweise reicht es aus, wenn Regeln unabhängig von anderen Regeln auf eine einzelne Eingabe eines Benutzers reagieren. Oft aber ist es notwendig und sinnvoll, Regeln miteinander zu verknüpfen. Solche Verknüpfungen nennt man Referenzierungen. Es gibt zwei Arten von Referenzierungen: Goto-Verknüpfungen und Analyzer-Verknüpfungen. Beide haben Ihre spezifischen Anwendungsbereiche, können aber auch gemeinsam in einer Regel verwendet werden.
Beide Arten von Referenzierungen können jeweils auf zwei verschiedene Arten geschaffen werden: Erstens kann die Verbindung über die generellen Eigenschaften einer Regel (Reiter Eigenschaften) unter Links erzeugt werden. Zweitens kann der Link auch über die Aktionslogik geschaffen werden, indem man über das Plus-Symbol unter der letzten Aktion auf Link klickt. Der Unterschied zwischen beiden Varianten wird im Abschnitt Besonderheit bei individuellen Verknüpfungen erläutert.
Goto-Verknüpfungen
Goto-Verknüpfungen werden oft angewendet, um die Aktion des Agenten innerhalb eines Dialogschrittes möglichst flexibel zu halten und außerdem, wenn die Antwort aus einzelnen Segmenten bestehen soll, die wiederum in unterschiedlichen Situationen und unterschiedlichen Zusammensetzungen verwendet werden soll. So kann beispielsweise aus zwei voneinander unabhängigen Regeln, die auf jeweils ein bestimmtes Stichwort reagieren, per Goto eine weitere angesteuert werden, deren Aktionen mit Hilfe der Aktionsauswahl eine Vielzahl unterschiedlicher Aktionen in zufälliger Reihenfolge bietet. Eine solche Verknüpfung ist sinnvoll, wenn die Ausgabe der Agentenantwort (bzw. –aktionen) in mehrere Segmente aufgeteilt werden soll, damit die Segmente immer wieder neu zusammengesetzt werden können.
Anwendungsbeispiel
Ein typisches Beispiel für die Anwendung von Gotos ist die Begrüßung, in der viele Regeln miteinander verkettet werden müssen, um flexibel und auf intelligente Art das Gespräch zu eröffnen. Hier wird in einer Regel die Session eröffnet und per Goto eine weitere Regel angesteuert, die abhängig von der Tageszeit ebenfalls per Goto zu einer Vielzahl weiterer Regeln leitet, die wiederum in einem Zufallsverfahren unterschiedliche Texte der vorangehenden Regel anhängen. Auf diese Weise ist es möglich, dass der Agent beispielsweise den Besucher am Morgen mit den Worten „Guten Morgen, was aus unserer Produktpalette darf ich Ihnen heute anbieten?“ und am Abend mit den Worten „Guten Abend, für welches unserer Produkte interessieren Sie sich?“ begrüßt. Während zum Beispiel die zeitabhängige Begrüßung im ersten Teil des Begrüßungssatzes aus einer Regel stammt, die abhängig von der Tageszeit per Goto angesteuert wird, stammt der zweite Teil – ebenfalls per Goto angesteuert – beispielsweise aus einer Regel, die in mehreren Aktionen Texte im Zufallsverfahren auswählt, die auf die Produkte des Unternehmens verweisen.
Analyzer Verknüpfungen
Analyzer-Verknüpfungen werden in Regelpaaren verwendet, bei denen die erste Regel eine Aktion feuert, deren Inhalt eine Texteingabe vom Benutzer provoziert – sie wird daher auch „Frage-Regel“ genannt. Die nun erwartete Eingabe des Benutzers muss richtig interpretiert werden. Diese Aufgabe erfüllt eine Regel, die daher auch „Antwort-Erwartungs-Regel“ genannt wird. Um die erwartete Antwort auch als solche richtig interpretieren zu können, muss in der vorangehenden Regel ein Parameter gesetzt werden: Die richtige Antwort-Erwartungs-Regel muss adressiert werden – dies erfolgt entweder über die generelle Analyzer-Verknüpfung, das ist der Schalter in den Eigenschaften oder über die individuellen Checkboxen der Regelaktionen.
Bei der sogenannten Frageregel wird in den weiteren Eigenschaften der Regel (Advanced) als folgende Reaktive Suchstrategie die Verhaltensweise Analyzer automatisch gesetzt, damit die erwartete Eingabe des Benutzers nicht, wie jede andere übliche Eingabe, mit allen Regelausdrücken in der KB verglichen wird. Dann bestünde die Gefahr, dass eine völlig andere Regel als der erwünschten Antwort-Erwartungs-Regel aktiviert würde und der Agent eine unerwünschte Antwort liefert. Daher muss die Suchstrategie Analyzer gewählt werden.
Anwendungsbeispiel
Soll dem Kunden eine Information zu einem bestimmten Produkt aus einer Auswahl gegeben werden, bietet sich die Verwendung solcher Analyzer-Konstruktionen an. Im folgenden Beispiel besteht die Produktpalette aus 3 Produkten, aus denen der Benutzer auswählen kann: Produkt A, Produkt B und Produkt C.
Über eine Frageregel wird die Auswahl verschiedener Informationen zu diesen Produkten angeboten: „Ich möchte Ihnen unsere Produkte vorstellen. Welches interessiert Sie besonders – Produkt A, B oder C?“ Nach dieser Multiple-Choice-Frage muss der Kunde auswählen und die Antwort systemseitig richtig interpretiert werden.

Auch eine weitere Auswahl mit einer weiteren Analyzer-Konstruktion ist möglich und in natürlichen Verkaufssituationen üblich, um das Interesse des Kunden weiter einzugrenzen, daher wird diese Konstruktion sehr häufig verwendet. Zum Beispiel könnte der Benutzer das Produkt C wählen, für das es weitere Ausführungen gibt. In diesem Szenario würde also die Antwort des Agenten aus der C-Aktion der Antwort-Erwartungsregel eine weitere Antwort des Benutzers provozieren. Auf diese Weise entsteht eine verschachtelte Analyzer-Konstruktion, die in der Entwicklung von Wissensbasen sehr üblich ist. Beispielsweise könnte die Antwort des Agenten lauten: „Sie interessieren sich für unser Produkt C. Es gibt hier 3 verschiedene Ausführungen, x, y und z – welche interessiert Sie?“
Diese Art der Analyzer-Konstruktion könnte in unendlichen Verschachtelungen durchgeführt werden. Sinnvoll sind meist 3 oder 4 Ebenen, meist um ein Gesprächsthema genauer einzugrenzen.
Besonderheit bei individuellen Verknüpfungen
Die Ansteuerung einer Regel über den Schalter unter den Eigenschaften einer Regel und über einen individuellen Link aus den Aktionen heraus haben unterschiedliche Prioritäten.
Sofern eine Regel eine andere aus den generellen Eigenschaften ansteuert, gilt diese Verknüpfung zunächst für sämtliche in dieser Regel befindlichen Actions. Wenn nun aber weitere Actions eine individuelle Verknüpfung erhalten, so wird die generelle Verknüpfung ungültig und die individuelle Verknüpfung hat Vorrang vor der generellen. Weiterhin haben Funktionen, die auf den weiteren Prozessverlauf Einfluss nehmen (wie zum Beispiel thinkagain, jumpaway oder showmore) Priorität vor den allgemeinen und den individuellen Regeln.

Wie in der Abbildung dargestellt, würde demnach eine Regel A, die über die generelle Goto-Verknüpfung mit Regel B verknüpft ist, bei Aktivierung mit einer weiteren Aktion aus Regel B verknüpft reagieren (z. B. Aktion A 1 + Aktion B3). Würde die zweite Regelaktion aber in der Regel A aktiviert, so hätte die individuelle Goto-Referenzierung auf Regel C an dieser Stelle Vorrang vor der generellen Verknüpfung mit B, und eine Aktion aus der Regel C würde der aus der Regel A angefügt werden (z. B. Aktion A 3 + Aktion C 3).
Kombination aus Goto- und Analyzer-Verknüpfung
In manchen Regeln ist es notwendig, Goto- und Analyzer-Verknüpfungen zusammen anzuwenden. Das bedeutet zum Beispiel, dass entweder eine generelle Analyzer-Verknüpfung bzw. eine generelle Goto-Verknüpfung für eine Regel gewählt wird und dann in den einzelnen Actions heraus eine jeweils konträre Verknüpfung.
Anwendungsbeispiel

Beispielsweise kann es sinnvoll sein, beide Verknüpfungsarten zu kombinieren, wenn normalerweise aus einer Regel eine bestimmte Regel per Goto angesteuert wird, da von hier aus wiederum in der gesamten Wissensbasis auf andere Themen verteilt wird (Verteilerregel),
aus ein oder zwei Aktionen heraus aber per Analyzer ganz andere Regeln angesteuert werden, um hier weitere Bedingungen im Gespräch abzufragen. So könnte beispielsweise die Frage nach dem Alter des Benutzers dazu führen, dass über eine Analyzerregel verschiedene Altersgruppen unterschiedlichen Themengebieten zugeordnet werden, eine bestimmte Zielgruppe (z. B. zwischen 30 und 40 Jahren) nach weiteren Verkaufsrelevanten Informationen befragt wird, um das Gespräch weiter auf das Zielthema zu fokussieren und dem Benutzer detailliertere Antworten zu liefern.
Erstellen einer globalen Variable
Gehen Sie über die Reiter auf der linken Seiten in den Globals-Bereich. Hier kommen Sie zur Liste der globalen Variablen. Zum Ergänzen einer neuen Variablen klicken Sie auf den Neu-Button. Geben Sie als Namen den gewünschten Namen für die Variable ein. In der zweiten Spalte wird der Variablentyp gesetzt, der sich in einem Auswahldialog durch Anklicken ändern lässt. Wir wollen ein Wort speichern, deshalb wählen wir hier den Typ String. Den Wert der Variablen sollten Sie entsprechend dem Variablentyp sinnvoll vorbelegen. In unserem Beispiel nennen wir die Variable „username“ und belegen sie mit dem String „lieber Benutzer“ vor.
Der Schalter mit der Überschrift Profil gibt an, ob die globale Variable als Cookie gespeichert werden soll.
Ein kurzer Exkurs über Variablentypen:
| Boolean | Der Wert der Variablen ist ein Wahrheitswert, d. h. der Wert ist „true“ oder „false“. |
| Float | Der Wert der Variablen ist eine Zahl mit Nachkommastelle(n). |
| Integer | Der Wert der Variablen ist eine numerische Zahl ohne Nachkommastellen. Hiermit kann z. B. das Alter des Benutzers abgespeichert werden. |
| String | Der Wert der Variablen ist eine beliebige Zeichenfolge. Damit können Wörter gespeichert werden, die im Verlauf des Dialogs eingesetzt werden sollen, wie z. B. der Name des Benutzers. |
| Vector | Ein Vektor ist eine lineare Liste, die jede Art von Objekt aufnehmen kann. Auf die Elemente ist sowohl ein sequenzieller als auch wahlfreier Zugriff möglich. Die Länge eines Vektors ist veränderlich und Elemente können am Ende oder an einer beliebigen anderen Stelle eingefügt werden. |
Speichern eines Matches in einer globalen Variable
Nennt jemand seinen Namen, kann er unterschiedliche Formulierungen wählen, deshalb müssen in der Expression die verschiedenen Ausdrucksmöglichkeiten festgehalten werden. Der Name soll aus der Art der Formulierung erkannt, ausgewählt und gespeichert werden (man spricht hierbei vom sogenannten Matching). Gematcht werden können Begriffe, die über eine ODER-Trennung in Klammern gesetzt zur Auswahl gestellt werden oder auch über eine beliebige Eingabe. Die Matches werden von 1 bis x durchgezählt.
Erstellen Sie nun eine neue Regel mit dem Namen „Benutzername“ und klicken Sie unter Matching direkt auf Editiere Expression manuell. Für diese Regel sieht der Regelausdruck wie folgt aus:(("(ich hei(ss|ß)e|mein name (ist|lautet)) <MATCH1>(.*)<\MATCH1>"))
Unter Aktionen wollen wir nun eine entsprechende Antwort ergänzen und den Namen in die globale Variable speichern. Fügen Sie über das oberste Plus-Symbol einen ACTIONCODE hinzu. Den leeren Text-Antwort-Block können Sie über das Papierkorb-Symbol oben rechts löschen.
Wir wollen den Namen des Benutzers in die globale Variable „username“ speichern, denn dann kann sie im Text als Anrede verwendet werden und so die persönliche Ansprache des Benutzers ermöglichen. Unter die bereits vorhandene Befehlszeile schreiben Sie nun den Befehl:
username = MATCH1;
Wir können bereits in der Aktion dieser Regel den Namen einbauen, indem wir den Befehl in der ersten Zeile wie folgt ändern:
agent.say("Das ist schön, dass Sie bei mir vorbeischauen, " + MATCH1 + ".");
Klicken Sie auf Erstellen, um die Eigenschaften der Aktion zu speichern.
Verwenden von Cookies
Jede globale Variable kann genutzt werden, um Informationen über den Benutzer auf dessen Festplatte zu speichern. Eine solche Information nennt man Cookie. Wenn der Benutzer zum Beispiel seinen Namen genannt hat, kann man diesen speichern und bei der nächsten Anfrage dieses Benutzers eine persönliche Begrüßung formulieren, ohne nochmals den Namen abzufragen. Um eine globale Variable für die Übertragung freizuschalten, wählen Sie links den Reiter Globals aus. Im Arbeitsbereich erscheint eine Liste der globalen Variablen. In der Tabelle existiert eine Spalte Profil. Wenn eine Variable als Cookie genutzt werden soll, muss das Häkchen hier gesetzt werden. Bei Sessionbeginn werden alle markierten globalen Variablen mit den Werten aus dem Cookie gefüllt, falls dort die entsprechenden Werte gespeichert sind.
Verwenden von Patterns
Pattern dienen als Platzhalter und ermöglichen es, alternative Formulierungen an zentraler Stelle zu verwalten. Sie können in jeder Expression verwendet werden und den Regelausdruck erheblich vereinfachen.
In diesem Beispiel soll nun die zuvor angelegte Regel „Benutzername“ durch den Einsatz eines Pattern erweitert werden. Zunächst öffnen Sie links den Reiter Patterns. So kommen Sie zur Liste der bisherigen Patterns. Wollen Sie ein neues hinzufügen, klicken Sie auf den Neu-Button. Für dieses Beispiel vergeben Sie den Namen „MEIN_NAME“. Als Wert können Sie darunter, unter Wörter alle erdenklichen Anfangsformulierungen eingeben. Durch Drücken der Enter-Taste wird die Formulierung automatisch in einen regulären Ausdruck unter Pattern umgewandelt. Anschließend kann eine neue Formulierung hinzugefügt werden. Die Expression kann ebenso direkt unter Pattern eingegeben werden.
Für unser Beispiel wäre folgende Expression denkbar:ich hei(ss|ß)e|mein name (ist|lautet)|man nennt mich
Speichern Sie anschließend das Pattern über den Speichern-Button.
Wählen Sie nun im Kontext-Baum die Regel „Benutzername“ aus. In dem Regelausdruck können Sie nun den Ausdruck
„(ich hei(ss|ß)e|mein name (ist|lautet)) <MATCH1>(.*)<\MATCH1>“
ersetzen durch:"(#MEIN_NAME#) <MATCH1>(.*)<\MATCH1>"
FAQ-Regeln
Neben den Standardregeln ist es ebenso möglich, FAQ-Regeln zu erzeugen. FAQ-Regeln stellen eine Erweiterung der Standardregeln dar. Sie verfügen u. a. über eine Standardfrage und eine Priorität. Die Erzeugung einer FAQ-Regel gestaltet sich ähnlich wie das Anlegen einer Standardregel. Statt Regel hinzufügen wird der FAQ hinzufügen ausgewählt.
Aufgabe einer FAQ-Regel ist es, weitergehende Fragestellungen zu einem Thema zu erläutern. FAQ-Regeln, die mit gleichnamiger Funktionalität im Composer erstellt werden, werden durch eine Standardfrage im Frontend aufgerufen. Diese Standardfrage stellt im Frontend die FAQ dar. Da eine FAQ-Regel im Composer in den Expressions erweiterbar ist, kann die Regel bei entsprechender Expression auch durch zahlreiche Fragevarianten aufgerufen werden. Im Frontend abgebildet und vorgeschlagen wird jedoch ausschließlich die Standardfrage.
Bei der Erstellung einer FAQ erscheint ein Dialog, in dem der Name der Regel sowie die Standardfrage eingetragen wird, die so wie hier eingetragen im Frontend angezeigt wird. Wird diese Standardfrage vom User nach Anzeige im Frontend angeklickt oder wird der Text dieser FAQ gleichlautend eingegeben, wird durch eine automatisch erzeugte Expression diese FAQ aktiviert. Eine Änderung der Standardfrage kann in der FAQ-Verwaltung oder direkt in der Regel erfolgen.
Alle FAQ-Regeln werden in der FAQ-Verwaltung aufgelistet und können dort z. B. priorisiert werden. Die vergebenen Prioritäten bestimmen kontextabhängig die Darstellung von FAQs im Frontend. Wie FAQs im Frontend angezeigt werden, hängt von den Parametern in der Funktion displayFAQs() ab. Die FAQs können variabel angezeigt werden: Abhängig vom Kontext, dem die jeweilige FAQ zugeordnet ist, kann eine Anzahl der FAQs aus dem aktuellen Kontext und eine Anzahl der FAQs, die zufällig aus der Knowledgebase aufgerufen werden sollen, angezeigt werden. Dies erfolgt, um zu gewährleisten, dass dem User auch weitere FAQs aus Kontexten angeboten werden können, die sich nicht ausschließlich mit dem aktuellen Thema beschäftigen.
Zu jeder Regel kann man Fragevarianten hinzufügen. Um eine Fragevariante hinzuzufügen, können Sie in der Regelansicht der FAQ-Regel unter dem Reiter Matching entweder weitere Formulierungen eingeben oder direkt die Expression verändern.