Zusammenfassung der Erfahrungen im Chatbot-Design basierend auf Zustandsmaschinen

WBOY
Freigeben: 2023-04-11 18:31:03
nach vorne
1541 Leute haben es durchsucht

Um die Bedürfnisse und Verbesserungsrichtungen intelligenter Roboterprojekte besser zu verstehen, müssen wir häufig einige Tools entwickeln. Von den verschiedenen Robotikprojekten, an denen ich beteiligt war, konnten die meisten die Produktanforderungen erfolgreich erfüllen. Durch diese Praktiken wurde uns zutiefst klar, dass wir die bestehende Roboterdefinitionssprache erheblich verbessern müssen, wenn wir weiter vorankommen und uns verbessern wollen.

  • Vereinfachen Sie den Erstellungsprozess von Bots, die komplexe Konversationsabläufe erfordern.
  • Maximieren Sie die Wiederverwendbarkeit, indem Sie Module und Dialogpfade wiederverwenden, die in der Vergangenheit definiert wurden, um Bots zu erstellen.

In herkömmlichen Praktiken ist dies nicht einfach, da die Absichtsdefinition mit teilweisen Reihenfolgebeschränkungen vermischt ist und die Freiheit des Dialogs einschränkt Wege. Dies ist ausreichend für den Umgang mit „offenen“ Bots (häufig bei Bots im FAQ-Stil), bei denen die meisten Fragen in sich geschlossen und immer verfügbar sind. Bei „geschlosseneren“ Bots sind die potenziellen Konversationsbeschränkungen jedoch viel größer (z. B. ein Bot, der zum Buchen von Tickets online verwendet wird).

Zusammenfassung der Erfahrungen im Chatbot-Design basierend auf Zustandsmaschinen

Um die Funktionalität der Chatbot-Definitionssprache auf ein neues Niveau zu bringen, haben wir in einigen Projekten DSLs eingeführt, die näher an der Semantik von Zustandsmaschinen liegen und die Absichtsdefinition vollständig mit Konvertierungsregeln integrieren, die den Roboter so steuern, dass er fest ausgeführt wird -Punkt verfügbare Absichten Trennung, dies hat folgende Vorteile:

  1. Vorherige Absichten können im neuen Roboter wiederverwendet werden, auch wenn der Dialogpfad anders eingestellt ist.
  2. Komplexe Dialogabläufe können mithilfe von Zustandsmaschinen definiert werden, sodass der Bot eine klare und präzise Semantik beibehalten kann.
  3. Zur Kontrolle von Übergängen können komplexe Staatswächter geschaffen werden. Versetzen Sie den Bot basierend auf Benutzereingaben, bevorstehenden Ereignissen und früheren Daten, Konversationsparametern usw. in einen neuen Status.
  4. Staatskörper können verwendet werden, um komplexe Konversationslogik als Reaktion auf Benutzeranfragen zu speichern.
  5. Roboter können modularisiert werden, um Teile der Zustandsmaschine in anderen Robotern wiederzuverwenden.
  6. Lokale Fallbacks können als Teil des Stateful-Verhaltens definiert werden. Zusätzlich zum standardmäßigen globalen Fallback können Sie auch lokale Fallbacks mit Zuständen verknüpfen, um Fehler im Kontext des Zustands zu behandeln, z. B. die Anzeige einer Nachricht, die dem Benutzer bei der Beantwortung einer vom Bot in einem bestimmten Zustand der Konversation gestellten Frage hilft.

Intent-Definitionssprache

Die Absichtsdefinition ist jetzt vom Ausführungsteil entkoppelt, ist aber immer noch eine separate Untersprache. Für jede Absicht müssen wir lediglich einige Trainingssätze bereitstellen, damit der Roboter die Absicht der Äußerung des Benutzers erkennen und daraus die erforderlichen Parameter extrahieren kann.

Als Beispiel haben wir einen einfachen Bot, der nur zwei Arten von Benutzeräußerungen versteht: Begrüßungen und Namensnennung. Wir können für jeden Äußerungstyp ein paar Beispielsätze bereitstellen und den Roboter lernen lassen, diese zu erkennen. Wenn der Benutzer eine Äußerung eingibt, führt der Roboter basierend auf seiner Absicht die entsprechende Aktion aus und extrahiert daraus die erforderlichen Parameter.

