簡體   English   中英

帶有LUIS和Node.js的怪異指令流聊天機器人

[英]Weird instruction flow chatbot with LUIS and nodejs

在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看起來很棒,但是文檔確實很差,並且Internet上還沒有足夠的幫助:(

謝謝

這看起來像預期的流程,因為記錄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功能后,它將執行您已注冊的回調。

有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM