如何为机器人构建器sdk bot设置LuisModel

时间:2018-04-25 22:32:04

标签: c# bots luis

我使用机器人构建器3.15.0创建了一个非常基本的机器人。我已经定义和训练了LUIS,其中有几个意图等。我已经发布了作为分期。

这是一组键的结果。 我已将第一个键作为第一个参数放入LuisModelAttribute,第二个键作为第二个参数,然后添加域:westus.api.cognitive.microsoft.com和Staging = true

[LuisModel("{the first key listed on the LUIS publish page}", "the second key listed on the LUIS publish page",
    domain: "eastus.api.cognitive.microsoft.com", Staging = true)]

我在bot的rootDialog中有以下代码

        private async Task MessageReceivedAsync (IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;
        await context.Forward(new LuisRepeating(), ResumeAfterLuisDialog, activity, CancellationToken.None);
    }   /* method RootDiaglog MessageReceivedAsync */

    private async Task ResumeAfterLuisDialog (IDialogContext context, IAwaitable<object> result)
    {
        context.Wait(MessageReceivedAsync);
    }

当我尝试使用Bot仿真器测试时,连接到机器人工作。在第一篇文章中,上下文中的断点。在ResumeAfterLuisDialog中等待显示结果有&#34;失败&#34;内容为{&#34 ;; None&#34;},并且我的Luis意图(包括无和空白)均未被调用。

更新

事实证明,代码是&#34;工作&#34;有或没有应用程序ID周围的{}。真正的问题是SDK中的Luis Dialog代码在LuisDialog的第416行抛出一个InvalidIntentHandlerException,但是GitHub上的当前代码执行第452行的抛出(这个问题随着问题634而改变)。

对于未来的人来说,&#34 ;;无&#34;是&#39;消息&#39;传递给InvalidIntentHandlerException异常,这是一个;失败方法上LuisIntent属性的定界字符串。异常中的方法名称是bot构建器尝试分派的方法的名称。它选择了正确的方法等所以现在我的工作是 1) - 找出我没有使用当前代码的原因 2) - 为什么我的方法声明不正确

2 个答案:

答案 0 :(得分:0)

查看您的LuisModel属性属性。 我认为你不需要将App ID放在大括号中。尝试删除&#34; LUIS发布页面上列出的第一个键&#34;周围的花括号。

在更换应用ID,订阅密钥和短语后,在浏览器中输入以下网址,然后按Enter键。如果有任何错误,您将会知道出现什么样的错误等。

https://eastus.api.cognitive.microsoft.com/luis/v2.0/apps/APPID?subscription-key=subscriptionKey&verbose=true&timezoneOffset=0&q=yourPhraseHere

答案 1 :(得分:0)

正如Ranganatha所说,应该删除花括号。它应该采用以下格式,包含App Id和订阅密钥。您可以找到更多代码示例here

[LuisModel("9fa4985b-xxxxxxx-b726795a98b4", "a5d38xxxxxe3671953")]

您可以使用端点url来测试您的应用。基于http codes,您可以调试错误。

如果您想使用Authoring API来训练和发布应用,可以找到更多信息here。 如果还有其他问题,请联系Luisuservoice@microsoft.com。