2016-07-06 43 views
1

我正在開發一個bot,它將響應用戶對我私人用例的查詢。同樣,我想啓用機器人來回答一些常見的問題,如天氣或方向等。所以我建立了一個自己的應用程序Luis,也試圖使用預建的cortana意圖。下面的示例如何將多個Luis模型集成到機器人框架

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

這將只接受Cortana Intents或我自己的Intents取決於訂閱ID和密鑰。

如何在我的班級中使用兩個Luis模型?請幫助

回答

2

大約20天前,他們更新了LuisDialog支持多個LuisModel和ILuisService實例(檢查這個commit)。這個變化已經在NuGet 1.2.4中發佈了。

+0

仍然困惑如何添加多個對話框。正如你可以看到我的代碼,我用Luis模型註釋了我的課程。嘗試給出另一個模型,但它沒有檢測到。 – Satheesh

+0

@Satheesh可能你使用的是舊版本的框架?如果我用多個模型裝飾課程,它適用於我。非常感謝ejadib這個信息! – K48

+0

@ K48是的,它也適用於我。如果我們直接放置多個模型,那麼在第二個模型中選擇無意圖的機會會更多。我們必須做一些調整才能使其工作。但我嘗試了一些不同。我將我的意圖放在不同的班級中,並使用多個LUIS模型。它沒有發現。但現在我很高興地說,我實現了這一點。 – Satheesh

0

我的機器人將回答不同的使用情況。所以我必須爲每個用例使用多個類。使用這個代碼是,我們可以在多個類中編寫我們的任務(用Intents指定)。

我通過重寫的LuisDialog如下的處理程序方法找到的解決方案。我的Baseform繼承了LuisDialog類。其中有意向的所有其他類將繼承我的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); 
     } 
代碼

EnumerateHandlers方法,它僅僅是一個從路易斯對話框SDK相同的副本。