【问题标题】:Isolate BotFramework NodeJS Bot with LUIS into own library将带有 LUIS 的 BotFramework NodeJS Bot 隔离到自己的库中
【发布时间】:2017-03-07 02:38:16
【问题描述】:

我想将使用 BotFramework 和 LUIS 的机器人隔离到它自己的库中,并将其导入到 app.js 中。我遵循了 BotFramework GitHub 上的教程和示例,但它让我无处可去。一旦我将带有 LUIS 对话的机器人放入它自己的文件并导出它,它就永远不会接触到 LUIS:

var builder = require('botbuilder');

//Import our libraries
var profileDialogue = require('../dialogues/profileDialogue');

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

// Create chat bot
var bot = new builder.UniversalBot(null, null, 'changeName');

// Add locale tools library to bot
bot.library(profileDialogue.createLibrary());

// Export createLibrary() function
exports.createLibrary = function() {
    return bot.clone();
}

var model = URL;
var recognizer = new builder.LuisRecognizer(model);
var dialog = new builder.IntentDialog({ recognizers: [recognizer] });

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

bot.dialog('/changeName', dialog);

bot.dialog('change name', [
    function(session, args, next) {
        console.log(args);
        if (args.score > 0.5) {
            profileDialogue.profile(session);
        }
    },
    function(session, results) {
        session.send('Ok... Changed your name to %s', session.userData.name);
    }
]);

此代码仅在它存在于节点调用的 app.js 文件中时才有效,当我想将其隔离以供其他机器人使用时永远不会。

这是我的 app.js:

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

//Import our libraries
var changeName = require('./bots/changeName');

//=========================================================
// 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: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);

server.post('/api/messages', connector.listen());

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

bot.dialog('/', [function(session, args, next) { session.send("I don't understand") }]);

// Add locale tools library to bot
bot.library(changeName.createLibrary());

我怎样才能正确地做到这一点?我是不是没有正确地考虑这个问题?

更新

我能够通过使用不同的语法(bot.dialog 与 triggerAction 组合)来隔离 LUIS bot:

bot.dialog('/changeName', [
    function(session, args, next) {
        if (args && args.intent && args.intent.score && args.intent.score > 0.5) {
            console.log(args);
            profileDialog.profile(session);
        }
    },
    function(session, results) {
        session.send('Ok... Changed your name to %s', session.userData.name);
    }
]).triggerAction({
    matches: 'change name',
    intentThreshold: .50
});

我遇到的最后一个问题是父 app.js 需要拥有 LUIS 端点,我的子机器人是否拥有它并不重要。还有其他想法吗?

【问题讨论】:

  • 最上面的代码块是 './bots/changeName' 的内容还是原始未分离机器人的内容?您似乎要创建两次机器人实例? IE。两次调用builder.UniversalBot?您需要使用 RequireJS 的 module.export 从您包含的库中导出一个函数,并将在您的服务器中创建的机器人实例传递给该函数。
  • 我对框架有点陌生,所以我不确定我是否要创建两次。但是,当我导出机器人本身时,我会遇到同样的错误:module.exports = { bot };我的目的是能够将多个启用了 LUIS 的机器人(每个都有自己的 LUIS 端点应用程序)导入到一个位置,以构建我自己的框架并使代码更易于维护。据我所知,我最大的问题是语法,但我什至确定 botframework 是否支持 NodeJS 中的这种思维方式。

标签: node.js botframework azure-language-understanding


【解决方案1】:

使用此代码将隔离机器人并允许使用 LUIS 将其调用到 app.js 文件中:

bot.dialog('/changeName', [
    function(session, args, next) {
        if (args && args.intent && args.intent.score && args.intent.score > 0.5) {
            console.log(args);
            profileDialog.profile(session);
        }
    },
    function(session, results) {
        session.send('Ok... Changed your name to %s', session.userData.name);
    }
]).triggerAction({
    matches: 'change name',
    intentThreshold: .50
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多