2

FormFlow を含むボットを作成しました。「I want to launch a product」と入力すると、LUIS はどのダイアログに移動する必要があるかを通知します。

    internal static IDialog<AssesmentHelper> CreateProduct()
            {
                return Chain.From(() => FormDialog.FromForm(AssesmentHelper.BuildForm))
                    .Do(async (context, profileForm) =>
                    {
                        try
                        {
                            var completed = await profileForm;

                        }
                        catch (FormCanceledException<AssesmentHelper> e)
                        {
                            string reply;
                            if (e.InnerException == null)
                            {
                                reply = $"You quit on {e.Last}--maybe you can finish next time!";
                            }
                            else
                            {
                                reply = Responses.ShortCircuit;
                            }
                            await context.PostAsync(reply);
                        }
                    });
            }

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
        { 
stLuis = await LuisHelper.ParseUserInput(activity.Text);
    switch (stLuis.topScoringIntent.intent)
    {

         case "CreateProduct":
              await Conversation.SendAsync(activity, CreateProduct);
              break;

         case "EditProduct":
               await Conversation.SendAsync(activity, EditProduct);
               break;

           case "None":

               break;

            default:
               break;
    }
}

ダイアログに入ると、ユーザーに番号を選択するように求めます。

番号を選択してください:

  1. アズール
  2. ウィンドウズ

今、私が1,2と答えるとします。Luis はそれを None インテントとして返すため、メッセージは対応するダイアログに移動しません。それは常にNoneケースに行きます。

ダイアログのコードは次のとおりです。

 public static IForm<AssesmentHelper> BuildForm()
        {
            return new FormBuilder<AssesmentHelper>()
                    .Message(Responses.NumberSelection)
                    .Field(nameof(Program))
                    .Field(nameof(Product))
                    .Build();
        }

プログラムと製品の列挙:

[Serializable]
    public enum Program
    {
        None = 0,
        A = 1,
     };

        [Serializable]
        public enum Product
        {
            None = 0,
            Azure = 1,
            Windows = 2
        };

このダイアログに入るとすぐに、プログラムを選択するための番号を選択するように求められます。今私が1,2を選択した場合。Luis はそれを None インテントとして返します。したがって、Case "None" が実行されます。

私が欲しいのは、コントロールを同じダイアログにリダイレクトすることです。製品の編集にも同様のダイアログがあります。そのため、数値を製品の意図として理解するように luis アプリをトレーニングすることはできません。そうしないと、Edit Product の番号を選択するたびに、別のケースに移動します。

以前は何らかの形で正しいインテントを識別していましたが、今日、luis アプリを再公開したところ、識別が停止しました。

4

0 に答える 0