c#-在子对话框中获取LUIS实体
作者:互联网
我正在使用Bot Framework,LUIS和ActionBinding开发一个机器人.
在我的一个意图处理程序中,我调用一个新对话框,该对话框具有StartAsync(IDialogContext上下文)和ReceiveMessageAsync(IDialogContext上下文,IAwaitable< IMessageActivity>结果)方法
据我了解,用户在等待时键入的消息(带有context.Wait(ReceiveMessageAsync))不会发送到LUIS,对吗?
因此,如果我不需要解析字符串就可以理解用户在说什么,那是我的选择?可以使用message.调用每个消息的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个字段,然后仅对其余未映射的字段提出问题.
解决方法:
我对此的第一反应是避免使用自定义子对话框,如果想要在其中具有复杂的逻辑甚至覆盖子操作中的IsValid方法,则不要使用SubActions并创建自己的验证器.
但是,如果不可能,那么我将考虑重用QueryValueFromLuisAsync方法,该操作应该是您要与之交互的模型.该函数将最终调用LUIS,并将尝试根据场景分配结果或返回另一个意图/动作.我会尝试一下.
标签:botframework,luis,c 来源: https://codeday.me/bug/20191111/2018868.html