带有LUIS的Microsoft Bot Framework未检测到所有意图

时间:2017-04-24 16:48:45

标签: node.js botframework luis

我在节点js中使用带有LUIS的MS Bot Framework创建聊天机器人。我已经创建了一些名为" Book"和"等待"和一个名为" Annual Leave"在LUIS。我已经将LUIS URL添加到我的聊天机器人代码中,当我在我的控制台中测试它时,我发现某些话语得到了响应而有些话语没有。

例如,当我说"我如何查看剩余年假?"时,我得到回复说"您可以在这里找到您剩余的A / L"。但是,当我说"我怎样才能查看我的待定年假?",我没有得到答复。

我的Git Bash对工作话语的回应

  

ChatConnector:已收到消息。

     

session.beginDialog(/)

     

/ - session.sendBatch()发送0条消息

     

/ - IntentDialog.matches(待定)

     

/ - waterfall()第1步(共1步)

     

/ - session.beginDialog(BotBuilder:Prompts)

     

.Prompts.text - session.send()

     

.Prompts.text - session.sendBatch()发送1条消息

我的Git Bash对非工作话语的回应

  

ChatConnector:已收到消息。

     

.Prompts.text - session.endDialogWithResult()

     

/ - session.endDialogWithResult()

     

session.sendBatch()发送0条消息

但是当我在LUIS上测试完全相同的话语时,它会以高置信度分数检测意图和实体。

enter image description here

这种情况发生在很多话语中。我无法弄清楚造成这个问题的原因。

我的聊天机器人代码

var restify = require('restify');
var builder = require('botbuilder');

//=========================================================
// Bot Setup
//=========================================================

// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
   console.log('%s listening to %s', server.name, server.url); 
});

// Create chat bot
var connector = new builder.ChatConnector({
    appId: 'MY_APP_ID',
    appPassword: 'MY_APP_PASSWORD'
});
var bot = new builder.UniversalBot(connector);
server.post('/api/messages', connector.listen());

server.get('/', restify.serveStatic({
 directory: __dirname,
 default: '/index.html'
}));


//=========================================================
// Bots Dialogs
//=========================================================

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


intents.matches('Book', [
    function (session, args, next) {
       var task = builder.EntityRecognizer.findEntity(args.entities, 'Annual Leave');
                  builder.Prompts.text(session, "You can book your A/L here.");  
    }
]),

intents.matches('Pending', [
    function (session, args, next) {
        var task = builder.EntityRecognizer.findEntity(args.entities, 'Annual Leave');
                  builder.Prompts.text(session, "You can find your remaining A/L here.");

    }
]);

1 个答案:

答案 0 :(得分:1)

首先,我建议您添加intents.onDefault()对话框,以便对None意图进行回退。通过这种方式,您将知道它的LUIS是否不识别意图,或者它是否是其他内容。

其次,如果您使用的是IntentDialog,我会明确地结束对话。执行builder.Prompts.text()时,僵尸框架将在堆栈上推送一个特殊的Prompts对话框,并等待答案将其传递给瀑布中不存在的next。我想知道你的体验是否正常。尝试将Prompts.text(message)替换为session.endDialog(message)

最后,请考虑使用新的triggerAction语法。我在这里解释了一些:http://www.pveller.com/smarter-conversations-part-2-open-dialogs/#Trigger-Actions

P.S。你也可以调试你的机器人。我是VS Code的忠实粉丝,就像在botbuilder node_modules来源中设置断点一样简单,看看发生了什么,如何识别用户话语,和路由。