我的QnA知识库存在一个问题,当我使用配置为返回答案的后续提示时,它会重新调整“在KB中找不到很好的匹配项”。
我设置了约200个问题/答案对,并且所有人都有后续提示,将每个问题/答案对链接到其他问题/答案对。但是,当我在QnA Maker中测试知识库时,得到的答案是“在KB中找不到答案”。
下面是一个示例:
我有一个问题/答案对,用于回答“什么是抑郁症”问题,该问题具有五个不同的后续提示-患病率,原因,类型,症状和相关问题:
如下图所示,流行率跟进提示配置为使用“抑郁症的普遍程度”问题/答案对进行回答:
但是,当我使用QnA Maker的内置测试聊天机器人对其进行测试时,会得到“在KB中找不到匹配项”的答案:
检查结果时,我看到以下内容:
如您所见,没有答案返回,置信度得分为“无”。
其他任何人以前都曾见过此问题并有解决方案吗?
答案 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
上发布详细信息作为反馈来进行跟进