当 QnAmaker 没有任何响应以显示提示对话框时,如何更改默认答案。
例如:
用户 1:你好
Bot:你好!
用户1:你卖汽车吗?
机器人:没有找到合适的匹配!
机器人应该提出可用服务列表,而不是No good match found 。
此外,只要找不到匹配项,机器人应该再次提出可用服务列表。
这怎么可能实现?
当 QnAmaker 没有任何响应以显示提示对话框时,如何更改默认答案。
例如:
用户 1:你好
Bot:你好!
用户1:你卖汽车吗?
机器人:没有找到合适的匹配!
机器人应该提出可用服务列表,而不是No good match found 。
此外,只要找不到匹配项,机器人应该再次提出可用服务列表。
这怎么可能实现?
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在 此之前,您唯一的选择似乎是复制QnAMakerDialog您自己的代码库:QnAMakerDialog 源
因为有几种不同的方法可以将 QnA 制造商与 botframework 一起使用,所以对于您目前遇到的问题有很多不同的建议,但微软目前没有那么多适当的指导方针。(至少不是我发现的)
我遇到了针对 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 repo 中有一个活动的拉取请求等待针对这个问题的合并。所以最终这将是一件更容易处理的事情。在那之前,希望以上两个选项会有所帮助。