C# 在子对话框中获取路易斯实体

C# 在子对话框中获取路易斯实体,c#,botframework,azure-language-understanding,C#,Botframework,Azure Language Understanding,我正在使用bot框架、LUIS和ActionBinding开发一个bot 在我的一个intent处理程序中,我调用了一个新对话框,其中包含方法StartAsync(IDialogContext上下文)和ReceiveMessageAsync(IDialogContext上下文,IAwaitable结果) 据我所知,用户在等待时键入的消息(使用context.Wait(ReceiveMessageAsync))不会发送给LUIS,对吗 因此,如果我需要在不解析字符串的情况下理解用户在说什么,我的选

我正在使用bot框架、LUIS和ActionBinding开发一个bot

在我的一个intent处理程序中,我调用了一个新对话框,其中包含方法
StartAsync(IDialogContext上下文)
ReceiveMessageAsync(IDialogContext上下文,IAwaitable结果)

据我所知,用户在等待时键入的消息(使用
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...
在这种情况下,当检测到意图时,没有初始实体,但可能存在,在这种情况下,bot不会要求提供已经给出的信息

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

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解决方案,我的验证器将在哪里运行?关于lasync方法?我需要验证,然后向用户发送一个问题,并理解他发送的回复(解析实体)。这在路易斯安那州是可能的吗

我想使用luisasync中的
queryvaluefrom
,但是在查看之后,我需要传递
paramName
,这是动作属性之一(如果我没有弄错的话),这正是我试图避免的。我不想将一个答案(即message.Text)映射到一个字段,我想将一个答案映射到多个字段


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

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


然而,如果这不是一种可能,那么我会考虑重用该方法,其中动作应该是您想与之交互的模型。该函数最终将调用

LUIS
,并根据场景尝试分配结果或返回另一个意图/操作。我想试试看。

你是在做动作绑定吗?是的。我的VS解决方案中有一个项目,是在克隆BotBuilder示例repo后复制的。@EzequielJadib另外,在使用ActionBinding意图处理程序时是否可以获取LuisResult对象?通过
子操作
您是指可以在没有上下文的情况下启动的上下文操作,对吗?但第二个选项似乎更好,因为我最终需要的是一个“智能表单”,它根据LUIS检测到的实体填充字段,并且能够在一个或多个字段被链中另一个字段的值无效时返回并再次提问。因此,我需要创建一个实现ILUIAction的模型,QueryValueFromLuisAsync将为该类中的属性赋值,对吗?如果可能,请参阅我编辑的问题。谢谢你到目前为止的帮助。