我在节点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上测试完全相同的话语时,它会以高置信度分数检测意图和实体。
这种情况发生在很多话语中。我无法弄清楚造成这个问题的原因。
我的聊天机器人代码
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.");
}
]);
答案 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
来源中设置断点一样简单,看看发生了什么,如何识别用户话语,和路由。