我目前已经将LUIS与我的聊天机器人整合在一起。
现在我想的是,在上述场景中的第2步之后,根据LUIS返回的INTENT,我希望后续的问题由QnA而不是BOT来呈现,基本上,我想用QnA maker来代替瀑布式的步骤,这样做可以吗,可行吗?
流程如下:-用户:-创建任务。
-->>>>>从LUIS返回的意向。
-->>>>>>根据返回的INTENT调用QnA。
QnA:-您想在哪个项目中创建任务?
USER:- (提供项目名称)
QnA:-任务的描述是什么?
用户:- (提供描述)
QnA Maker与LUIS的对比
什么时候使用QnA Maker与LUIS。从根本上讲,QnA Maker是一个搜索服务,而LUIS是一个查询理解服务。
- 使用QnA Maker。如果你有大量的数据,你需要用静态内容来回应。
- 使用LUIS:如果你希望能够根据查询的意图触发一个任务或工作流。
QnA Maker和LUIS可以用来相互补充,但使用顶级的 发出 在这两个部门之间进行仲裁。
解决这部分问题- 我想用QnA maker代替瀑布步骤。这样做可以吗,是否可行?
答案是不可以。QnA是你的知识库与搜索引擎服务的结合,它能动态地根据你提出的问题获取答案。
现在,继续为你的主要问题提供一个解决方案的建议。(这是我在我的代码中已经在做的事情)
你可以在用户信息收集到你的代码中的qna制造者之前就抓住它。你可以创建专门针对用户信息的提示,如果你的流程确定它是用户信息,你就会将其分支到你现在的用户信息收集系统(从而防止qna被触发)。
当它不是用户信息时(或者你不想采集的东西),你就让qna制造者的默认流程来接管。
var tempInputText = activity.Text;
if(tempInputText.Contains("batman") == true)
{
var tempActivityBatman = new Activity();
tempActivityBatman.Text = "did you just ask about batman, " + userProfile.Name + "?";
tempActivityBatman.Type = "message";
//await stepContext.Context.SendActivityAsync(_templateEngine.GenerateActivityForLocale("UnsupportedMessage", userProfile));
await stepContext.Context.SendActivityAsync(tempActivityBatman,cancellationToken);
return await stepContext.NextAsync();
}
上面的代码示例是一个快速的脏代码,我用它来导航特定的词,我想让聊天从常规代码中转移出来。