QnA Maker:如何统计会话内特定答复次数并切换默认无答案回复
QnA Maker 无答案次数统计实现方案
实现思路
通过会话级别的状态存储累计DefaultNoAnswer的触发次数,根据次数动态返回对应无答案话术。
具体步骤
- 新增状态字段
在对话状态配置中新增noAnswerTriggerCount字段,初始值为0,和当前会话绑定存储。 - 修改结果判断逻辑
找到QnAMakerBaseDialog中调用GetAnswersAsync获取QnA结果的代码分支:- 当QnA返回有效答案时,将
noAnswerTriggerCount重置为0 - 当命中
DefaultNoAnswer时,将noAnswerTriggerCount数值加1
- 当QnA返回有效答案时,将
- 动态返回话术
根据累计计数返回不同内容:- 计数小于3时,返回默认无答案提示:
抱歉,请您换一种表述方式提问可以吗? - 计数大于等于3时,返回升级提示:
抱歉,我无法理解您的问题,您可以发送邮件获取详细信息。
- 计数小于3时,返回默认无答案提示:
核心代码示例
// 读取当前会话的无答案触发计数 var noAnswerCount = await DialogStateAccessor.GetAsync(stepContext.Context, () => 0); var qnaResults = await QnAMakerService.GetAnswersAsync(stepContext.Context); if (qnaResults.Length > 0 && qnaResults[0].Score >= MinimumScoreThreshold) { // 命中有效答案,重置计数 noAnswerCount = 0; await stepContext.Context.SendActivityAsync(qnaResults[0].Answer); } else { // 命中无答案,计数累加 noAnswerCount++; var replyText = noAnswerCount < 3 ? "抱歉,请您换一种表述方式提问可以吗?" : "抱歉,我无法理解您的问题,您可以发送邮件获取详细信息。"; await stepContext.Context.SendActivityAsync(replyText); } // 存储更新后的计数到会话状态 await DialogStateAccessor.SetAsync(stepContext.Context, noAnswerCount);
内容的提问来源于stack exchange,提问作者mordeby
相关产品推荐
相关产品推荐

