2

私はLuisDialog、ユーザーと対話するために作成する Microsoft ボット フレームワーク プロジェクトに取り組んでいます。おそらく、複数のカテゴリに分類できる多くの異なるインテントを持つことになるでしょう。

これを整理する最良の方法は何ですか?

  • すべてのメソッドを含む1 つの大きなLuisDialogクラスを作成する必要がありますか?LuisIntent

    これは私には整理されていないように思えます。

  • LuisDialogカテゴリごとに複数のクラスを作成する必要がありますか?

    これは多くの問題を引き起こす可能性があります。すべてのカテゴリに含まれるインテントがある場合はどうすればよいですか? ユーザーメッセージが毎回チェックされていることを確認するにはどうすればよいLuisDialogですか? これはおそらく良い考えではありません。

  • LuisDialog各ファイル/クラスがカテゴリを表す、他のファイル/クラスのメソッドを何らかの形で「含める」1つの大きなクラスを作成する必要がありますか?

    これは良いアイデアのように思えますが、C# でこれを行う方法がわかりません。

他の提案がある場合は、お知らせください。事前に感謝します。

4

3 に答える 3

2

より良い解決策があるかどうか疑問に思っている人のために。

partialここでは、C# でクラスを使用することが最善の解決策のようです。詳細については、こちらをお読みください。

于 2016-08-10T19:40:44.960 に答える
2

編集

ありがとうございました!これはまともな解決策のように思えますが、MessageReceived メソッドが categoryXHandler クラス (保護されている) からアクセスできない場合、どうすれば context.Wait(MessageReceived) を実行できますか?

私がすることは、ユーザーに投稿したいアクティビティCategoryHandlerを返すことです。私のコードサンプル(メソッド)を見てください。HandleCategoryA


あなたが持っていると仮定して

  1. category-A、、、Intent1_ Intent2_ Intent3_Intent4
  2. category-BIntent1、_Intent2
  3. category-C持っているIntent1

最善の方法は、単一の を 1 つ持ち、各カテゴリを処理する3 つのメソッドLuisDialogを定義することだと思います。

public class MyDialog : LuisDialog<string>
{
    [LuisIntent(CategoryA.Intent1)]
    [LuisIntent(CategoryA.Intent2)]
    [LuisIntent(CategoryA.Intent3)]
    [LuisIntent(CategoryA.Intent4)]
    public async Task HandleCategoryA(IDialogContext context, LuisResult result)
    {
        var returnActivity = CategoryAHandler.Handle(result); // your business logic will be put inside this method

        await context.PostAsync(returnActivity);
        context.Wait(MessageReceived);
    }

    [LuisIntent(CategoryB.Intent1)]
    [LuisIntent(CategoryB.Intent2)]
    public async Task HandleCategoryB(IDialogContext context, LuisResult result)
    {
        CategoryBHandler.Handle(result); // your business logic will be put inside this method
    }

    [LuisIntent(CategoryC.Intent1)]
    public async Task HandleCategoryC(IDialogContext context, LuisResult result)
    {
        CategoryCHandler.Handle(result); // your business logic will be put inside this method
    }
}

それが役に立てば幸い。

于 2016-08-08T09:48:22.350 に答える