【问题标题】:Weird instruction flow chatbot with LUIS and nodejs带有 LUIS 和 nodejs 的奇怪指令流聊天机器人
【发布时间】:2018-08-25 14:24:01
【问题描述】:

我无法通过我的机器人获得我想要的,在 MS Bot Framework 和 LUIS 的帮助下进行编码以进行语言识别。

我想做的是预订机票。因此,当用户在预订对话框中,但没有提供所有信息时,机器人会询问缺少的信息(出发日期、航空公司、出发城市......)

这是一个函数,例如我设置出发城市是否缺失(在瀑布的上一步中,我正在测试出发城市是否存在,如果不存在,我会提示询问)。

function (session, results, next) {
        if (results.response) {
            builder.LuisRecognizer.recognize(session.message.text, luisModelUrl,
                function(err, intents, entities) {
                    if(entities) {
                        var departure = builder.EntityRecognizer.findEntity(entities, 'FlightBookingTicket.Departure');
                        console.log(entities);
                        console.log('===== Ticket (2a): =====');
                        console.log(session.privateConversationData.ticket);
                        if (departure)
                            session.privateConversationData.ticket.departure = departure.entity;
                        console.log('===== Ticket (2b): =====');
                        console.log(session.privateConversationData.ticket);
                    }
                }
           );
        }

        console.log('===== Ticket (2c): =====');
        console.log(session.privateConversationData.ticket);

        next();
    },

我应该获得(根据console.log() 调用),首先是实体的日志,没有出发城市的票:2a,有出发城市的票:2b,然后是带有 2c 的同一张。

但如果我运行它,这就是我得到的结果,这真的很奇怪:

===== Ticket (2c): =====
{ departure: null,
  destination: 'paris',
  date_time: null,
  airline: null,
  ticket_class: null,
  number_tickets: null }
[ { entity: 'london',
    type: 'FlightBookingTicket.Departure',
    startIndex: 5,
    endIndex: 10,
    score: 0.944474041 } ]
===== Ticket (2a): =====
{ departure: null,
  destination: 'paris',
  date_time: null,
  airline: null,
  ticket_class: null,
  number_tickets: null }
===== Ticket (2b): =====
{ departure: 'london',
  destination: 'paris',
  date_time: null,
  airline: null,
  ticket_class: null,
  number_tickets: null }

我首先有 2c,然后是实体 2a 和 2b,所以最后,机器人回复了只有目的地的票(我跳过了帖子的所有其他属性(航空公司...))。我究竟做错了什么 ?为什么是这样的代码流程?

Alright here is your ticket: ‘{“departure”:null,“destination”:“paris”,“date_time”:null,“airline”:null,“ticket_class”:null,“number_tickets”:null}’

MS Bot Framework 和 LUIS 看起来不错,但是文档真的很差,互联网上还没有足够的帮助:(

谢谢

【问题讨论】:

  • 发帖时我意识到我忘了说你好,我想知道为什么当我编辑帖子并添加你好时它不起作用,对不起
  • 很有趣,我写了“Hey Yann”来开始我的回答,它也被删除了。我猜是 S.O.不希望我们亲切! :)

标签: node.js dialog bots azure-language-understanding flow


【解决方案1】:

这看起来像预期的流程,因为您记录 2c 的代码在 2a 和 2b 之前被调用。

我认为这段代码造成了误解:

            builder.LuisRecognizer.recognize(session.message.text, luisModelUrl,
            function(err, intents, entities) {
                if(entities) {
                    var departure = builder.EntityRecognizer.findEntity(entities, 'FlightBookingTicket.Departure');
                    console.log(entities);
                    console.log('===== Ticket (2a): =====');
                    console.log(session.privateConversationData.ticket);
                    if (departure)
                        session.privateConversationData.ticket.departure = departure.entity;
                    console.log('===== Ticket (2b): =====');
                    console.log(session.privateConversationData.ticket);
                }
            }
       );

您定义的函数,即记录 2a 和 2b 的函数,不会立即被调用。

您正在做的是将记录 2a 和 2b 的函数注册为回调。然后你的执行继续到 2c 代码。一旦 LuisRecognizer 完成了它的 recognize 函数,它就会执行你注册的回调。

这有帮助吗?

【讨论】:

  • 是的,谢谢,我对 JS 有点陌生,所以我不知道所有异步的东西和回调。但我仍然需要改进,因为我的代码有时在每一行都有一个等待 lol
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2011-01-17
  • 2020-05-16
相关资源
最近更新 更多