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.
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).
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:
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) } }
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).
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
Das Ausführungsmodell enthält außerdem 2 Sonderzustände:
最后,一个状态可以定义一个单一的通配符转换(使用保留字符___作为转换条件),当计算状态主体时将自动导航。这使我们能够在多个地方重用相同的代码并模块化执行逻辑。下面是一个简单的机器人示例,它只回复问候意图,询问用户名并向用户问好。这个机器人的回复可以通过我们基于 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
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!