QnA Maker:如何计算会话中的特定答案?

QnA Maker: How to count a specific answer in a session?

我有 QnA Maker 聊天机器人。我想这样做:如果机器人在一次会话中给出 DefaultNoAnswer 3 次,我想显示不同的 DefaultNoAnswer。如何计算 QnAMakerBaseDialog 中的 DefaultNoAnswers

例如: 客户:asdaaasd

Bot:抱歉,你能用不同的方式表达你的问题吗?

客户:dsjhdsgjdsa

Bot:抱歉,你能用不同的方式表达你的问题吗?

客户:aasdjhajds

机器人:抱歉,我无法回答这个问题。发送电子邮件以获取详细信息。

我发现处理此问题的最佳方法是使用对话状态变量。我在帮助程序中设置了默认消息(即我有一个帮助程序文件,可以调用 QnA Maker,检查置信度,并在置信度低或无人接听的情况下发送默认消息)。如果您使用的是类似的情况,则可以在那里增加状态变量。如果您直接使用 QnA Maker 的默认答案,您仍然需要在将响应发送给用户之前对每个结果进行一些检查。我没有使用过那个方法,但我可能只是检查默认答案的结果并相应地增加变量。

这是第一种情况的示例。我在这里假设您已经熟悉管理用户和对话状态。

                var qnaResult = await QnAServiceHelper.queryQnaService(query, oldState);
                if (qnaResult[0].score > MINIMUM_SCORE) {
                    const conversationData = await this.dialogState.get(step.context, {});
                    conversationData.defaultAnswerCounter = 0;
                    await this.conversationState.saveChanges(step.context); 
                    var outputActivity = MessageFactory.text(qnaResult[0].answer);
                } else {
                    const conversationData = await this.dialogState.get(step.context, {});
                    conversationData.defaultAnswerCounter += 1;
                    if (conversationData.defaultAnswerCounter <= 2) {                    
                       var outputActivity = defaultAnswer;
                    } else {
                       var outputActivity = escalationAnswer;
                    }
                    await this.conversationState.saveChanges(step.context);
                }