QnA Maker知识库针对后续提示返回“在KB中找不到很好的匹配项”

时间:2019-07-10 08:07:03

标签: botframework qnamaker

我的QnA知识库存在一个问题,当我使用配置为返回答案的后续提示时,它会重新调整“在KB中找不到很好的匹配项”。

我设置了约200个问题/答案对,并且所有人都有后续提示,将每个问题/答案对链接到其他问题/答案对。但是,当我在QnA Maker中测试知识库时,得到的答案是“在KB中找不到答案”。

下面是一个示例:

我有一个问题/答案对,用于回答“什么是抑郁症”问题,该问题具有五个不同的后续提示-患病率,原因,类型,症状和相关问题:

Image of ‘What is depression’ QnA question/answer pair

如下图所示,流行率跟进提示配置为使用“抑郁症的普遍程度”问题/答案对进行回答:

Image of Prevalence follow-up prompt configuration

但是,当我使用QnA Maker的内置测试聊天机器人对其进行测试时,会得到“在KB中找不到匹配项”的答案:

Image of Prevalence follow-up prompt answer in test chatbot

检查结果时,我看到以下内容:

Image of inspection of Prevalence follow-up prompt answer

如您所见,没有答案返回,置信度得分为“无”。

其他任何人以前都曾见过此问题并有解决方案吗?

2 个答案:

答案 0 :(得分:2)

在QnA Maker门户之外,当前不支持跟进提示。有C#NodeJS个实验示例,它们演示了如何将此功能集成到您的机器人中。

由于您尚未指定语言偏好设置,因此我将使用C#,基本上需要从以下内容中更新您的QnA代码:

var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
    KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
    EndpointKey = _configuration["QnAEndpointKey"],
    Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);

var response = await qnaMaker.GetAnswersAsync(turnContext);

if (response != null && response.Length > 0)
{
    await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
    await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
}

收件人:

var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
    KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
    EndpointKey = _configuration["QnAEndpointKey"],
    Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);

var response = await qnaMaker.GetAnswersAsync(turnContext);
var qnaAnswer = response[0].Answer;
var prompts = response[0].Context?.Prompts;

if (prompts == null || prompts.Length < 1)
{
    await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
    // Set bot state only if prompts are found in QnA result
    newState = new QnABotState
    {
        PreviousQnaId = response[0].Id,
        PreviousUserQuery = query
    };

    outputActivity = CardHelper.GetHeroCard(qnaAnswer, prompts);
}

相关代码位于this file中,如您所见,其中还包含一些其他代码来通过后续提示存储进度,因此也许可能更容易将KB详细信息插入到示例中然后尝试一下,看看它是如何工作的,然后再将其移植到您的机器人中。

答案 1 :(得分:0)

在Matt的帮助下,我们对门户聊天机器人与QnA API进行了一些测试,发现门户聊天机器人存在错误,因为API返回了预期的答案。我正在通过在BotFramework文档页面here

上发布详细信息作为反馈来进行跟进