首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有LUIS和nodejs的怪异指令流聊天机器人

带有LUIS和nodejs的怪异指令流聊天机器人
EN

Stack Overflow用户
提问于 2018-03-16 13:35:41
回答 1查看 73关注 0票数 0

我无法用我的机器人获得我想要的东西,在和LUIS的帮助下编写语言识别代码。

我想做的是订一张机票。因此,当用户处于预订对话框中,但尚未提供所有信息时,机器人会询问丢失的信息(起飞日期、航空公司、出发城市……)。

下面是一个函数,例如,如果离开城市缺失,我就设置它(在瀑布的前一步,我正在测试离开城市是否存在,如果没有,我会提示询问)。

代码语言:javascript
复制
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的相同的。

但如果我这么做的话,这就是我得到的,这真的很奇怪:

代码语言:javascript
复制
===== 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,所以最终,bot会回复只有目的地的机票(我跳过了所有其他属性(航空公司.)该职位)。我做错什么了?为什么这样的代码流?

代码语言:javascript
复制
Alright here is your ticket: ‘{“departure”:null,“destination”:“paris”,“date_time”:null,“airline”:null,“ticket_class”:null,“number_tickets”:null}’

Bot Framework女士和LUIS看起来很棒,但是文档确实很糟糕,互联网上还没有足够的帮助:

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-16 05:13:38

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

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

代码语言:javascript
复制
            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函数,它就会执行您注册的回调。

这有用吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49322085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档