Dialogablauf steuern
In diesem Abschnitt wird erläutert, wie Ihr Dialogmodul verarbeitet wird, wenn während der Laufzeit eine Person mit Ihrem Assistenten interagiert. Informieren Sie sich, wie Sie den Dialogablauf vorteilhaft nutzen und den Ablauf gegebenenfalls ändern können.
Sie können den Ablauf eines Dialogs mit den folgenden Features beeinflussen:
Begriffsklärung
Die Begriffsklärung weist Ihren Assistenten an, den Kunden um Hilfe zu bitten, wenn die Eingabe des Kunden von mehr als einem Dialogmodulknoten beantwortet werden kann. Anstatt zu raten, welcher Knoten verarbeitet werden soll, listet der Assistent die am besten geeigneten Knotenoptionen auf und bittet den Benutzer, die zutreffende Option auszuwählen.
Die Begriffsklärung wird ausgelöst, wenn die folgenden Bedingungen zutreffen:
- Die Konfidenzbewertungen für die Absichten mit den nächsthöchsten Bewertungen, die in der Benutzereingabe erkannt wurden, liegen nahe an der Konfidenzbewertung für die am höchsten bewertete Absicht.
- Die Konfidenzbewertung der am höchsten bewerteten Absicht liegt über 0,2.
Auch wenn diese Bedingungen zutreffen, wird die Begriffsklärung nur angewendet, wenn mindestens zwei unabhängige Konten in Ihrem Dialogmodul die folgenden Kriterien erfüllen:
- Die Knotenbedingung enthält eine der Absichten, von denen die Begriffsklärung ausgelöst wurde.
- Im Knotennamensfeld ist eine Beschreibung für den Zweck des Knotens angegeben. (Alternativ kann eine Beschreibung im Feld für den externen Knotennamen enthalten sein.)
Ein Knoten mit einer booleschen Bedingung, die mit 'true' ausgewertet wird, wird wahrscheinlich in die Begriffsklärungsliste aufgenommen. Wenn der Knoten zum Beispiel nach einem Entitätstyp sucht und die Entität in der Benutzereingabe erwähnt wird, kann sie in die Liste aufgenommen werden. Solche Knoten lösen selbst keine Begriffsklärung aus, aber falls die Begriffsklärung ausgelöst wird, sind sie voraussichtlich in der resultierenden Begriffsklärungsliste enthalten.
Weitere Informationen
- Beispiel für eine Begriffsklärung
- Konfiguration der Begriffsklärung bearbeiten
- Knoten zum Inaktivieren auswählen
- Begriffsklärung inaktivieren
- 'Keine der obigen Optionen' verarbeiten
- Begriffsklärung testen
Beispiel für eine Begriffsklärung
Sie haben zum Beispiel ein Dialogmodul, das zwei Knoten mit Absichtsbedingungen enthält, die sich auf Stornierungsanforderungen beziehen. Die Bedingungen sind folgende:
- eCommerce_Cancel_Product_Order
- Customer_Care_Cancel_Account
Wenn der Benutzer i must cancel it today sagt, können die folgenden Absichten in der Eingabe erkannt werden:
[
{"intent":"Customer_Care_Cancel_Account","confidence":0.5602024316787719},
{"intent":"eCommerce_Cancel_Product_Order","confidence":0.46903514862060547},
{"intent":"Customer_Care_Appointments","confidence":0.29033891558647157},
{"intent":"General_Greetings","confidence":0.2894785046577454},
Wenn Sie den Test im Bereich "Ausprobieren" durchführen, können Sie mit dem Mauszeiger über das Augensymbol fahren, um die drei wichtigsten Absichten zu sehen, die bei der Testeingabe erkannt wurden.
Der Assistent ermittelt einen Konfidenzwert von 0.5618281841278076 (56%) für die Übereinstimmung des Benutzeraussage mit der Absicht #Customer_Care_Cancel_Account. Falls die Konfidenzbewertung einer anderen Absicht
nahe an der Bewertung dieser wichtigsten Absicht liegt, wird die Begriffsklärung ausgelöst. In diesem Beispiel hat die Absicht #eCommerce_Cancel_Product_Order eine nahe Konfidenzbewertung von 46%.
Wenn der Benutzer i must cancel it today sagt, werden daher wahrscheinlich beide Dialogknoten als brauchbare Kandidaten für eine Antwort angesehen. Um festzulegen, welcher Dialogmodulknoten verarbeitet wird, bittet der Assistent
den Benutzer, einen Knoten auszuwählen. Als Hilfe zur Auswahl zeigt der Assistent eine kurze Zusammenfassung der Zielsetzung der beiden Knoten an. Der Text der Zusammenfassung wird direkt dem Feld Name des Knotens entnommen. Wenn
das Feld Externer Knotenname vorhanden ist und eine Beschreibung enthält, wird stattdessen der Text aus diesem Feld verwendet.
Die in der Begriffsklärungsliste angezeigte Beschreibung stammt aus dem Namen des Knotens (oder Namen des externen Knotens), der in der Verzweigung, in der die Absichtsübereinstimmung auftrat, als letzter verarbeitet wurde. Weitere Informationen finden Sie unter Dienstprogrammknoten als Sprungziele inaktivieren.
Beachten Sie, dass der Assistent den Begriff today in der Benutzereingabe als Datum, d. h. als Erwähnung der Entität @sys-date erkennt. Wenn die Baumstruktur Ihres Dialogmoduls einen Knoten enthält, der sich auf die
Entität @sys-date bezieht, wird er wahrscheinlich ebenfalls in die Auswahlliste der Kandidaten für die Begriffsklärung aufgenommen. In der folgenden Abbildung ist er als Option Datumsangabe erfassen in der Liste aufgeführt.
Konfiguration der Begriffsklärung bearbeiten
Die Begriffsklärung wird automatisch für alle neuen Dialogskills aktiviert. Sie können die Einstellungen, die automatisch auf die Begriffsklärung angewendet werden, auf der Seite Optionen ändern.
Mit den folgenden Schritten können Sie die Einstellungen für die Begriffsklärung bearbeiten:
-
Klicken Sie unter Optionen auf Vereindeutigung.
-
Fügen Sie im Feld Begriffsklärungsnachricht einen Text hinzu, der vor der Liste der Optionen des Dialogmodulknotens angezeigt wird. Beispiel: Was möchten Sie tun?
-
Fügen Sie in das Feld Alles andere einen Text ein, der als zusätzliche Option angezeigt werden soll, die der Benutzer auswählen kann, wenn keine der anderen Optionen des Dialogknotens dem entspricht, was der Benutzer tun möchte. Beispiel: Keine der obigen Optionen.
Geben Sie eine kurze Nachricht an, die zusammen mit den anderen Optionen angezeigt werden kann. Die Nachricht muss weniger als 512 Zeichen umfassen. Informationen zum Verhalten des Assistenten, wenn ein Benutzer diese Option auswählt, enthält der Abschnitt 'Keine der obigen Optionen' verarbeiten.
-
Wenn Sie die Anzahl der Begriffsklärungsoptionen, die einem Benutzer angezeigt werden können, beschränken möchten, geben Sie im Feld Maximale Anzahl von Vorschlägen eine Zahl zwischen 2 und 5 an.
Ihre Änderungen werden automatisch gespeichert.
Sie können die API verwenden, um weitere Disambiguierungseinstellungen zu ändern. Diese Einstellungen umfassen die Sensitivität der Begriffsklärung, die sich darauf auswirkt, wie oft die Begriffsklärung ausgelöst wird und wie viele Auswahlmöglichkeiten eingeschlossen sind. Weitere Informationen finden Sie in der API-Referenz.
Knoten auswählen, die nicht als Begriffsklärungsoptionen angezeigt werden sollen
In die Begriffsklärungsliste können alle Knoten eingeschlossen werden.
- Es werden Knoten aller Ebenen der Baumhierarchie eingeschlossen.
- Es werden Knoten eingeschlossen, die sich auf Absichten, Entitäten, Sonderbedingungen, Kontextvariablen oder eine beliebige Kombination dieser Elemente beziehen.
Ziehen Sie in Betracht, einige Knoten aus der Begriffsklärungsliste auszuschließen.
-
Schließen Sie Stammknoten mit den Bedingungen
welcomeundanything_elseaus.Sofern Sie diesen Knoten keine zusätzlichen Funktionen hinzugefügt haben, sind sie in der Regel keine nützlichen Optionen für die Aufnahme in eine Disambiguierungsliste.
-
Dienstprogrammknoten als Sprungziele inaktivieren
Der Text in der Disambiguierungsliste wird aus dem Knotennamen (oder dem Namen des externen Knotens) des letzter Knoten, der bearbeitet wird in dem Zweig, auf den die Knotenbedingung zutrifft, zusammengestellt.
Schließen Sie in die Begriffsklärungsliste keine Dienstprogrammknoten ein, wie z. B. dem Benutzer zu danken, sich zu verabschieden oder Feedback zur Antwortqualität anzufordern, anstatt eine Wortfolge zu verwenden, die den Zweck des übereinstimmenden Stammknotens beschreibt.
Beispiel: Ein Stammknoten mit der übereinstimmenden Absichtsbedingung
#store-locationspringt möglicherweise zu einem Knoten, in dem Benutzer nach ihrer Zufriedenheit mit der Antwort gefragt werden. Wenn der Knoten#check_satisfactioneinen Knotennamen und eine Disambiguierung hat, dann wird der Name des angesprungenen Knotens in der Disambiguierungsliste angezeigt. Als Ergebnis wird zum Darstellen der VerzweigungCheck satisfactionstatt#store-locationaus dem Stammknoten die ZeichenfolgeGet store location(Zufriedenheit prüfen) in der Begriffsklärungsliste angezeigt. -
Stammknoten inaktivieren, die sich nur auf eine Entität oder eine Kontextvariable beziehen
Nur ein Knoten mit einer übereinstimmenden Absicht kann die Begriffsklärung auslösen. Wenn sie jedoch ausgelöst wird, wird jeder Knoten mit einer passenden Bedingung in die Disambiguierungsliste aufgenommen. Wenn Ihr Dialogmodul Knoten einschließt, die sich zum Beispiel auf Entitäten beziehen, kann die Reihenfolge von Knoten in der Baumhierarchie auf unerwartete Weise signifikant werden.
-
Die Reihenfolge der Knoten wirkt sich darauf aus, ob die Disambiguierung überhaupt ausgelöst wird. Betrachten Sie zum Beispiel das vorherige Szenario, das zuvor als Einführung in die Begriffsklärung verwendet wurde. Wenn der Knoten, der die Bedingung
@sys-dateerfüllt, höher im Dialogbaum platziert wäre als die Knoten, die die Bedingung#Customer_Care_Cancel_Accountund#eCommerce_Cancel_Product_Ordererfüllen, würde die Disambiguierung nie ausgelöst werden, wenn ein Benutzeri must cancel it todayeingibt. Ihr Assistent würde das genannte Datum (today) aufgrund der Platzierung der entsprechenden Knoten im Baum für wichtiger halten als die Absichtsverweise. -
Die Reihenfolge der Knoten wirkt sich darauf aus, welche Knoten in die Liste der Disambiguierungsoptionen aufgenommen werden. Es kann vorkommen, dass ein Knoten nicht wie erwartet als Option zur Begriffsklärung aufgelistet wird. Dies kann der Fall sein, wenn ein Bedingungswert auch von einen Knoten referenziert wird, der aus irgendeinem Grund nicht als Kandidat für die Begriffsklärungsliste infrage kommt. Beispielsweise kann eine Entität einen Knoten auslösen, der sich weiter oben im Dialogbaum befindet, aber nicht für die Disambiguierung aktiviert ist. Wenn dieselbe Entität die einzige Bedingung für einen Knoten ist, der für die Disambiguierung aktiviert ist, sich aber weiter unten im Baum befindet, ist er möglicherweise keine Disambiguierungsoption, weil Ihr Assistent ihn nie erreicht. Falls sie als Übereinstimmung mit dem früheren Knoten erkannt und übergangen wurde, wird der spätere Knoten unter Umständen vom Assistenten nicht verarbeitet.
-
Knoten aus der Begriffsklärung ganz ausschließen
Sie können für jeden Knoten in einem Dialogmodul oder in einem einzelnen Dialogmodulknoten verhindern, dass er in die Begriffsklärungsliste eingeschlossen wird.
Gehen Sie wie folgt vor, um die Begriffsklärung insgesamt zu inaktivieren:
-
Klicken Sie unter Optionen auf Vereindeutigung.
-
Stellen Sie den Schalter auf Aus.
Gehen Sie wie folgt vor, um zu verhindern, dass ein einzelner Dialogmodulknoten in die Begriffsklärungsliste eingeschlossen wird:
-
Klicken Sie auf einen Dialogknoten, um ihn in der Bearbeitungsansicht zu öffnen.
-
Klicken Sie auf Einstellungen.
-
Setzen Sie den Schalter Knotennamen anzeigen auf Aus.
Plus Wenn Sie dem Feld für den Namen des externen Knotens anstelle des Namens eine Beschreibung der Knotenzusammenfassung hinzugefügt haben, entfernen Sie diese.
Das Feld Externer Knotenname dient zwei Zwecken. Es stellt für die Kunden Informationen zum Knoten bereit, wenn er in eine Begriffsklärungsliste aufgenommen wird. Es beschreibt außerdem den Knoten in einer Chatzusammenfassung, die mit Service-Desk-Mitarbeitern geteilt wird, wenn ein Dialog an eine Person übertragen wird. Das Feld Name des externen Knotens ist nur in Skills sichtbar, die Teil einer Instanz eines kostenpflichtigen Plans sind. Falls das Feld Externer Knotenname Text enthält, wird dieser Text unabhängig davon verwendet, ob im Feld Name Text angegeben ist.
Testen Sie für jeden Knoten Szenarios, in denen zu erwarten ist, dass der Knoten in die Liste der Optionen zur Begriffsklärung aufgenommen wird. Das Testen gibt Ihnen die Möglichkeit, die Knotenreihenfolge oder andere Faktoren anzupassen, die sich auf das Funktionieren der Disambiguierung zur Laufzeit auswirken könnten. Weitere Informationen finden Sie unter Begriffsklärung testen.
Knoten gegenüber der Begriffsklärung priorisieren
Einige Knoten sind für Ihren Kunden so wichtig, dass Sie möchten, dass sie unabhängig von einer Disambiguierungsliste zurückgegeben werden, wenn der Assistent sicher ist, dass der Knoten einem Kundenwunsch entspricht.
Nehmen Sie zum Beispiel an, Sie verfügen über einen Knoten, der der Absicht #stolen_card (Karte gestohlen) entspricht. Wann immer nun eine eingehende Nachricht darauf hinweist, dass ein Kunde eine gestohlene Kreditkarte melden
möchte, soll die Antwort des Assistenten nach Möglichkeit nicht in einer Begriffsklärungsliste mit Optionen verloren gehen. Sie möchten, dass der Assistent mit einer einzigen Antwort antwortet, die dem Kunden hilft, dieses dringende Problem
zu lösen.
Führen Sie die folgenden Schritte aus, um Ihr Dialogmodul so zu entwerfen, dass ein einzelner Knoten gegenüber der Begriffsklärung priorisiert wird:
-
Klicken Sie in dem Knoten, der sich auf die Absicht bezieht, auf Anpassen, um mehrere bedingte Antworten zu aktivieren.
-
Fügen Sie eine bedingte Antwort mit der folgenden Bedingung hinzu:
intent.confidence > nDabei ist
neine Konfidenzbewertung, die für Ihre Trainingsdaten geeignet ist. Beispiel:intent.confidence > 0.7 -
Verschieben Sie die Antwort an die erste Position in der Liste der bedingten Antworten.
-
Klicken Sie auf das Zahnradsymbol, um die bedingte Antwort anzupassen.
-
Öffnen Sie im Abschnitt Assistentenreaktionen den Kontexteditor.
-
Fügen Sie die folgende Kontextvariable hinzu:
Kontextvariable Variabel Wert system{"prevent_disambiguation":true} -
Klicken Sie auf Speichern.
Alternativ können Sie auch einen Knoten auf der Stammebene mit einer Bedingung wie der folgenden hinzufügen:
#stolen_card && intent.confidence > 0.7Platzieren Sie diesen Knoten in der Baumstruktur höher als den Knoten, der auf die Bedingung
#stolen_cardreagiert, wodurch der Knoten in eine Begriffsklärungsliste eingeschlossen werden kann. -
Testen Sie Ihr Dialogmodul. Stellen Sie sicher, dass die Antwort des Knotens anstelle einer Begriffsklärungsliste zurückgegeben wird, wenn der entsprechende Schwellenwert für die Konfidenzbewertung erreicht wird.
'Keine der obigen Optionen' verarbeiten
Wenn ein Benutzer auf die Option Keine der obigen Optionen klickt, entfernt der Assistent die in der Benutzereingabe erkannten Absichten aus der Nachricht und übergibt die Nachricht erneut. Diese Aktion löst in der Regel den Knoten 'anything_else' in der Baumstruktur Ihres Dialogmoduls aus.
Um die Antwort anzupassen, die in dieser Situation zurückgegeben wird, können Sie einen Stammknoten mit einer Bedingung hinzufügen, die nach einer Benutzereingabe ohne erkannte Absichten sucht (schließlich wurden die Absichten entfernt) und
eine Eigenschaft suggestion_id enthält. Der Assistent fügt eine Eigenschaft suggestion_id hinzu, wenn die Begriffsklärung ausgelöst wird.
Fügen Sie einen Stammknoten mit der folgenden Bedingung hinzu:
intents.size()==0 && input.suggestion_id
Diese Bedingung wird nur durch eine Eingabe erfüllt, die eine Reihe von Disambiguierungsoptionen auslöst, von denen der Benutzer sagt, dass keine dem Ziel entspricht.
Fügen Sie eine Antwort hinzu, die den Benutzern mitteilt, dass Sie verstehen, dass keine der vorgeschlagenen Optionen ihren Bedürfnissen entspricht, und ergreifen Sie entsprechende Maßnahmen.
Auch hier ist die Platzierung der Knoten in der Baumstruktur von Bedeutung. Wenn ein Knoten, der sich auf einen in der Benutzereingabe erwähnten Entitätstyp bezieht, oberhalb des betreffenden Knotens in der Baumstruktur positioniert ist, dann wird die Antwort des übergeordneten Knotens angezeigt.
Begriffsklärung testen
Beim Testen kann sich die Reihenfolge ändern, in der die Optionen aufgelistet werden. Die Optionen selbst, die in die Disambiguierungsliste aufgenommen werden, können sich sogar von einem Test zum nächsten ändern.
Dieses Verhalten ist beabsichtigt. Im Rahmen der laufenden Entwicklung, die dem Assistenten helfen soll, automatisch aus den Entscheidungen des Benutzers zu lernen, werden die Auswahlmöglichkeiten und ihre Reihenfolge in der Disambiguierungsliste absichtlich zufällig gewählt. Die Änderung der Reihenfolge hilft, die Verzerrung zu vermeiden, die durch einen Prozentsatz von Personen entstehen kann, die immer die erste Option wählen, ohne vorher alle ihre Wahlmöglichkeiten sorgfältig zu prüfen.
Mit den folgenden Schritten können Sie die Begriffsklärung testen:
-
Geben Sie im Bereich "Ausprobieren" eine Testäußerung ein, die ein guter Kandidat für die Disambiguierung ist, d. h. zwei oder mehr Ihrer Dialogknoten sind so konfiguriert, dass sie ähnliche Äußerungen ansprechen.
-
Wenn die Antwort keine Liste mit Optionen für Dialogmodulknoten enthält, aus denen Sie auswählen können, überprüfen Sie, ob Sie Übersichtsdaten zu den Feldern für den Knotennamen (oder externen Knotennamen) hinzugefügt haben.
-
Wenn die Begriffsklärung weiterhin nicht ausgelöst wird, liegen die Konfidenzwerte für die Knoten möglicherweise nicht so dicht beieinander, wie Sie angenommen haben.
-
Um die Konfidenzbewertungen der drei wichtigsten Absichten anzuzeigen, die in der Eingabe erkannt wurden, bewegen Sie den Mauscursor in der Anzeige 'Ausprobieren' über das Augensymbol.
-
Um die Konfidenzscores aller Absichten anzuzeigen, die in der Benutzereingabe erkannt werden, fügen Sie vorübergehend
<? intents ?>am Ende der Knotenantwort für einen Knoten hinzu, von dem Sie wissen, dass er ausgelöst wird.Dieser SpEL-Ausdruck zeigt die in der Benutzereingabe erkannten Absichten als Array an. Das Array enthält den Namen der Absicht und gibt an, welchen Konfidenzwert der Assistent dafür ermittelt hat, dass die Absicht der Zielsetzung des Benutzers entspricht.
-
Um zu sehen, welche Entitäten, wenn überhaupt, in der Benutzereingabe erkannt wurden, können Sie die aktuelle Antwort vorübergehend durch eine einzelne Textantwort ersetzen, die den SpEL
<? entities ?>enthält.Dieser SpEL-Ausdruck zeigt die in der Benutzereingabe erkannten Entitäten als Array an. Das Array enthält den Entitätsnamen, den Ort der Entitätserwähnung, die Entitätserwähnungszeichenkette und den Vertrauensgrad, dass der Begriff eine Erwähnung des angegebenen Entitätstyps ist.
-
Um Details für alle Artefakte, einschließlich anderer Eigenschaften, wie z. B. den Wert der Kontextvariablen zum Zeitpunkt des Aufrufs, anzuzeigen, überprüfen Sie die gesamte API-Antwort. Weitere Informationen finden Sie unter Details zu API-Aufrufen anzeigen.
-
-
Entfernen Sie vorübergehend die Beschreibung im Namensfeld (oder im Feld für den Namen eines externen Knotens ) für mindestens einen der Knoten, die Sie als Disambiguierungsoption vorsehen.
-
Geben Sie die Testäußerung erneut in die Anzeige 'Ausprobieren' ein.
Wenn Sie der Antwort den Ausdruck
<? intents ?>hinzugefügt haben, enthält der Text eine Liste der Intentionen, die Ihr Assistent in der Testäußerung erkannt hat, sowie den Konfidenzwert für jede davon.
Absichten und Konfidenzbewertungen
Nachdem Sie den Test abgeschlossen haben, entfernen Sie alle SpEL-Ausdrücke, die Sie an Knotenantworten angefügt haben, oder fügen Sie die ursprünglichen Antworten wieder hinzu, die Sie durch Ausdrücke ersetzt hatten, und füllen Sie alle Felder Name oder Externer Knotenname erneut, in denen Sie Text gelöscht haben.
Abschweifungen
Eine Abschweifung tritt auf, wenn sich ein Benutzer in einem Dialogablauf befindet, der ein Ziel adressiert, aber Themen wechselt, um einen Dialogablauf einzuleiten, der ein anderes Ziel adressiert. Wenn keiner der Knoten in der Dialogmodulverzweigung dem Ziel der letzten Benutzereingabe entspricht, überprüft der Dialog die Stammknotenbedingungen auf eine entsprechende Übereinstimmung. Die für jeden Knoten verfügbaren Abschweifungseinstellungen bieten Ihnen die Möglichkeit, dieses Verhalten noch genauer anzupassen.
Mit den Abschweifungseinstellungen können Sie den Dialog zurück zu dem Dialogablauf leiten, der durch die Abschweifung unterbrochen wurde. Beispiel: Während der Benutzer ein neues Telefon bestellt, wechselt er das Thema und erkundigt sich über Tablet-Computer. Ihr Dialog kann die Frage nach Tablets beantworten und den Nutzer dann wieder zu der Stelle zurückbringen, an der er mit der telefonischen Bestellung aufgehört hat. Durch die Möglichkeit, nach Abschweifungen zum ursprünglichen Prozess zurückzukehren, können die Benutzer den Dialogablauf während der Ausführung besser kontrollieren. Sie können das Thema wechseln, dem Dialogablauf für das neue Thema bis zum Ende folgen und danach zu der Stelle zurückkehren, die Sie zuvor im ursprünglichen Thema erreicht hatten. Auf diese Weise kann der Dialogablauf noch besser ein tatsächliches Gespräch zwischen Menschen nachbilden.
Vorbereitende Schritte
Legen Sie beim Testen des gesamten Dialogmoduls fest, an welchen Stellen es sinnvoll ist, Abschweifungen und das anschließende Fortsetzen des ursprünglichen Dialogablaufs zuzulassen. Die folgenden Steuerelemente für Abschweifungen werden automatisch auf die Knoten angewendet.
-
Jeder Stammknoten in Ihrem Dialogmodul ist standardmäßig so ausgelegt, dass er als Ziel für Abschweifungen dienen kann. Untergeordnete Knoten können nicht das Ziel einer Abschweifung sein.
-
Knoten mit Slots sind so konfiguriert, dass sie keine abgehenden Abschweifungen zulassen. Alle anderen Knoten sind so konfiguriert, dass abgehende Abschweifungen zulässig sind. In den folgenden Situationen kann der Dialog jedoch nicht von einem Knoten abschweifen:
-
Wenn einer der Unterknoten des aktuellen Knotens die Bedingung
anything_elseodertrueenthält. Diese Bedingungen sind insofern besonders, als dass sie immer als wahr bewertet werden. Aufgrund dieses bekannten Verhaltens werden diese Knoten häufig in Dialogmodulen verwendet, um einen übergeordneten Knoten zu veranlassen, einen bestimmten untergeordneten Knoten als Nächstes auszuwerten. Um eine Unterbrechung der bestehenden Dialogablauflogik zu vermeiden, sind in diesem Fall keine Abschweifungen erlaubt. Abgehende Abschweifungen von einem solchen Knoten sind erst möglich, wenn Sie die Bedingung des untergeordneten Knotens ändern. -
Wenn der Knoten so konfiguriert ist, dass er zu einem anderen Knoten springt oder Benutzereingaben überspringt, nachdem er verarbeitet wurde. Der letzte Schrittabschnitt eines Knotens gibt an, was nach der Verarbeitung des Knotens geschieht. Wenn das Dialogfeld so konfiguriert ist, dass direkt zu einem anderen Knoten gesprungen wird, muss oft sichergestellt werden, dass eine bestimmte Reihenfolge eingehalten wird. Wenn der Knoten so konfiguriert ist, dass die Benutzereingabe übersprungen wird, dann bedeutet dies, dass der Dialog gezwungen wird, den ersten untergeordneten Knoten nach dem aktuellen Knoten der Abfolge zu verarbeiten. Um das Unterbrechen der bestehenden Dialogablauflogik zu vermeiden, ist in solchen Fällen keine Abschweifung zulässig. Um abgehende Abschweifungen von diesem Knoten zu ermöglichen, müssen Sie die Angaben im Abschnitt für den letzten Schritt ändern.
-
Abschweifungen anpassen
Der Anfang und das Ende einer Abschweifung wird nicht von Ihnen definiert. Der Verlauf einer Abschweifung während der Ausführungszeit steht allein im Ermessen des Benutzers. Sie können angeben, wie jeder Knoten in eine benutzergeführte Abschweifung einbezogen wird. Für jeden Knoten können Sie konfigurieren, ob eine Abschweifung:
- Startet von und verlässt den Knoten
- Die an anderer Stelle beginnen, können den Knoten anvisieren und betreten
- Derjenige, der an anderer Stelle beginnt und den Knoten betritt, muss zum unterbrochenen Dialogablauf zurückkehren, nachdem der aktuelle Dialogablauf abgeschlossen ist
Führen Sie die folgenden Schritte aus, um das Abschweifungsverhalten für einen einzelnen Knoten zu ändern:
-
Klicken Sie auf den Knoten, um die zugehörige Bearbeitungsansicht zu öffnen.
-
Klicken Sie auf Anpassen und dann auf die Registerkarte Abschweifungen.
Die Konfigurationsoptionen unterscheiden sich je nachdem, ob der von Ihnen bearbeitete Knoten ein Stammknoten, ein untergeordneter Knoten, ein Knoten mit untergeordneten Elementen oder ein Knoten mit Slots ist.
Von diesem Knoten abgehende Abschweifung
Wenn die oben aufgelisteten Situationen nicht zutreffen, haben Sie die folgenden Auswahlmöglichkeiten:
-
Alle Knotentypen: Wählen Sie aus, ob Benutzer Abschweifungen, die vom aktuellen Knoten abgehen, ausführen können, bevor das Ende der aktuellen Dialogmodulverzweigung erreicht ist.
-
Alle Knoten, die Unterknoten haben: Wählen Sie, ob die Konversation zum aktuellen Knoten zurückkehren soll, wenn die Antwort des Knotens angezeigt wurde und seine untergeordneten Knoten für das Ziel von Bedeutung sind. Setzen Sie den Schalter Zurückspringen nach Abweichungen zulassen, die nach der Antwort dieses Knotens ausgelöst wurden auf Nein, um zu verhindern, dass zum aktuellen Dialogmodulknoten zurückgekehrt und die Verarbeitung der zugehörigen Verzweigung fortgesetzt wird.
Wenn der Benutzer z. B. die Frage
Do you sell cupcakes?stellt und die AntwortWe offer cupcakes in a variety of flavors and sizesangezeigt wird, bevor der Benutzer das Thema wechselt, möchten Sie vielleicht nicht, dass das Dialogfeld an die Stelle zurückkehrt, an der es aufgehört hat. Vor allem, wenn die untergeordneten Knoten mögliche Folgefragen des Benutzers ansprechen und sicher ignoriert werden können.Wenn der Knoten jedoch auf die zugehörigen untergeordneten Knoten zurückgreift, um die Frage zu beantworten, kann es sinnvoll sein, dafür zu sorgen, dass der Dialog zur vorherigen Stelle zurückkehrt und die Verarbeitung der Knoten in der aktuellen Verzweigung fortsetzt. Die erste Antwort könnte beispielsweise
We offer cupcakes in all shapes and sizes. Which menu do you want to see: gluten-free, dairy-free, or regular?lauten. Wenn der Benutzer das Thema wechselt, möchten Sie vielleicht, dass der Dialog zurückkehrt, damit der Benutzer einen Menütyp auswählen und die gewünschten Informationen erhalten kann. -
Knoten mit Slots: Wählen Sie aus, ob Benutzer Abschweifungen von dem Knoten ausführen können, bevor alle Slots gefüllt sind. Setzen Sie den Schalter Abgehende Abschweifungen beim Füllen von Slots zulassen auf Ja, um abgehende Abschweifungen zu aktivieren.
Wenn Abschweifungen aktiviert sind und das Dialogmodul nach der Abschweifung zurückkehrt, wird die Anfrage für den nächsten leeren Slot angezeigt, damit der Benutzer weitere Informationen angeben kann. Wenn Abschweifungen inaktiviert sind, werden alle Benutzereingaben ignoriert, die keine Werte zum Füllen von Slots enthalten. Sie können jedoch nicht angeforderte Fragen einplanen, die Benutzer bei der Interaktion mit dem Knoten möglicherweise stellen werden, indem Sie entsprechende Slot-Handler definieren. Weitere Informationen finden Sie unter Slots hinzufügen.
-
Knoten mit Schlitzen: Legen Sie fest, ob der Benutzer zum aktuellen Knoten zurückkehren darf, indem Sie das Kontrollkästchen Nur von Slots zu Knoten, die eine Rückkehr zulassen, abschweifen aktivieren.
Wenn diese Option aktiviert ist, ignoriert das Dialogmodul bei der Suche nach einem Knoten zum Beantworten der abschweifenden Frage des Benutzers alle Stammknoten, deren Konfiguration die Rückkehr nach der Abschweifung nicht zulässt. Aktivieren Sie dieses Kontrollkästchen, wenn Sie verhindern möchten, dass Benutzer den Knoten dauerhaft verlassen können, bevor sie die erforderlichen Slots ausgefüllt haben.
Abschweifungen zu diesem Knoten
Mit den folgenden Auswahlmöglichkeiten können Sie das Verhalten von Abschweifungen zu einem Zielknoten festlegen:
-
Verhindern, dass Benutzer zu einem Zielknoten abschweifen. Weitere Informationen finden Sie im Abschnitt Abschweifungen zu Stammknoten inaktivieren.
-
Wenn Abschweifungen zu dem Knoten aktiviert sind, wählen Sie aus, ob das Dialogmodul zu dem Dialogablauf zurückkehren muss, von dem die Abschweifung abzweigt. Nachdem der Zweig des aktuellen Knotens abgearbeitet ist, kehrt der Dialogfluss zum unterbrochenen Knoten zurück. Um den Dialog danach wieder aufzunehmen, wählen Sie Rückkehr nach Abschweifung.
-
-
Klicken Sie auf Anwenden.
-
Testen Sie in der Anzeige 'Ausprobieren' das Ausführungsverhalten der Abschweifung.
Auch in diesem Fall können Sie den Anfang und das Ende der Abschweifung nicht definieren. Es liegt im Ermessen des Benutzers, wo und wann Abschweifungen auftreten. Sie können Einstellungen vornehmen, die festlegen, wie ein einzelner Knoten an einer solchen Veranstaltung teilnimmt. Da Abschweifungen so unvorhersehbar sind, ist es schwer zu wissen, wie sich Ihre Konfigurationsentscheidungen auf das Gesamtgespräch auswirken. Um die tatsächlichen Auswirkungen Ihrer Vorgaben zu überprüfen, müssen Sie das Dialogmodul testen.
Die Knoten '#reservation' und '#cuisine' stellen zwei Dialogmodulverzweigungen dar, die an einer einzelnen benutzergesteuerten Abschweifung teilnehmen können. Die für jeden einzelnen Knoten definierten Abschweifungseinstellungen ermöglichen diese Art von Abschweifung während der Laufzeit.
Tipps zur Verwendung von Abschweifungen
Benutzerdefinierte Rückmeldung: Für alle Knoten, bei denen Sie die Rückkehr von Abzweigungen ermöglichen, sollten Sie eine Formulierung hinzufügen, die den Benutzern mitteilt, wohin sie zurückkehren, wenn sie in einem vorherigen Dialogablauf aufgehört haben. Verwenden Sie in Ihrer Textantwort eine spezielle Syntax, um zwei Versionen der Antwort hinzuzufügen.
Wenn Sie keine Nachricht hinzufügen, wird dieselbe Textantwortung ein zweites Mal angezeigt, um den Benutzern mitzuteilen, dass sie zu dem Knoten zurückgekehrt sind, von dem sie abgewichen sind. Sie können den Nutzern verdeutlichen, dass sie zum ursprünglichen Gesprächsfaden zurückgekehrt sind, indem Sie eine eindeutige Nachricht angeben, die angezeigt wird, wenn sie zurückkehren.
Wenn die ursprüngliche Textantwort für den Knoten beispielsweise What's the order number? lautet, möchten Sie möglicherweise eine Nachricht wie die folgende anzeigen: Now let's get back to where we left off. What is the order number?,
wenn Benutzer zum Knoten zurückkehren.
Verwenden Sie zu diesem Zweck die folgende Syntax, um die Textantwort für den Knoten anzugeben:
<? (returning_from_digression)? "post-digression message" : "first-time message" ?>
Beispiel:
<? (returning_from_digression)? "Now, let's get back to where we left off.
What is the order number?" : "What's the order number?" ?>
Sie können keine SpEL-Ausdrücke und keine Kurzformsyntax in den Textantworten verwenden, die Sie hinzufügen. Die Kurzformsyntax darf generell nicht verwendet werden. Stattdessen muss die Nachricht erstellt werden, indem Sie die Textzeichenfolgen und die ausführliche SpEL-Ausdruckssyntax verknüpfen, um die vollständige Antwort zu bilden.
Verwenden Sie zum Beispiel die folgende Syntax, um eine Kontextvariable in eine Textantwort einzubinden, die Sie normalerweise als What can I do for you, $username? angeben würden:
<? (returning_from_digression)? "Where were we, " +
context["username"] + "? Oh right, I was asking what can I do
for you today." : "What can I do for you today, " +
context["username"] + "?" ?>
Details zur vollständigen SpEL-Ausdruckssyntax enthält der Abschnitt Ausdruck für Objektzugriff.
Rückkehr verhindern: In manchen Fällen möchten Sie möglicherweise die Rückkehr zu dem unterbrochenen Dialogablauf aufgrund einer Auswahl des Benutzers im aktuellen Dialogablauf verhindern. Verwenden Sie eine besondere Syntax, um die Rückkehr von einem bestimmten Knoten aus zu verhindern.
Angenommen, Sie verfügen über einen Knoten, der durch #General_Connect_To_Agent oder eine ähnliche Absicht bedingt wird. Wenn Sie eine Bestätigung des Benutzers erhalten möchten, bevor Sie ihn an einen externen Dienst weiterleiten,
können Sie eine Antwort wie Do you want me to transfer you to an agent now? hinzufügen. Sie können zwei untergeordnete Knoten hinzufügen, die sich auf #yes und #no beziehen.
Die beste Methode zum Verwalten von Abschweifungen für Verzweigungen dieses Typs besteht darin, für den Stammknoten die Rückkehr von Abschweifungen zuzulassen. Fügen Sie jedoch auf dem #yes-Knoten den SpEL-Ausdruck <? clearDialogStack() ?> in die Antwort ein. Beispiel:
OK. I will transfer you now. <? clearDialogStack() ?>
Dieser SpEL-Ausdruck verhindert, dass die Abschweifung von diesem Knoten zurückgegeben wird. Wenn der Benutzer die Bestätigungsabfrage mit 'yes' beantwortet, wird die entsprechende Antwort angezeigt und der unterbrochene Dialogablauf wird nicht fortgesetzt. Wenn der Benutzer mit 'no' antwortet, wird der unterbrochene Ablauf fortgesetzt.
Abschweifungen zu Stammknoten inaktivieren
Wenn ein Dialogablauf zu einem Stammknoten abschweift, wird dabei der Ablauf des Dialogmoduls eingehalten, das für den betreffenden Knoten konfiguriert ist. Der Ablauf kann eine Reihe von untergeordneten Knoten vor dem Ende der Knotenverzweigung verarbeiten und dann zu dem unterbrochenen Dialogablauf zurückkehren. Beim Testen stellen Sie möglicherweise fest, dass ein Stammknoten zu häufig oder zu unerwarteten Zeiten ausgelöst wird oder dass das Dialogmodul zu komplex ist und den Benutzer zu weit vom Kurs entfernt sendet. Wenn Sie Abschweifungen zu dem betreffenden Dialogmodul verhindern möchten, können Sie den Stammknoten so konfigurieren, dass er nicht als Ziel für Abschweifungen verwendet werden kann.
Führen Sie die folgenden Schritte aus, um Abschweifungen zu einem Stammknoten zu inaktivieren:
- Klicken Sie auf den Stammknoten, um ihn zum Bearbeiten zu öffnen.
- Klicken Sie auf Anpassen und dann auf die Registerkarte Abschweifungen.
- Setzen Sie das Kontrollkästchen Abschweifungen zu diesem Knoten zulassen auf Aus.
- Klicken Sie auf Anwenden.
Wenn Sie Abschweifungen zu mehreren Stammknoten verhindern möchten, ohne jeden Knoten einzeln zu bearbeiten, können Sie die betreffenden Knoten zu einem Ordner hinzufügen. Auf der Seite Anpassen des Ordners können Sie den Schalter Abweichungen in diesem Knoten zulassen auf Aus setzen, um die Konfiguration auf alle Knoten anzuwenden. Weitere Informationen finden Sie unter Dialog mit Ordnern organisieren.
Designaspekte
Häufige Nutzung von Rückgriffsknoten vermeiden: Viele Entwickler von Dialogmodulen fügen einen Knoten mit einer Bedingung true oder anything_else am Ende jeder Dialogmodulverzweigung ein, um zu verhindern,
dass Benutzer in der Verzweigung stecken bleiben. Dabei wird eine generische Nachricht zurückgegeben, wenn die Benutzereingabe keinem von Ihnen vorgesehenen Verlauf entspricht, der durch einen bereitgestellten Dialogmodulknoten verarbeitet
werden kann. Dialogabläufe, die dieses Designkonzept verwenden, lassen jedoch keine abgehende Abschweifung zu.
Überprüfen Sie für alle Verzweigungen, die dieses Konzept verwenden, ob es hilfreich wäre, abgehende Abschweifungen von den einzelnen Verzweigungen zuzulassen. Wenn die Eingaben des Benutzers nicht mit dem übereinstimmen, was Sie erwartet
haben, kann es sein, dass er eine Übereinstimmung mit einem ganz anderen Dialogablauf in Ihrem Baum findet. Anstatt mit einer generischen Nachricht zu antworten, können Sie den weiteren Verlauf des Dialogmoduls nutzen, um eine Antwort auf
die Frage des Benutzers zu finden. Außerdem kann der Stammknoten Anything else auf Eingaben reagieren, die von keinem anderen Stammknoten beantworten werden können.
Sprünge zu einem Abschlussknoten überdenken: Viele Dialoge sind so konzipiert, dass sie eine standardmäßige Schlußfrage stellen, z. B. Did I answer your question today? Benutzer können nicht von Knoten abschweifen,
die so konfiguriert sind, dass sie zu einem anderen Knoten springen. Mit anderen Worten: Wenn alle Endknoten Ihrer Verzweigungen so konfiguriert sind, dass sie zu einem gemeinsamen Endknoten springen, dann sind keine Abschweifungen möglich.
Ziehen Sie in Betracht, die Benutzerzufriedenheit durch Metriken oder mit anderen Methoden zu überwachen.
Testen Sie mögliche Abzweigungsketten: Wenn ein Benutzer vom aktuellen Knoten zu einem anderen Knoten abschweift, der Abschweifungen zulässt, könnte der Benutzer von diesem anderen Knoten abschweifen und dieses Muster wiederholen. Wenn der Startknoten in der Abschweifungskette für die Rückkehr nach der Abschweifung konfiguriert ist, wird der Benutzer anschließend zum aktuellen Dialogmodulknoten zurückgeführt. Alle nachfolgenden Knoten in der Kette, die nicht für die Rückkehr konfiguriert sind, werden nicht als Abschweifungsziele in Betracht gezogen. Szenarios mit mehreren Abschweifungen sollten getestet werden, um festzustellen, ob die einzelnen Knoten wie erwartet funktionieren.
Schrittbedingungen werden bei der Rückkehr von Umwegen nicht neu ausgewertet: Da die Schrittbedingung bereits vor dem Umweg ausgewertet wurde, wird sie bei der Rückkehr des Umwegs nicht erneut ausgewertet. Wenn Ihr Gesprächsablauf es erfordert, dass die Schrittbedingung erneut ausgewertet wird, fügen Sie eine erneute Aufforderung an dem Schritt hinzu, an dem die Abschweifung begann. Wenn Sie nicht im selben Schritt erneut aufgefordert werden wollen und um zu verhindern, dass Sie in die Irre gehen, führen Sie die folgenden Schritte aus:
- Gehen Sie zu Startseite > Aktionen > Von Ihnen erstellt.
- Wählen Sie die Aktion aus, bei der Sie Umleitungen verhindern möchten.
- Klicken Sie auf Aktionseinstellungen.
- Schalten Sie den Schalter auf Ein in Gesprächsthema wechseln.
- Wählen Sie Niemals zur ursprünglichen Aktion zurückkehren, nachdem Sie diese Aktion abgeschlossen haben.
- Klicken Sie auf Speichern.
Der aktuelle Knoten hat Vorrang: Knoten außerhalb des aktuellen Flusses werden nur dann als Umleitungsziele betrachtet, wenn der aktuelle Fluss die Benutzereingabe nicht berücksichtigen kann. In einem Knoten mit Slots, der Abschweifungen zulässt, sollten Sie den Benutzern deutlich machen, welche Informationen benötigt werden, und Bestätigungsanweisungen hinzufügen, die angezeigt werden, nachdem der Benutzer einen Wert eingegeben hat.
Beim Füllen von Slots kann jeder beliebige Slot gefüllt werden. Es kann daher vorkommen, dass in einem Slot unerwartet eine Benutzereingabe erfasst wird. Angenommen, Sie verfügen über einen Knoten mit Slots zum Erfassen der erforderlichen
Informationen für eine Tischreservierung zum Abendessen. In einem der Slots wird die Datumsangabe erfasst. Der Benutzer fragt möglicherweise What's the weather meant to be tomorrow?. Sie könnten einen Wurzelknoten haben, der
sich auf #forecast bezieht und dem Benutzer eine Antwort geben könnte. Da die Eingabe des Benutzers jedoch das Wort tomorrow enthält und der Reservierungsknoten mit Slots bearbeitet wird, geht Ihr Assistent davon aus, dass der
Benutzer stattdessen das Reservierungsdatum angibt oder aktualisiert. Der aktuelle Knoten wird immer bevorzugt behandelt. Wenn Sie eine eindeutige Bestätigungsnachricht definieren (z. B. Ok, setting the reservation date to tomorrow, kann der Benutzer das vorliegende Missverständnis leichter erkennen und korrigieren.
Wenn der Benutzer einen Wert angibt, der von keinem der Slots erwartet wird, stimmt er möglicherweise mit einem nicht zugehörigen Rootknoten überein, zu dem der Benutzer nie abschweifen wollte.
Führen Sie zahlreiche Testläufe durch, um das Abschweifungsverhalten genau auf Ihre Erfordernisse abzustimmen.
Wann sollten Sie Umwege anstelle von Slot-Handlern verwenden? Verwenden Sie für allgemeine Fragen, die Benutzer stellen könnten, einen Wurzelknoten, der Umwege zulässt, die Eingabe verarbeitet und dann zum laufenden Ablauf zurückkehrt. Versuchen Sie bei Knoten mit Slots, die Arten von Fragen zu antizipieren, die Benutzer beim Ausfüllen von Slots stellen möchten, und gehen Sie darauf ein, indem Sie dem Knoten Handler hinzufügen.
Wenn z. B. der Knoten mit Steckplätzen die Informationen sammelt, die zum Ausfüllen eines Versicherungsantrags erforderlich sind, dann sollten Sie vielleicht Handler hinzufügen, die sich mit allgemeinen Fragen zur Versicherung befassen. Wenn Sie jedoch Fragen dazu haben, wie Sie Hilfe erhalten können, oder zu den Standorten Ihrer Geschäfte oder zur Geschichte Ihres Unternehmens, verwenden Sie einen Knoten auf der Stammebene.