如何在Q&A Azure机器人中设置默认答案

时间:2019-04-11 15:22:21

标签: azure bots qnamaker

我想更改Q&A Maker Azure Framework Bot中的默认答案,但我找不到响应此值的字段。我读了文档(在我看来,它没有更新),并尝试找到此字段但有结果。在附件中,我发送了一个应根据文档显示的屏幕。

MSAzureBotScreen

3 个答案:

答案 0 :(得分:1)

创建Azure Web Bot时,默认的Web Chat客户端之一是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;
}

这个特定的示例存储库似乎在任何地方都没有利用DefaultAnswer配置键。

您可以选择通过以下方式更新noAnswer.Text来添加它:

- noAnswer.Text = DefaultNoAnswer;
+ noAnswer.Text = this._configuration["DefaultAnswer"] ?? DefaultNoAnswer;

您还必须通过依赖关系管理系统传递配置对象。有关完整示例,请参见this commit

答案 1 :(得分:1)

如下更改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;
    }

答案 2 :(得分:0)

我假设您是指以下文档:QnaMaker - Change Default Answer

它们有点混乱,但是它们的关键部分是:

  

您可以在漫游器或应用程序代码中覆盖该默认响应   呼叫端点。

文档中的图片如下:

enter image description here

它们的实际含义是在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);
}