我的机器人将回答不同的使用情况。所以我必须为每个用例使用多个类。使用这个代码是,我们可以在多个类中编写我们的任务(用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相同的副本。
仍然困惑如何添加多个对话框。正如你可以看到我的代码,我用Luis模型注释了我的课程。尝试给出另一个模型,但它没有检测到。 – Satheesh
@Satheesh可能你使用的是旧版本的框架?如果我用多个模型装饰课程,它适用于我。非常感谢ejadib这个信息! – K48
@ K48是的,它也适用于我。如果我们直接放置多个模型,那么在第二个模型中选择无意图的机会会更多。我们必须做一些调整才能使其工作。但我尝试了一些不同。我将我的意图放在不同的班级中,并使用多个LUIS模型。它没有发现。但现在我很高兴地说,我实现了这一点。 – Satheesh