2016-07-06 4 views
1

私の個人的な使用事例にユーザーの問い合わせに応答するボットを開発中です。同様に、私はLuisで独自のアプリを構築し、事前に構築されたコルタナのインテントを使用しようとしているので、天気や道案内などのよくある質問にボットが応答できるようにしたいと考えています。以下のサンプル複数のLuisモデルをボットフレームワークに統合する方法

[LuisModel("c413b2ef-382c-45bd-8ff0-f76dad0e2a821", "697asfc173ce6f40aca4c99e7d38assad6cad")] 
public class myClass: LuisDialog<T> 
{ 
} 

これは、Cortana Intentsまたは自分のインテントだけがサブスクリプションIDとキーに依存します。

私のクラスで両方のLuisモデルを使用するにはどうすればよいですか?助けてください

答えて

2

約20日前に、彼らは複数のLuisModelとILuisServiceインスタンスをサポートするようにLuisDialogを更新しました(これはcommitにチェックしてください)。この変更はすでにNuGet 1.2.4でリリースされました。

+0

まだ複数のダイアログを追加する方法が混乱しています。私のコードを見ると、私のクラスにLuisモデルで注釈を付けることができます。もう1つのモデルを試しましたが、検出されません。 – Satheesh

+0

@Satheeshおそらくあなたはフレームワークの古いバージョンを使用していますか?私がクラスを複数のモデルで飾るなら、私のために働きます。この情報のためのejadibへの巨大な感謝! – K48

+0

@ K48はい、それは私のためにも機能します。複数のモデルを直接配置すると、2番目のモデルでNone Intentを選択する機会が増えます。それを機能させるには調整が必要です。しかし、私は少し違った試みをしました。インテントを別のクラスに配置し、複数のLUISモデルを使用しました。それは検出されませんでした。しかし、今私はそれを達成したと言ってうれしいです。 – Satheesh

0

My Botはさまざまな用途に応じます。だから私は、すべての各ユースケースに複数のクラスを使用する必要があります。このコードを使用すると、複数のクラスで私たちのタスク(インテントでアノテーションされた)を書くことができます。

以下のようにHandler MethodをLuisDialogにオーバーライドして解決策が見つかりました。私のBaseformLuisDialogクラスを継承しています。インテントを持っている他のすべてのクラスは、ルイス・ダイアログSDKから同じだけのコピーであるEnumerateHandlers方法があるコードで私のBaseForm

protected override IDictionary<string, IntentActivityHandler> GetHandlersByIntent() 
     { 
      var classCollection = AppDomain.CurrentDomain.GetAssemblies() 
         .SelectMany(assembly => assembly.GetTypes()) 
         .Where(type => type.IsSubclassOf(typeof(BaseForm))); 
      List<KeyValuePair<string, IntentActivityHandler>> handler = new List<KeyValuePair<string, IntentActivityHandler>>(); 
      foreach (var item in classCollection) 
      { 
       handler.AddRange(MyLuisDialog.EnumerateHandlers(Activator.CreateInstance(item)).ToList()); 
      }    
      return handler.ToDictionary(kv => kv.Key, kv => kv.Value); 
     } 

を継承します。

関連する問題