1

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

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

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

我如何在课堂上同时使用 Luis 模型?请帮忙

4

2 回答 2

2

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

于 2016-07-06T16:29:08.713 回答
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方法,它只是 Luis Dialog sdk 的一个副本。

于 2016-09-08T11:22:08.330 回答