【问题标题】:Getting LUIS entities inside a child dialog在子对话框中获取 LUIS 实体
【发布时间】:2017-06-06 18:16:08
【问题描述】:

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

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

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

如果我需要理解用户在说什么而不必解析字符串,我的选择是什么?可以选择使用 message.Text 调用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,这是动作属性之一(如果我没记错的话),这就是我我试图避免。我不想将一个答案(即 message.Text)映射到一个字段,我想将一个答案映射到多个字段。

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

【问题讨论】:

  • 是的。我的 VS 解决方案中有该项目,我在克隆 BotBuilder-Samples 存储库后复制了该项目。
  • @EzequielJadib 另外,是否可以在使用 ActionBinding 意图处理程序时获取 LuisResult 对象?

标签: c# botframework azure-language-understanding


【解决方案1】:

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

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

【讨论】:

  • Sub Actions 是指可以在没有上下文的情况下启动的上下文操作,对吗?但第二个选项似乎更好,因为我最终需要的是有一个“智能表单”,它根据 LUIS 检测到的实体填充字段,并且如果一个或多个字段被无效,则能够返回并再次提问链中另一个字段的值。所以我需要创建一个实现 ILuisAction 的模型,并且 QueryValueFromLuisAsync 将为该类中的属性分配值,对吧?
  • 如果可能,请查看我编辑的问题。感谢您迄今为止的所有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多