使用 LUIS 和 nodejs 的奇怪指令流聊天机器人
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,所以最后,机器人用只有目的地的机票回复(我跳过了 [=30 的所有其他属性(航空公司...) =]).我究竟做错了什么 ?为什么代码流程是这样的?
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
函数,它就会执行您注册的回调。
有帮助吗?
我的机器人无法获得我想要的东西,我的机器人借助 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,所以最后,机器人用只有目的地的机票回复(我跳过了 [=30 的所有其他属性(航空公司...) =]).我究竟做错了什么 ?为什么代码流程是这样的?
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
函数,它就会执行您注册的回调。
有帮助吗?