如何修改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
相关产品推荐
相关产品推荐

