2

我正在使用QnAMakerDialog并且无法弄清楚如何覆盖“未找到”。我可以覆盖RespondFromQnAMakerResultAsync,但没有找到答案时不会调用它。我尝试将默认消息设置为 null 或空字符串,但随后QnAMakerDialog自动响应“未找到匹配项!” 当它找不到匹配项时!

找不到匹配项时我不想要消息,因为我只是将消息转发到LuisDialog. 我如何停止这个消息!!!

旁注:我知道有些 Gary 有不同版本的 aQnAMakerDialog可以做到这一点,但我真的很想使用微软的标准版本。这可能吗?

4

1 回答 1

4

那个“加里家伙”就是加里漂亮。他在 . 上做得很好QnAMaker,特别是几天前,通过一个包提供对 QnAMaker API v3 的访问,与QnAMakerDialog.

对于每个来到您的问题并寻找类似答案的用户,您绝对应该看看他的包:

使用他的包,您可以直接覆盖NoMatchHandler并完成。


对于那些不愿意使用第三方包的人,即使你有代码,“官方”QnAMakerDialog来自Microsoft.Bot.Builder.CognitiveServices包,来源是……也在GitHub 上

因此,如果您查看,QnAMakerDialog.cs您会发现您需要的一切都在MessageReceivedAsync方法内部,特别是消息是通过这一发送的:

await context.PostAsync(qnaMakerResults.ServiceCfg.DefaultMessage);

您还可以看到:

  • MessageReceivedAsync不能轻易被覆盖

  • 即使您隐藏此方法new并复制粘贴除该行之外的所有方法,您也会遇到一些serviceCfg内部属性的问题,因此不能在您自己的命名空间中使用

所以最后一个选择是从 Microsoft Github 的项目中复制所有 QnA 类,只是为了删除这一行......


编辑:

正如您在https://github.com/Microsoft/BotBuilder-CognitiveServices上看到的,围绕这个问题有几个问题悬而未决:

我希望很快会在包中进行集成,因为已经提供了几个 Pull Request

于 2018-02-27T22:38:35.767 回答