当QnAmaker没有任何响应显示提示对话框时,如何更改默认答案。
例如:
User1:你好
机器人:你好!
User1:你们卖汽车吗?
没有找到好的匹配!
与没有很好的匹配找到,bot应该提出一个可用的服务列表。
此外,在没有找到匹配的情况下,bot应该再次提出可用服务的列表。
如何才能做到这一点?
发布于 2018-05-09 21:46:45
QnAMakerAttribute有一个defaultMessage参数,允许您自定义“无匹配”响应文本:https://github.com/Microsoft/BotBuilder-CognitiveServices/blob/7866f5a1bc970bdd0be341b9ba24c74067edf57c/CSharp/Library/QnAMaker/QnAMaker/QnAMakerService/QnAMakerAttribute.cs
public class BasicQnAMakerDialog : QnAMakerDialog
{
public BasicQnAMakerDialog() : base(
new QnAMakerService(
new QnAMakerAttribute(
Utils.GetAppSetting("QnASubscriptionKey"),
Utils.GetAppSetting("QnAKnowledgebaseId"),
"**List of services: one, two three**",
0.30,
8))) {}
}还有一个等待合并的拉请求,它允许在此之前重写发送默认消息:https://github.com/Microsoft/BotBuilder-CognitiveServices/pull/87,似乎您唯一的选择是在您自己的代码库中复制https://github.com/Microsoft/BotBuilder-CognitiveServices/pull/87:QnAMakerDialog源。
发布于 2018-05-10 13:06:04
由于除了僵尸框架之外,还有几种使用QnA制造商的不同方法,所以对于这个问题,您目前有很多不同的建议,但此时微软提供的适当指导方针不多。(至少我没有发现)
我遇到了一个针对QnA制造者的git存储库的问题:在这里找到的。有几个不同的建议,所以我将在下面列出它们--至少要付出最大的努力。
选项1:假设您正在创建一个连接到QnA制造者的基本对话框类
public BasicQnAMakerDialog() : base(new QnAMakerService(new QnAMakerAttribute(ConfigurationManager.AppSettings["QnASubscriptionKey"], ConfigurationManager.AppSettings["QnAKnowledgebaseId"], "No good match in FAQ")))选项2:只需查找默认返回的特定字符串并“重写”它
protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
{
var answer = result.Answers.First().Answer;
Activity reply = ((Activity)context.Activity).CreateReply();
if (reply.Text.equals("Not Match Found!))
reply.Text = "No good match in FAQ";
await context.PostAsync(reply);
} 有些情况下,QnAMaker还在预览中,选项1不能像预期的那样工作。在我看来,备选方案2并不那么整洁,但它是一项体面的工作。
正如Eric在他的回答中所说的,在他们的git中,有一个主动的拉请求等待一个针对这个问题的合并。因此,最终这将是一件更容易处理的事情。在此之前,希望上述两种选择将有所帮助。
https://stackoverflow.com/questions/50253608
复制相似问题