c# - 在子对话框中获取 LUIS 实体

标签 c# botframework azure-language-understanding

我正在使用 Bot Framework、LUIS 和 ActionBinding 开发机器人。

在我的一个意图处理程序中,我调用了一个新的 Dialog,它的方法是 StartAsync(IDialogContext context)ReceiveMessageAsync(IDialogContext context, IAwaitable<IMessageActivity> result)

据我了解,用户在等待时键入的消息(使用 context.Wait(ReceiveMessageAsync) )不会发送到 LUIS,对吗?

因此,如果我需要在不必解析字符串的情况下理解用户在说什么,我有哪些选择?可以调用 ILuisService.QueryAsync与消息。每条消息的文本是一个选项?

我希望能够检测用户键入的实体,以便将它们映射到缺失的字段。例如在这个对话中:

User: I want to book a flight.                   // LUIS detects intent
Bot: Ok. Can you tell me more about your flight? // child dialog is called to handle the rest of the conversation
User: I want to go to Madrid.
Bot: To fly to Madrid you can choose between company A, B or C.
User: I want to go with A tomorrow night
Bot: Ok, searching for available tickets for tomorrow night in A...

在这种情况下,当检测到意图时没有初始实体,但可能存在,在这种情况下,机器人不会要求提供已经提供的信息。

对于我的项目,一个简单的一对一问答表单是不够的。如果用户想要更改一个或多个参数,我还需要对先前设置的参数进行更多验证和确认(即,我需要返回所有参数并检查更改的参数是否影响它们)。例如:

User: Wait, I want to fly to Barcelona instead.
Bot: Company A does not fly to Barcelona. You can choose between C and D.
User: Ok I want to fly with C.
Bot: There are tickets available for tomorrow night in company C. Keep the flight for tomorrow night?
User: yes.

任何关于最佳实践的提示或指南都会有很大帮助。

提前致谢。


编辑:

使用 Sub Action 解决方案,我的验证器将在哪里运行?在 FulfillAsync 方法上?我需要验证然后向用户发送问题并理解他发送的回复(解析实体)。这在 LuisAction 中可能吗?

我想使用 QueryValueFromLuisAsync但看了之后,我需要通过 paramName ,这是 Action 属性之一(如果我没记错的话),这就是我要避免的。我不想将一个答案(即 message.Text)映射到一个字段,我想将一个答案映射到多个字段。

假设我需要填充一个具有 6 个属性的模型。如果机器人向用户提出一个问题,并且在他的答复中有 3 个实体,我想将这些实体映射到 3 个字段,然后只对剩余的未映射字段提出问题。

最佳答案

我对此的第一 react 是避免使用自定义子对话框并使用 SubActions如果你想在那里有复杂的逻辑甚至覆盖 IsValid 并创建你自己的验证器来自子操作的方法。

但是,如果这不可能,那么我会考虑重新使用 QueryValueFromLuisAsync方法,其中操作应该是您要与之交互的模型。该函数最终将调用 LUIS并将根据场景尝试分配结果或返回另一个意图/ Action 。我会试一试。

关于c# - 在子对话框中获取 LUIS 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44397082/

相关文章:

c# - 无法更新到 Web API 2.1

node.js - 如何在 node.js 中捕获 messageBack

c# - 多委托(delegate)异步操作仅适用于 Begin Invoke

c# - C# Windows Phone XNA 应用程序中的可选参数

azure - 我们可以动态添加文本字段吗

botframework - 无法在 Microsoft 聊天机器人注册中进行测试

node.js - LUIS Bot 无法在用户话语中找到实体

azure - 如何让 Microsoft Azure Speech To Text 在程序运行时开始转录? (统一,C#)

node.js - Botframework 提示对话框直到用户完成

c# - SignalR 强类型集线器 TypeLoadException