You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改QnAMaker无匹配响应时的默认回复以展示服务列表

修改QnAMaker无匹配响应为服务列表的实现方案

这个需求其实很常见,我来给你两种靠谱的实现方式,按需选择就行:

方式一:通过QnAMaker门户配置默认问答对

这是最简单的方式,不需要改代码,直接在知识库中配置即可:

  • 登录QnAMaker门户,打开你的目标知识库
  • 添加一个默认触发的问答对:把类似「无匹配」「不知道」「其他问题」这类宽泛的语句设为问题,答案则设置成你的可用服务列表,比如:

    目前我们提供以下服务:

    • 产品咨询
    • 售后支持
    • 技术答疑
    • 预约服务
  • 进入知识库的「设置」页面,找到「默认答案阈值」(或“置信度阈值”),调整到合适的数值(比如设为0,确保当没有任何匹配结果时,自动触发这个默认问答对)
  • 保存并重新发布知识库,这样后续用户提问无匹配时,就会自动返回你设置的服务列表了

方式二:在Bot代码中自定义无匹配逻辑

如果需要更灵活的控制(比如根据用户上下文动态调整服务列表,或者添加交互按钮),推荐用代码处理:
以Bot Framework为例,在调用QnAMaker获取结果后,判断是否无匹配,然后自定义回复:

C#代码示例

// 调用QnAMaker获取匹配结果
var qnaResponse = await _qnaMaker.GetAnswersAsync(turnContext);

// 判断是否无有效匹配(结果为空/置信度低于阈值)
if (qnaResponse == null || !qnaResponse.Any() || qnaResponse.First().Score < 0.5)
{
    // 构造服务列表回复
    string serviceList = @"目前我们提供以下服务:
- 产品咨询
- 售后支持
- 技术答疑
- 预约服务";
    await turnContext.SendActivityAsync(MessageFactory.Text(serviceList), cancellationToken);
}
else
{
    // 有匹配结果时返回默认答案
    await turnContext.SendActivityAsync(MessageFactory.Text(qnaResponse.First().Answer), cancellationToken);
}

Node.js代码示例

// 调用QnAMaker获取匹配结果
const qnaResults = await qnaMaker.getAnswers(turnContext);

// 判断是否无有效匹配
if (!qnaResults || qnaResults.length === 0 || qnaResults[0].score < 0.5) {
    // 构造服务列表回复
    const serviceList = `目前我们提供以下服务:
- 产品咨询
- 售后支持
- 技术答疑
- 预约服务`;
    await turnContext.sendActivity(serviceList);
} else {
    // 返回匹配到的答案
    await turnContext.sendActivity(qnaResults[0].answer);
}

注意事项

  • 阈值(比如示例中的0.5)可以根据你的知识库实际情况调整,避免误触发或漏触发
  • 如果用代码方式,记得确保QnAMaker的服务调用逻辑已经正确集成到你的Bot中

内容的提问来源于stack exchange,提问作者Norwen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:38:03