intent Hello {
inputs {
"你好"
"早上好"
}
}
 
intent MyNameIs {
inputs {
"我的名字叫小明"
"我是小明"
"你可以叫我小明"
}
creates context Greetings {
set parameter name from fragment "小明" (entity any)
}
}
Nach dem Login kopieren

Wir stellen für jede Absicht einige Beispielsätze zur Verfügung, um dem Roboter beizubringen, sie zu erkennen. Darüber hinaus erheben wir in manchen Fällen auch einige Parameter im Kontext (z. B. den Namen des Nutzers), um in Zukunft persönlicher auf den Nutzer eingehen zu können.

Wir haben nicht angegeben, welche Absicht der Bot zuerst zu erfüllen versuchen soll, das ist Teil der Ausführungssprache. Dieser Ansatz ermöglicht es uns, diese Absichten wiederzuverwenden (z. B. müssen wir in einem anderen Bot den Benutzer möglicherweise nach seinem Namen fragen, nicht erst nach der Begrüßungsabsicht).

Execution Definition Language

Verwenden Sie Ausführungsdateien, um eine Zustandsmaschine zu definieren, die beschreibt, wie der Roboter auf Absichten/Ereignisse reagiert und Übergänge durchführen kann. Dadurch kann der Bot-Designer die Ausführungsdatei anzeigen und den gesamten Konversationsablauf verstehen.

Jeder Zustand in der Ausführungssprache enthält 3 Teile

  • Körper (optional): Die Reaktion, die der Roboter ausführt, wenn er in den Zustand eintritt.
  • Next (erforderlich): Definiert die ausgehende Konvertierung, ausgedrückt als condition –> State. Wenn ein Ereignis/eine Absicht empfangen wird, wird die Bedingung ausgewertet und wenn der Übergang erfüllt ist, wechselt die Ausführungs-Engine in den angegebenen Zustand und führt die entsprechende Reaktion aus. Es ist zu beachten, dass Konvertierungsbedingungen sehr komplex sein können. Sie sind echte Wächter, was bedeutet, dass der Übergang nicht navigierbar ist und die Engine in ihrem aktuellen Zustand verbleibt, wenn die gesamte Bedingung nicht erfüllt ist.
  • Fallback (optional): Dieser Abschnitt kann beliebigen Code enthalten (genau wie der Abschnitt Body), der ausgeführt wird, wenn die Engine keinen navigierbaren Übergang findet.

Das Ausführungsmodell enthält außerdem 2 Sonderzustände:

  • Init:是创建用户会话时进入的常规状态。它可以包含 Body、_Next_和 Fallback 部分。
  • Default_Fallback:它只能包含 Body 部分,并且不能作为转换的目标状态。该状态表示在当前状态中未定义本地回退时执行的默认回退代码。该状态可用于打印通用错误消息(例如,“抱歉,我没明白您的意思”),而本地回退则可以打印针对当前状态的定制消息(例如,“请回答是或否”)。

最后,一个状态可以定义一个单一的通配符转换(使用保留字符___作为转换条件),当计算状态主体时将自动导航。这使我们能够在多个地方重用相同的代码并模块化执行逻辑。下面是一个简单的机器人示例,它只回复问候意图,询问用户名并向用户问好。这个机器人的回复可以通过我们基于 React 的聊天小部件显示。

//We can always have an init state in case we need to initialize some bot parameters (e.g. welcoming message)
Init {
Next { 
//Here we state that the bot will first listen for an utterance matching the Hello intent, it will ignore anything else
intent == Hello --> HandleHello
}
}
HandleHello {
Body {
 ReactPlatform.Reply("你好, 你叫什么名字?")
}
Next {
//We wait for the user to input the name, no other transition is possible at this point
//Obviously, in more complex bots we may have several possible outgoing transitions in a given state
intent == MyNameIs --> HandleMyNameIs
}
}
HandleMyNameIs {
Body {
ReactPlatform.Reply("你好 " + context.get("Greetings").get("name"))
}
Next {
// An automatic transition to the Init state since at this point the conversation is finished and we can start again
_ --> Init
}
}
// Default Fallback state could go here
Nach dem Login kopieren


Das obige ist der detaillierte Inhalt vonZusammenfassung der Erfahrungen im Chatbot-Design basierend auf Zustandsmaschinen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage