与LUIS和nodejs

时间:2018-03-16 13:35:42

标签: node.js dialog bots luis flow

我无法得到我想要的机器人,在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的同一票。 / p>

但如果我跑了,那就是我得到的,这真的很奇怪:

===== 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看起来很棒,但文档很差,但在互联网上还没有足够的帮助:(

谢谢

1 个答案:

答案 0 :(得分:0)

这看起来像预期的流量,因为记录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功能,它就会执行您已注册的回调。

这有帮助吗?