【问题标题】:app.js sometimes returns TypeError: Cannot read property '0' of undefined on full questionsapp.js 有时会返回 TypeError: Cannot read property '0' of undefined on full questions
【发布时间】:2017-12-15 12:04:37
【问题描述】:

我正在使用 Microsoft 代码示例尝试创建一个使用意图触发 QNA Maker 的 LUIS 机器人。

目前 QnA Maker 有时会返回结果,但有时会返回“TypeError: Cannot read property '0' of undefined”。

使用以下代码的问题“价格变化”返回来自 QnA maker 的正确答案。

var customQnAMakerTools = new customQnAMakerTools.CustomQnAMakerTools();
bot.library(customQnAMakerTools.createLibrary());


var intents = new builder.IntentDialog({ recognizers: [recognizer, 
r12recognizer] });
bot.dialog('/', intents);

var basicQnAMakerDialog = new builder_cognitiveservices.QnAMakerDialog({
    recognizers: [r12recognizer],
    defaultMessage: 'Sorry i did not understand that. Try asking the 
question again.',
    qnaThreshold: 0.3,
    feedbackLib: customQnAMakerTools
});

intents.matches('qna', [
basicQnAMakerDialog.respondFromQnAMakerResult = function(session, 
qnaMakerResult){
// Save the question
var question = session.message.text;
session.conversationData.userQuestion = question;
// boolean to check if the result is formatted for a card


var isCardFormat = qnaMakerResult.answers[0].answer.includes(';');
if(!isCardFormat){
    // Not semi colon delimited, send a normal text response 
    session.send(qnaMakerResult.answers[0].answer);
}else if(qnaMakerResult.answers && qnaMakerResult.score >= 0.5){

    var qnaAnswer = qnaMakerResult.answers[0].answer;
            var qnaAnswerData = qnaAnswer.split(';');
            var title = qnaAnswerData[0];
            var description = qnaAnswerData[1];
            var url = qnaAnswerData[2];
            var imageURL = qnaAnswerData[3];

            var msg = new builder.Message(session)
            msg.attachments([
                new builder.HeroCard(session)
                .title(title)
                .subtitle(description)
                .images([builder.CardImage.create(session, imageURL)])
                .buttons([
                    builder.CardAction.openUrl(session, url, "Learn More")
                ])
            ]);
    }
session.send(msg).endDialog();
}


]);

但是,如果我将问题更改为“价格更改已批准但最终被系统拒绝”,这是 QnA Maker 中的完整问题,它会返回“TypeError:无法读取未定义的属性 '0'”。完整的错误是

TypeError: Cannot read property '0' of undefined
    at Array.intents.matches.basicQnAMakerDialog.respondFromQnAMakerResult (D:\home\site\wwwroot\app.js:71:46)
    at Object.waterfallHandler [as qna] (D:\home\site\wwwroot\node_modules\botbuilder\lib\dialogs\WaterfallDialog.js:139:29)
    at IntentDialog.invokeIntent (D:\home\site\wwwroot\node_modules\botbuilder\lib\dialogs\IntentDialog.js:163:44)
    at D:\home\site\wwwroot\node_modules\botbuilder\lib\dialogs\IntentDialog.js:71:27
    at next (D:\home\site\wwwroot\node_modules\botbuilder\lib\dialogs\IntentRecognizer.js:68:17)
    at IntentRecognizerSet.IntentRecognizer.filter (D:\home\site\wwwroot\node_modules\botbuilder\lib\dialogs\IntentRecognizer.js:71:9)
    at D:\home\site\wwwroot\node_modules\botbuilder\lib\dialogs\IntentRecognizer.js:20:31
    at D:\home\site\wwwroot\node_modules\botbuilder\lib\dialogs\IntentRecognizerSet.js:80:17
    at D:\home\site\wwwroot\node_modules\async\lib\async.js:52:16
    at replenish (D:\home\site\wwwroot\node_modules\async\lib\async.js:306:28)

如果是因为我错误地通过了问题,或者它只是通过了问题的一部分,我目前无法锻炼。

【问题讨论】:

  • 看起来像QnaMaker没有回复的情况,所以qnaMakerResult.answers[0]抛出异常answers没有定义?您是否直接查看您的 QnA 以测试您传递的值?
  • 当我在测试区域和作为机器人服务向 QnA 制造商提出问题时,它仅在 LUIS 意图内将正确答案传回,它抛出此“价格更改已获批准,但最终被系统拒绝”是 QnA 对的 qna 知识库中的实际完整问题。
  • 你的2个case回复一样吗?
  • 是的,两者都应该返回相同的响应
  • 好的.. 抱歉,没有 QnA 数据就帮不上忙了

标签: node.js botframework azure-language-understanding azure-bot-service qnamaker


【解决方案1】:

当您在 LUIS 中具有相同名称的意图时,似乎会发生这种情况。删除意图后,QnA 意图将正确启动并将消息发送到 QnA 知识库。

【讨论】:

  • 刚刚尝试过这个,它似乎工作,不知道为什么。谢谢!这也使得在仍然使用 LUIS 的同时开始从多个知识库中提取答案成为可能
猜你喜欢
  • 2018-07-16
  • 2021-04-06
  • 2021-06-25
  • 2021-09-25
  • 2017-04-24
  • 2023-03-15
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多