Новое намерение в LUIS для многооборотных диалогов - PullRequest
0 голосов
/ 20 июня 2019

Я собираюсь создать многооборотный диалог.Я не понял, как это должно быть связано с моделями LUIS.Я проверил документацию, но есть образцы только с одним поворотом диалогов.Также я использую шаблон Virtual Assistant.Я хочу сделать что-то вроде этого.

Пользователь: Я хочу забронировать рейс

Бот: Каков пункт назначения?

Пользователь: Лондон

Бот: Когда?

Пользователь: 21 сентября.

Бот: Билет был куплен.

Вопросы касаются того, что происходит на втором шаге?Должен ли я проверить диспетчер?Должен ли я добавить все возможные фразы для всех шагов внутри намерения?

1 Ответ

2 голосов
/ 20 июня 2019

Общие сведения о LUIS

Для вашей модели LUIS вам понадобятся ваши намерения - BookFlight и None.В соответствии с вашим BookFlight намерением у вас будет Utterances - все фразы, которые вы хотите иметь, чтобы вызвать намерение BookFlight.

MyLuisApp
--BookFlight
----I want to book a flight
----Book a flight
----I need a plane ticket
----etc
--None
----Utterances that don't match any of your intents

Ни одно намерение ОЧЕНЬ важно в соответствии с эта документация .


Добавление этой функциональности к новому боту или шаблону основного бота

Существует несколько различных примеров того, как вы могли быдостичь этого, но лучший способ - использовать диалоги.То, что вы хотите, это Waterfall Dialog .Внутри этого диалога вы можете определить каждую ступень в водопаде, например, «Запрашивать пункт назначения», «Запрашивать дату и т. Д.» link1 и link2 , чтобы узнать намерения пользователей согласно этому примеру .Если задано значение BookFlight, то вы должны запустить BookFlightDialog, который содержит водопад книжного полета.

...
// Check dispatch result
var dispatchResult = await cognitiveModels.DispatchService.RecognizeAsync<DispatchLuis>(dc.Context, CancellationToken.None);
var intent = dispatchResult.TopIntent().intent;

if (intent == "BookFlight")
{
    // Start BookFlightDialog
    await dc.BeginDialogAsync(nameof(BookFlightDialog));
}


Общие сведения о диалоге водопада

You 'd определите ваши шаги следующим образом:

var waterfallSteps = new WaterfallStep[]
{
    AskDestinationAsync,
    AskDepartureDateAsync,
    ConfirmStepAsync,
    FinishDialogAsync,
};

Для вашего сценария фактически существует пример, который уже был создан с намерением BookFlight здесь .Полное руководство о том, как получить эту настройку и как работать с официальной документацией .Таким образом, вы можете проверить, как все работает, а затем изменить его, как вам нужно.

Другие интересные ссылки:


Материал Virtual Assistant

Как только вы поймете, как работает выше, вы сможете изменить шаблон Virtual Assistant для обработкиНамерение BookFlight, выполнив следующие действия:

  • Добавление намерения BookFlight к существующему приложению LUIS DISPATCH , которое подключено к вашему шаблону VA.
  • Добавление высказываний внамерение BookFlight.
  • Сохраните и обучите свое приложение LUIS.
  • Опубликуйте свое приложение LUIS.
  • Запуск сценария update_cognitive_models.ps1 согласно шагу 3 из инструкций здесь , которые внесут изменения (ваше новое намерение и высказывания).
    • .\Deployment\Scripts\update_cognitive_models.ps1 -RemoteToLocal
      • ПРИМЕЧАНИЕ: Эта команда должна быть запущена с использованием PowerShell Core и из корневого каталога вашего проекта, т. Е. Внутри вашего виртуальногоПапка помощника.

Результатом выполнения этого сценария должна быть группа файлов, созданных локально, а также файл DispatchLuis.cs, обновляемый довключите ваше новое намерение.Вам также следует проверить созданный файл Summary.html, чтобы убедиться, что ваше новое намерение там.Теперь вам придется обновить код VA, чтобы он действительно что-то делал при срабатывании вашего нового намерения - добавьте еще один оператор if / case в метод RouteAsync файла MainDialog.cs - см. здесь для примера.

Примерно так:

MainDialog.cs

protected override async Task RouteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
{
    // Call to dispatch to get intent

    if (intent == DispatchLuis.Intent.bookflight)
    {
        // Start BookFlightDialog
        await dc.BeginDialogAsync(nameof(BookFlightDialog));
    }
    ...
}
...