带有 LUIS 的 Microsoft Bot 框架
Microsoft Bot Framework with LUIS
伙计,我对此有疑问吗?
我正在尝试在 Luis 的帮助下创建一个简单的机器人。
我设法创建了一个机器人并将其托管在 azure 上,我还在 LUIS 中创建了一个 intent 和一个 entity。我已经创建了一些 utterances 并且那一边工作正常。
然后我在 C# 中由 LuisDialog 创建。我必须在 Azure 中创建 Cognitive Services API 订阅,然后将它生成的 2 个密钥复制到我的 LuisDialog.
我的对话框如下所示:
/// <summary>
/// Entities for the PiiiCK LUIS model.
/// </summary>
public static partial class PiiiCK
{
public const string DefaultCategory = "none";
public const string ChooseCategoryIntent = "Choose category";
}
[Serializable]
public class PiiiCKLuisDialog : LuisDialog<object>
{
/// <summary>
/// Tries to find the category
/// </summary>
/// <param name="result">The Luis result</param>
/// <param name="alarm"></param>
/// <returns></returns>
public string TryFindCategory(LuisResult result)
{
// Variable for the title
EntityRecommendation title;
// If we find our enenty, return it
if (result.TryFindEntity(PiiiCK.ChooseCategoryIntent, out title))
return title.Entity;
// Default fallback
return PiiiCK.DefaultCategory;
}
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
// Create our response
var response = $"Sorry I did not understand";
// Post our response back to the user
await context.PostAsync(response);
// Execute the message recieved delegate
context.Wait(MessageReceived);
}
[LuisIntent("Choose category")]
public async Task ChooseCategory(IDialogContext context, LuisResult result)
{
// Get our category
var category = TryFindCategory(result);
// Create our response
var response = $"Found our entity: { category }";
// Post our response back to the user
await context.PostAsync(response);
// Execute the message recieved delegate
context.Wait(MessageReceived);
}
}
当我 运行 项目并使用 Bot 模拟器 来获取我的响应时,它总是命中 none。即使我写的消息和话语一模一样。现在我认为这是因为我把自己弄糊涂了。我相信在从 Cognitive Service 帐户获取密钥到 link 到 LUIS 端点之后还有另一个步骤,有人知道吗我接下来应该做什么?
更新
我使用的是 Alarm bot example to create my bot, but it was confusing me (mainly because I have never used Autofac before), so I have switched to the Simple Alarm bot example。
我需要做的改变是 Global.asax:
protected void Application_Start() => GlobalConfiguration.Configure(WebApiConfig.Register);
并将 LuisModel 数据注释添加到 PiiiCKLuisDialog,如下所示:
[Serializable]
[LuisModel("The Luis App Id", "The microsoft cognitive services subscription key")]
public class PiiiCKLuisDialog : LuisDialog<object>
当我 运行 我的应用程序时,我没有收到任何错误,当我使用带有 MicrosoftAppId 和 Secret 的 Microsoft Bot Emulator 时,我可以输入一条消息,但是它仍然和以前一样。它总是转到 None Luis Intent 而从不转到“选择类别”。
值得注意的是 LuisResult 始终为 null...
有什么想法吗?
您不需要复制两个密钥。
您只需使用两个键中的任意一个作为 LuisModel 的第二个参数。对于第一个参数,使用看起来像 GUID 的应用程序 ID,可以在 LUIS.ai.
上找到
更新:
1) 这是您用作 [LuisModel("","")]
的第一个参数的内容 - 那是您的 LUIS 应用程序 ID:
2) 作为第二个参数,您可以使用从 Azure 门户或认知服务帐户获得的两个密钥中的任意一个。两者中的哪一个都没有关系。
最后,您始终可以测试您的端点,并从您位于 luis.ai 的帐户查看两个输入参数。单击 "Publish",在 "query" 中输入任何内容,然后按 Enter。您将在 URL 中看到参数。
伙计,我对此有疑问吗? 我正在尝试在 Luis 的帮助下创建一个简单的机器人。 我设法创建了一个机器人并将其托管在 azure 上,我还在 LUIS 中创建了一个 intent 和一个 entity。我已经创建了一些 utterances 并且那一边工作正常。
然后我在 C# 中由 LuisDialog 创建。我必须在 Azure 中创建 Cognitive Services API 订阅,然后将它生成的 2 个密钥复制到我的 LuisDialog.
我的对话框如下所示:
/// <summary>
/// Entities for the PiiiCK LUIS model.
/// </summary>
public static partial class PiiiCK
{
public const string DefaultCategory = "none";
public const string ChooseCategoryIntent = "Choose category";
}
[Serializable]
public class PiiiCKLuisDialog : LuisDialog<object>
{
/// <summary>
/// Tries to find the category
/// </summary>
/// <param name="result">The Luis result</param>
/// <param name="alarm"></param>
/// <returns></returns>
public string TryFindCategory(LuisResult result)
{
// Variable for the title
EntityRecommendation title;
// If we find our enenty, return it
if (result.TryFindEntity(PiiiCK.ChooseCategoryIntent, out title))
return title.Entity;
// Default fallback
return PiiiCK.DefaultCategory;
}
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
// Create our response
var response = $"Sorry I did not understand";
// Post our response back to the user
await context.PostAsync(response);
// Execute the message recieved delegate
context.Wait(MessageReceived);
}
[LuisIntent("Choose category")]
public async Task ChooseCategory(IDialogContext context, LuisResult result)
{
// Get our category
var category = TryFindCategory(result);
// Create our response
var response = $"Found our entity: { category }";
// Post our response back to the user
await context.PostAsync(response);
// Execute the message recieved delegate
context.Wait(MessageReceived);
}
}
当我 运行 项目并使用 Bot 模拟器 来获取我的响应时,它总是命中 none。即使我写的消息和话语一模一样。现在我认为这是因为我把自己弄糊涂了。我相信在从 Cognitive Service 帐户获取密钥到 link 到 LUIS 端点之后还有另一个步骤,有人知道吗我接下来应该做什么?
更新
我使用的是 Alarm bot example to create my bot, but it was confusing me (mainly because I have never used Autofac before), so I have switched to the Simple Alarm bot example。 我需要做的改变是 Global.asax:
protected void Application_Start() => GlobalConfiguration.Configure(WebApiConfig.Register);
并将 LuisModel 数据注释添加到 PiiiCKLuisDialog,如下所示:
[Serializable]
[LuisModel("The Luis App Id", "The microsoft cognitive services subscription key")]
public class PiiiCKLuisDialog : LuisDialog<object>
当我 运行 我的应用程序时,我没有收到任何错误,当我使用带有 MicrosoftAppId 和 Secret 的 Microsoft Bot Emulator 时,我可以输入一条消息,但是它仍然和以前一样。它总是转到 None Luis Intent 而从不转到“选择类别”。 值得注意的是 LuisResult 始终为 null...
有什么想法吗?
您不需要复制两个密钥。
您只需使用两个键中的任意一个作为 LuisModel 的第二个参数。对于第一个参数,使用看起来像 GUID 的应用程序 ID,可以在 LUIS.ai.
上找到更新:
1) 这是您用作 [LuisModel("","")]
的第一个参数的内容 - 那是您的 LUIS 应用程序 ID:
2) 作为第二个参数,您可以使用从 Azure 门户或认知服务帐户获得的两个密钥中的任意一个。两者中的哪一个都没有关系。
最后,您始终可以测试您的端点,并从您位于 luis.ai 的帐户查看两个输入参数。单击 "Publish",在 "query" 中输入任何内容,然后按 Enter。您将在 URL 中看到参数。