如何将多个Luis模型集成到bot框架中

时间:2016-07-06 11:28:38

标签: botframework luis

我正在开发一个机器人,它会响应用户查询我的私人用例。同样,我想让机器人回答一些常见的问题,如天气或方向等。所以我在Luis建立了一个自己的应用程序,并尝试使用预建的cortana意图。下面的示例

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

这只接受Cortana Intents或我自己的Intent取决于订阅ID和密钥。

如何在班级中使用两种Luis模型?请帮忙

2 个答案:

答案 0 :(得分:2)

大约20天前,他们更新了LuisDialog以支持多个LuisModel和ILuisService实例(请查看此commit)。该更改已在NuGet 1.2.4中发布。

答案 1 :(得分:0)

My Bot会回答不同的用例。所以我必须为所有用例使用多个类。使用这段代码,我们可以在多个类中编写我们的任务(用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方法,它只是Luis Dialog sdk的相同副本。