首页 文章

如何在单个Node.js bot中集成LUIS和QnA Maker服务?

提问于
浏览
3

我已经集成了LUIS和QnA制造商,但我想创建这种情况,如果可能的话 . 以下是link,特别是本节中的示例:

机器人可以通过几种方式实现LUIS和QnA Maker的混合:首先调用LUIS,如果没有意图满足特定阈值分数,即触发“无”意图,则调用QnA Maker . 或者,为QnA Maker创建一个LUIS意图,为您的LUIS模型提供映射到“QnAIntent”的示例QnA问题 .

举个例子:我有我的QnA KB,其中有一对: " who are you?" / "Hi I'm your bot! " . 然后我有我的Luis应用程序识别这个名为 "common" 的意图 . 所以,如果我写到我的机器人: " who are you?" 它会回答 "Hi I'm your bot! " 相反,如果我写 " tell me who you are" 它识别出与问题相关的LUIS意图但它不会像我想象的那样回答"Hi I'm your bot! " .

所以我想的是:我问的问题是“告诉我你是谁” - >机器人触发意图共同(LUIS) - >然后我希望机器人能够回答我查看QnA KB - >“嗨,我是你的机器人!“

可能吗?谢谢

希望此代码可以提供帮助:

var intents = new builder.IntentDialog({ recognizers[luisRecognizer,qnarecognizer] });

bot.dialog('/', intents);

intents.matches('common_question', [
    function (session, args, next) {
        session.send('Intent common');
        qnarecognizer.recognize(session, function (error, result) {
            session.send('answerEntity.entity');
        });
    } 
]);

3 回答

  • 1

    我写这个是因为我想要更多的节点练习,这是使用节点的借口,但Ezequiel告诉你的是完全正确的 . 我还会发布你的GitHub问题 . 这是一个功能正常的节点应用程序,可以满足您的需求

    var builder = require('botbuilder');
    var restify = require('restify');
    var cog = require('botbuilder-cognitiveservices');
    
    
    
    var server = restify.createServer();
    server.listen(process.env.port || process.env.PORT || 3978, function() {
        console.log('%s listening to %s', server.name, server.url);
    });
    
    var connector = new builder.ChatConnector({
        appId: "APP ID",
        appPassword: "APP PASSWORD"
    });
    server.post('/api/messages', connector.listen());
    
    var bot = new builder.UniversalBot(connector, function(session) {
        session.send('Sorry, I did not understand \'%s\'. Type \'help\' if you need assistance.', session.message.text);
    });
    
    var recognizer = new builder.LuisRecognizer("https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/{LUIS APP ID}?subscription-key={LUIS KEY}&verbose=true&timezoneOffset=0&q=");
    
    bot.recognizer(recognizer);
    var qnaRecognizer = new cog.QnAMakerRecognizer({
        knowledgeBaseId: 'QNA APP ID',
        subscriptionKey: 'QNA SUBSCRIPTION KEY'
    }); 
    
    bot.dialog('Common', function(session) {
        var query = session.message.text;        
        cog.QnAMakerRecognizer.recognize(query, 'https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/{QNA APP ID}}/generateAnswer', '{QNA SUBSCRIPTION KEY}', 1, 'intentName', (error, results) => {
            session.send(results.answers[0].answer)    
        })    
    }).triggerAction({
        matches: 'Common'
    });
    
  • 2

    您必须从与LUIS检测到的意图相关联的方法/对话框将用户消息转发到 QnaMaker . 看看这篇文章(https://blog.botframework.com/2017/11/17/qna-maker-node-js-bots/),找到 Node.js 中如何实现 QnAMaker

    就像是:

    var recognizer = new cognitiveservices.QnAMakerRecognizer({
        knowledgeBaseId: 'set your kbid here', 
        subscriptionKey: 'set your subscription key here'});
    
    var context = session.toRecognizeContext();
    
    recognizer.recognize(context, function (error, result) { // your code... }
    

    您还应该探索样本并尝试了解一切是如何工作的:https://github.com/Microsoft/BotBuilder-CognitiveServices/tree/master/Node/samples/QnAMaker

    如果你的问题变化很大; QnA可能无法检测到您所期望的问题,在这种情况下,您将需要更多地训练您的KB(就像您在LUIS中使用话语/意图一样)

  • 1

    截至2018年(BotBuilder V4)

    您现在可以使用 Dispatch Command Line 工具在多个bot模块(如LUIS模型和QnA)上分配意图 .

    首先,您将获得LUIS应用程序,该应用程序将根据分数决定重定向到另一个LUIS应用程序或QnA .

    Dispatch Tool
    Example using LUIS as dispatch service

相关问题