【发布时间】:2018-10-06 12:27:12
【问题描述】:
我使用 bot builder 3.15.0 创建了一个非常基本的机器人。我已经定义并训练了 LUIS,有几个意图等。我已发布为 staging。
这样做的结果是一组键。 我将第一个键作为 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)]
我的机器人 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 模拟器对此进行测试时,与 bot 的连接工作正常。在第一篇文章中,context.Wait 中的断点显示结果“失败”,内容为 {";None"} 并且没有调用我的 Luis 意图(包括 None 和空白)。
更新
事实证明,无论是否使用应用程序 ID 周围的 {},代码都可以“工作”。真正的问题是 SDK 中的 Luis Dialog 代码在 LuisDialog 的第 416 行抛出了 InvalidIntentHandlerException,但 GitHub 上的当前代码在第 452 行抛出了异常(问题 634 已更改)。
对于未来的人来说,“;None”是传递给 InvalidIntentHandlerException 异常的“消息”,它是一个 ;来自失败方法的 LuisIntent 属性的分隔字符串。异常中的方法名称是机器人构建器尝试分派的方法的名称。它选择了正确的方法等,所以现在我的工作是 1) - 找出我不使用当前代码的原因 2) - 为什么我的方法声明不正确
【问题讨论】:
标签: c# bots azure-language-understanding