Я думаю, вы можете сделать это, установив два разных диалоговых окна:
Диалог 1:
Это диалоговое окно, показанное выше, обычное диалоговое окно «Водопад», которое ведет к разговору.
Диалог 2:
Этот диалог будет создан с помощью распознавателя намерений LUIS с использованием вашей модели LUIS. Диалог 1 выдаст запрос, затем перейдет к этому диалоговому окну и проанализирует текст, введенный пользователем. Поскольку ваша модель уже обучена распознавать местоположение, все, что вам нужно сделать, это извлечь объект.
После того, как диалоговое окно 2 проанализирует информацию о местоположении с помощью LUIS и извлечет объект, вы завершите диалог и вернете объект (расположение) обратно в диалоговое окно 1, которое все еще будет находиться в Стек диалогов.
Код
//create intent recognizer based on LUIS model
var luisModel = "<Your LUIS Model URL>";
var recognizer = new botbuilder.LuisRecognizer(luisModel);
//create dialog handler for info to be parsed by LUIS
var dialog = new botbuilder.IntentDialog({ recognizers: [recognizer] });
//root dialog
bot.dialog("/", [
function(session){
//prompt user and pop LUIS intent dialog onto dialog stack
session.send("Hello, which city are you looking in?");
session.beginDialog("/begin_loc_parse");
},
//this will be resumed after our location has been extracted
function(session, results){
//check for extracted location
if(results.entity){
//got location successfully
session.send("Got city from user: " + results.entity);
//resume normal waterfall with location.....
} else {
//start over
session.beginDialog("/");
}
}
]);
//LUIS intent dialog
dialog.matches("input_location", function(session, args){
//grab location entity
var city = botbuilder.EntityRecognizer.findEntity(args.entities, "builtin.geography.city");
if(city){
//pop the LUIS dialog off of the dialog stack
//and return the extracted location back to waterfall
session.endDialogWithResult(city);
} else session.endDialog("Couldn't extract city entity.");
});
//called if user doesn't enter something like "I am looking in [city]"
dialog.onDefault(function(session, args){
session.send("I'm sorry, I didn't quite catch that. In which city are you looking?");
});
Итак, в основном, в корневом диалоговом окне, когда вы запрашиваете у пользователя местоположение, а затем вызываете session.beginDialog("/begin_loc_parse")
, вы передаете диалог в свой диалог намерений LUIS.
Любой текст, введенный пользователем после этого момента, будет интерпретирован вашей моделью LUIS. Это позволяет вам использовать вашу модель для распознавания и извлечения информации о местоположении от пользователя.
Затем необходимо использовать session.endDialogWithResult()
для извлечения диалогового окна LUIS из стека и возврата к исходному водопаду с новым извлеченным местоположением.
person
Tony Anziano
schedule
08.03.2017