Организация LUIS намерена разделить классы - PullRequest
0 голосов
/ 21 января 2019

Я борюсь с разделением реализаций намерений LUIS на отдельные классы. Сейчас я помещаю весь код для намерений LUIS в класс LuisDialog, что делает мой код нечетким для чтения (тысячи кодов наверняка в одном классе). Итак, что я могу сделать, чтобы разделить каждую реализацию намерений LUIS на отдельные классы.

Я хочу дополнительно разобраться с намерением «CreateTodo» в отдельном классе и сделать класс LuisDialog простым и понятным для чтения. Какой синтаксис я могу использовать для? Context.Call? Я видел похожую проблему, которая помогает при использовании частичного класса. Так кто-нибудь может показать образец для меня? Заранее спасибо .:)

[Serializable]
public class LuisDialog : LuisDialog<object>
{
    [LuisIntent("")]
    [LuisIntent("None")]
    public async Task NoneIntent(IDialogContext context, LuisResult result)

    [LuisIntent("CreateTodo")]
    public async Task CreateTodoIntent(IDialogContext context, LuisResult 
    result)

    //...more intents
}

1 Ответ

0 голосов
/ 21 января 2019

Похоже, вы используете v3 бот-фреймворка. Таким образом, вы можете использовать context.Call или context.Forward. context.Call запустит новое диалоговое окно, а затем дождется получения нового сообщения. context.Forward отправит текущее сообщение в новый диалог.

Если у вас есть диалоговое окно с именем CreateTodoDialog, и вы хотите запустить его, вы должны использовать context.Call(new CreateTodoDialog(), AfterCreateTodoDialog), где AfterCreateTodoDialog - это то, что вы хотите запустить после нового диалогового окна.

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

...