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

如何在Node.js Bot中实现LUIS与QnA Maker的意图联动场景?

问题解答:LUIS触发意图后调用QnA Maker返回答案的场景完全可行!

你的需求完全可以实现,核心思路就是当LUIS匹配到指定意图(比如你的common_question)时,主动调用QnA Maker的识别逻辑,从知识库中提取对应答案返回给用户。

先看你现有代码的几个小问题:

  • IntentDialog的初始化写法有误,recognizers需要是配置对象的属性,正确格式是{ recognizers: [luisRecognizer, qnarecognizer] }
  • 你直接写了session.send('answerEntity.entity'),这只是输出固定字符串,没有实际获取QnA返回的答案数据
  • 调用qnarecognizer.recognize时,需要传入用户的实际提问文本,才能让QnA匹配对应的问答对

下面是修正后的完整示例代码,我会逐段解释:

// 正确初始化IntentDialog,传入LUIS和QnA识别器
var intents = new builder.IntentDialog({ recognizers: [luisRecognizer, qnarecognizer] });
bot.dialog('/', intents);

// 处理common_question意图
intents.matches('common_question', function (session, args, next) {
    session.send('Intent common');
    
    // 调用QnA Maker识别用户当前的提问文本
    qnarecognizer.recognize(session.message.text, function (error, result) {
        // 检查是否有有效结果,同时通过score阈值过滤低匹配度的内容
        if (!error && result && result.score > 0.7) {
            // QnA会返回匹配度从高到低的答案数组,取第一个即可
            var qnaAnswer = result.answers[0].answer;
            session.send(qnaAnswer);
        } else {
            // 如果QnA没有匹配到合适的答案,返回兜底回复
            session.send("Sorry, I don't have an answer for that right now.");
        }
    });
});

关键注意点:

  1. QnA的匹配精度:建议在你的QnA知识库中,给"who are you?"这个问答对添加更多变体问题,比如"tell me who you are"、"what's your name?"等,这样QnA能更精准匹配用户的不同提问方式。
  2. 阈值设置:代码里的result.score > 0.7是自定义的匹配阈值,你可以根据实际需求调整,过滤掉匹配度太低的无效结果。
  3. LUIS意图优化:如果希望LUIS能更准确识别common_question意图,也可以在LUIS的该意图下添加更多示例 utterance(比如"tell me who you are"),确保用户的提问能稳定触发这个意图。

这样调整后,当用户提问"Tell me who you are"时,流程就会按你期望的走:LUIS触发common_question意图 → 代码调用QnA Maker识别提问 → 返回对应的"Hi I'm your bot! "答案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:46:36