Как реализовать обратную беседу в чат-боте

Я хочу реализовать следующий сценарий разговора в бот-фреймворке MS

Bot: =>  what can do for you?            => User
Bot: <=  I want to rent a house         <= User
Bot: =>  Which city?                    => User
Bot: <=                 London          <= User
Bot: =>  How many bedrooms              => User
Bot: <=  Ops, I want a home in New York <= User  #User wish to change the topic here..

Как в бот-фреймворке MS использовать диалог водопада для реализации описанной выше истории? любой совет?


person Yuhua Deng    schedule 28.01.2017    source источник


Ответы (1)


Я не думаю, что возможно реализовать это водопадным подходом с разумными усилиями. В простом случае вы можете попробовать проанализировать ответ, в вашем случае это количество спален, а если это не число, вы можете проверить ответ на другой запрос. Проблема здесь в том, что вы должны делать это для всех ответов, а для ответов с открытым текстом будет трудно отличить законный ответ от смены темы.

Итак, вы должны реализовать это, используя подход намерения.

Во-первых, вам нужен детектор намерений, вы можете использовать Luis, поскольку он сильно интегрирован с бот-фреймворком, или реализовать свой собственный детектор намерений.

В вашем случае этот детектор должен обнаруживать намерение - I want to rent a house (автомобиль и т. Д.).

var intents = new builder.IntentDialog({ recognizers: [luis] });

См. https://docs.botframework.com/en-us/node/builder/chat/IntentDialog Эти примеры кода предназначены для Node.Js, но тот же подход должен работать и для .Net.

Затем для каждого намерения вы должны зарегистрировать соответствующее действие, которое запускает диалог водопада, который получает все необходимые данные.

bot.beginDialogAction("RentHouseAction", RentHouseDialog.name+":/", { matches: "RentHouseAction"});

где RentHouseAction - это действие, которое вы определяете в Luis. RentHouseDialog - это диалог водопада, который находится в библиотеке.

bot.library(RentHouseDialog);

Обратите внимание, что по завершении диалога RentHouseDialog он вернется в то место, где остановился предыдущий диалог. Итак, он снова спрашивает - How many bedrooms. Чтобы предотвратить такое поведение, вы должны определить, что ваш предыдущий диалог еще не завершен (вы можете использовать для него состояние, в котором вы собираете ответы), и вызвать session.replaceDialog('<>');.

Надеюсь, это тебе поможет.

person Sergey L    schedule 29.01.2017
comment
Привет, Сергей, спасибо за ответ, это действительно полезно, но если ответ - ой, а не из Лондона, Нью-Йорка, пожалуйста! так что трудно направить намерение RentHouse, для человека это очень ясно, конечный пользователь хочет арендовать дом в Нью-Йорке на основе контекста, в моем коде бота, как я могу этого добиться? заранее спасибо - person Yuhua Deng; 30.01.2017
comment
@YuhuaDeng, это было бы changeLocation намерением. - person stuartd; 30.01.2017
comment
@stuartd, вы имеете в виду, что Луис может распознать ой, не Лондон, Нью-Йорк, пожалуйста! как изменить местоположение? , ой, дай попробовать, скоро напишу отзыв ... - person Yuhua Deng; 30.01.2017
comment
При нынешнем состоянии искусственного интеллекта вы не можете реализовать такого же умного, как человек, бота. Итак, Луис может понять - Ops, I want a home in New York как желание снять дом, но не oops, not London, New York please! (возможно, комментарий от @stuartd может помочь). Но ваш бот должен быть готов к тому, что не сможет понять ответ. В случае oops, not London.. он должен сказать: «Извините, я вас не понимаю. Вы хотите: 1) изменить местоположение, 2) отменить запрос, 3) отобразить справку и так далее. - person Sergey L; 30.01.2017
comment
@Sergey Луис может распознать такое намерение, но для этого его нужно специально обучить. - person stuartd; 30.01.2017
comment
@SergeyL, ваше решение работает для меня, большое спасибо, позвольте мне отметить ваш ответ как решение. - person Yuhua Deng; 04.02.2017