我正在开发一个机器人,它会响应用户查询我的私人用例。同样,我想让机器人回答一些常见的问题,如天气或方向等。所以我在Luis建立了一个自己的应用程序,并尝试使用预建的cortana意图。下面的示例
[LuisModel("c413b2ef-382c-45bd-8ff0-f76dad0e2a821", "697asfc173ce6f40aca4c99e7d38assad6cad")]
public class myClass: LuisDialog<T>
{
}
这只接受Cortana Intents或我自己的Intent取决于订阅ID和密钥。
如何在班级中使用两种Luis模型?请帮忙
答案 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的相同副本。