带有LUIS的Microsoft Bot Framework

时间:2016-11-13 16:57:44

标签: c# azure botframework luis

我对此有疑问。 我想在Luis的帮助下创建一个简单的机器人。 我设法创建了一个机器人并在azure上托管它,我还在LUIS中创建了一个 intent 和一个实体。我已经创建了一些话语,并且该方面工作正常。

然后我在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模拟器来获取我的响应时,它总是不会响应。即使我写的信息与话语完全相同。现在我认为这是因为我迷惑了自己。我相信在通过认知服务帐户获取密钥以将其链接到 LUIS 端点之后还有另一个步骤,是否有人知道我接下来应该做什么?

更新

我正在使用Alarm bot example来创建我的机器人,但这让我感到困惑(主要是因为我之前从未使用过Autofac),所以我改为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>

当我运行我的应用程序时,我没有错误,当我使用 Microsoft Bot Emulator 与MicrosoftAppId和Secret时,我可以输入消息,但它仍然像以前一样。它总是进入 Luis Intent,永远不会进入&#34;选择类别&#34;一。 值得注意的是, LuisResult 始终为空...

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您无需复制两个键。

您只需要使用两个键中的任何一个作为LuisModel的第二个参数。对于第一个参数,请使用看起来像GUID的应用程序ID,并且可以在LUIS.ai上找到。

更新

1)以下是您作为[LuisModel("","")]的第一个参数 - 这是您的LUIS应用ID:

enter image description here

2)作为第二个参数,您可以使用从Azure门户或Cognitive Services帐户获得的两个密钥中的任何一个。无论两者中的哪一个都无关紧要。

最后,您可以随时测试您的终端,并在luis.ai查看您帐户中的输入参数。单击“发布”,在“查询”中输入任何内容,然后按Enter键。您将在URL中看到params。

enter image description here