【发布时间】:2019-09-02 07:08:55
【问题描述】:
我想更改 Q&A Maker Azure Framework Bot 中的默认答案,但我找不到响应此值的字段。我正在阅读文档(但看起来它使用的是较旧的界面),并且我正在尝试查找此字段但有结果。
这是我当前的配置屏幕:
【问题讨论】:
我想更改 Q&A Maker Azure Framework Bot 中的默认答案,但我找不到响应此值的字段。我正在阅读文档(但看起来它使用的是较旧的界面),并且我正在尝试查找此字段但有结果。
这是我当前的配置屏幕:
【问题讨论】:
我假设您指的是这些文档:QnaMaker - Change Default Answer
它们有点令人困惑,但它们的关键部分是:
您可以在机器人或应用程序代码中覆盖此默认响应 调用端点。
文档有这张图片的地方:
它们的实际意思是,在 QnAMaker 测试控制台中,您可以从应用程序设置中编辑默认答案。请务必保存、训练和发布您的应用,否则设置可能不会显示。
还有一种方法可以将此设置用于机器人中的默认答案:
在 Node/JS 中,您的机器人根本不会收到 DefaultAnswer。如果没有匹配,它不会收到任何信息,因此您必须使用以下代码对其进行硬编码:
const qnaResults = await this.qnaMaker.getAnswers(context);
// If an answer was received from QnA Maker, send the answer back to the user.
if (qnaResults[0]) {
await context.sendActivity(qnaResults[0].answer);
// If no answers were returned from QnA Maker, show this reply.
// Note: .getAnswers() does NOT return the default answer from the App Service's Application Settings
} else {
const defaultAnswer = 'No QnA Maker answers were found. This example uses a QnA Maker Knowledge Base that focuses on smart light bulbs. To see QnA Maker in action, ask the bot questions like "Why won\'t it turn on?" or "I need help."'
await context.sendActivity(defaultAnswer);
}
【讨论】:
在创建 Azure Web Bot 时,默认的 Web 聊天客户端之一是 Microsoft 的 BotBuilder-Samples 项目的一个分支,特别是 49 - QnAMaker All Features
Dialog/QnAMakerBaseDialog.cs的源代码定义了常量DefaultNoAnswer:
public const string DefaultNoAnswer = "No QnAMaker answers found.";
然后在从GetQnAResponseOptionsAsync 返回响应时使用该值:
protected async override Task<QnADialogResponseOptions> GetQnAResponseOptionsAsync(DialogContext dc)
{
var noAnswer = (Activity)Activity.CreateMessageActivity();
noAnswer.Text = DefaultNoAnswer; // <- used right here
var cardNoMatchResponse = (Activity)MessageFactory.Text(DefaultCardNoMatchResponse);
var responseOptions = new QnADialogResponseOptions
{
ActiveLearningCardTitle = DefaultCardTitle,
CardNoMatchText = DefaultCardNoMatchText,
NoAnswer = noAnswer,
CardNoMatchResponse = cardNoMatchResponse,
};
return responseOptions;
}
这个特定的示例 repo 似乎没有在任何地方利用 DefaultAnswer 配置密钥。
您可以通过更新noAnswer.Text 来选择在可用时包含它,如下所示:
- noAnswer.Text = DefaultNoAnswer;
+ noAnswer.Text = this._configuration["DefaultAnswer"] ?? DefaultNoAnswer;
您还必须通过依赖管理系统传入配置对象。有关完整示例,请参阅 this commit。
【讨论】:
将 qamakerBaseDialog.js 中的行更改如下
var noAnswer = ActivityFactory.DefaultNoAnswer;
删除 ActivityFactory。并重建代码。
constructor(knowledgebaseId, authkey, host) {
//ActivityFactory.
var noAnswer = DefaultNoAnswer;
var filters = [];
super(knowledgebaseId, authkey, host, noAnswer, DefaultThreshold, DefaultCardTitle, DefaultCardNoMatchText,
DefaultTopN, ActivityFactory.cardNoMatchResponse, filters, QNAMAKER_BASE_DIALOG);
this.id = QNAMAKER_BASE_DIALOG;
}
【讨论】: