【问题标题】:How can I use LUIS in app.js to recognize dialogs that I have in different folders如何在 app.js 中使用 LUIS 来识别不同文件夹中的对话框
【发布时间】:2018-11-08 06:02:23
【问题描述】:

Microsoft BotbuilderSDK:3.15.0 语言:NodeJs

我的对话框位于不同的文件夹中。但是,我试图在 app.js 文件夹中初始化它们,以便在意图与对话框匹配时可以使用 LUIS,但它不起作用。

注意 - 当我以类似于以下的结构调用它们时,每个对话框都会起作用:

session.beginDialog('hello:Hello')

这里是完整的源代码:

require('dotenv').config();
const restify = require('restify');

const builder = require('botbuilder');

var fs = require('fs');

var clients = require('restify-clients');

var azure = require('botbuilder-azure');

var listenPort = process.env.port || process.env.PORT || 3978;

var server = restify.createServer()

server.listen(listenPort, '::', () => {
  console.log(`smooth like a baby's bottom`)
});


var connector = new builder.ChatConnector({
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
});


var bot = new builder.UniversalBot(connector, function (session) {
    session.endDialog(`I'm sorry, I did not understand '${session.message.text}'.\nType 'help' to know more about me :)`)
}).set('storage', cosmosStorage);


var luisRL = new builder.LuisRecognizer(process.env.LUIS_MODEL_URL).onEnabled(function (context, callback) {
  var enabled = context.dialogStack().length === 0
  callback(null, enabled)
});


var intents = new builder.IntentDialog({ recognizers: [luisRL] });
bot.recognizer(intents);


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

bot.on('conversationUpdate', function (message) {
  if (message.membersAdded) {

    greetings = 'welcome to Joey's Pizza?'

    message.membersAdded.forEach(function (identity) {
      if (identity.id === message.address.bot.id) {
        bot.send(new builder.Message()
          .address(message.address)
          .text(greetings)
        )
      }
    })
  }
});

bot.library(require('./dialogs/reservations').createLibrary());
bot.library(require('./dialogs/order').createLibrary());
bot.library(require('./dialogs/cancellations').createLibrary());

【问题讨论】:

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


    【解决方案1】:

    这是一个完整的示例,展示了一个从 LUIS 意图触发的库文件中的对话框:

    带有启动文件如:

    require('dotenv').config();
    const restify = require('restify');
    const builder = require('botbuilder');
    
    var listenPort = process.env.port || process.env.PORT || 3978;
    var server = restify.createServer();
    server.listen(listenPort, '::', () => {
      console.log(`smooth like a baby's bottom`)
    });
    
    var connector = new builder.ChatConnector({
        appId: process.env.MICROSOFT_APP_ID,
        appPassword: process.env.MICROSOFT_APP_PASSWORD
    });
    var inMemoryStorage = new builder.MemoryBotStorage(); 
    
    var bot = new builder.UniversalBot(connector, function (session) {
        session.endDialog(`I'm sorry, I did not understand '${session.message.text}'.\nType 'help' to know more about me :)`)
    }).set('storage', inMemoryStorage);
    
    var luisRL = new builder.LuisRecognizer(process.env.LUIS_MODEL_URL).onEnabled(function (context, callback) {
      var enabled = context.dialogStack().length === 0
      callback(null, enabled)
    });
    
    var intents = new builder.IntentDialog({ recognizers: [luisRL] });
    bot.recognizer(intents);
    
    server.post('/api/messages', connector.listen());
    
    bot.on('conversationUpdate', function (message) {
      if (message.membersAdded) {
    
        greetings = `Ask to set or change your name...`;
    
        message.membersAdded.forEach(function (identity) {
          if (identity.id === message.address.bot.id) {
            bot.send(new builder.Message()
              .address(message.address)
              .text(greetings)
            )
          }
        })
      }
    });
    
    bot.library(require('./dialogs/profile').createLibrary());
    

    具有以下 /dialogs/profile/index.js

    var builder = require('botbuilder');
    
    
    var lib = new builder.Library('profile');
    exports.createLibrary = function () {
        return lib.clone();
    }
    
    lib.dialog('changeName', [
        function (session) {
            debugger;
            session.dialogData.updating = session.userData.hasOwnProperty('name');
            var prompt =  session.dialogData.updating ? "What would you like to change your name to?" : "Hi... What's your name?";
            builder.Prompts.text(session, prompt);
        },
        function (session, results) {
            session.userData.name = results.response;
            session.endDialog("Got it %s...", session.userData.name);
        }    
    ]).triggerAction({ matches: 'ChangeNameIntent' });
    

    使用以下 LUIS 模型:

    {
      "luis_schema_version": "3.1.0",
      "versionId": "0.1",
      "name": "ChangeNameLuisModel",
      "desc": "",
      "culture": "en-us",
      "intents": [
        {
          "name": "ChangeNameIntent"
        },
        {
          "name": "getage"
        },
        {
          "name": "None"
        }
      ],
      "entities": [
        {
          "name": "speed",
          "roles": []
        }
      ],
      "composites": [],
      "closedLists": [],
      "patternAnyEntities": [],
      "regex_entities": [],
      "prebuiltEntities": [
        {
          "name": "number",
          "roles": []
        }
      ],
      "model_features": [],
      "regex_features": [],
      "patterns": [],
      "utterances": [
        {
          "text": "allow me to change my name",
          "intent": "ChangeNameIntent",
          "entities": []
        },
        {
          "text": "change my name",
          "intent": "ChangeNameIntent",
          "entities": []
        },
        {
          "text": "change name",
          "intent": "ChangeNameIntent",
          "entities": []
        },
        {
          "text": "i am 10 years old",
          "intent": "getage",
          "entities": []
        },
        {
          "text": "i am 12 years old",
          "intent": "getage",
          "entities": []
        },
        {
          "text": "i want to change my name",
          "intent": "ChangeNameIntent",
          "entities": []
        },
        {
          "text": "let me alter my name",
          "intent": "ChangeNameIntent",
          "entities": []
        },
        {
          "text": "name change",
          "intent": "ChangeNameIntent",
          "entities": []
        },
        {
          "text": "please change my name",
          "intent": "ChangeNameIntent",
          "entities": []
        }
      ],
      "settings": []
    }
    

    【讨论】:

    • 我尝试了这种方法,但我不断从“模拟器”获取 UniversalBot("*") 路由“更改我的名字” Session.beginDialog(/) / - 瀑布()第 1 步,共 1 步 / - 会话.sendBatch() 发送 0 条消息
    • 对不起,你能改一下吗?我不明白。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2019-08-14
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多