首先,关于那个教程 https://learn.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-luis-dialogs?view=azure-bot-service-3.0:
本文使用 Bot Framework v3 SDK。如果您对此信息的 Bot Framework v4 SDK 版本感兴趣,请参阅此 Bot Framework 文章。
它很旧并且使用 Bot Framework SDK V3。我强烈、强烈建议在 V4 中构建任何新机器人。使用反而。
InternalServerError
表明您的机器人代码在某处存在问题。
您可以尝试以下一些可能导致该问题的操作:
编写处理“无应答”问题的代码
官方QnAMaker 示例 https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/csharp_dotnetcore/11.qnamaker这样做here https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/csharp_dotnetcore/11.qnamaker/Bots/QnABot.cs#L45:
// Query QnAMaker for Answer
var response = await qnaMaker.GetAnswersAsync(turnContext);
// If we have an answer, send it to the user
if (response != null && response.Length > 0)
{
await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
// If we don't have an answer, tell that to the user
else
{
await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
}
确保您的 QnAMaker 服务有DefaultAnswer
如果您将机器人设置为从 QnAMaker 服务获取默认的无应答,则这可能只是一个问题。
In Azure Portal > Resource Group > QnA App Service > Configuration
(注意:这不是您的机器人的应用程序服务;这是特定于 QnAMaker 的),确保DefaultAnswer
is set:
Debug
假设您的机器人实际上仅在找不到 QnA 答案时才出现故障,那么这两件事应该是您唯一需要排除故障的事情。否则,以下是调试机器人的方法:
视觉工作室/C#:
- 在 Visual Studio 中,按 F5 或单击以下命令来运行机器人:
在模拟器中打开您的机器人
在 Visual Studio 中,转到Debug > Windows > Exception Settings
:
- 在“异常设置”窗口中,完全选中“公共语言运行时异常”
- 在模拟器中,做一些让你的机器人崩溃的事情。当出现错误时,机器人应该自动停止。在这里,我强行提出了一个:
正如你所看到的,它说System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
这意味着我的数组,response
没有0
th 元素,因为没有返回答案。
其他问题将显示其他错误。通常,您可以通过阅读错误详细信息并在网络上搜索错误代码(如果需要其他详细信息)来相当轻松地查明问题。
VS Code
- 在 VS Code 中,按 F5 并选择“Node.js”(对于 Node/TypeScript 机器人)来运行机器人,或者
.NET Core
(对于 C# 机器人):
在模拟器中打开您的机器人
在 VS Code 中,打开“调试”菜单:
- 在“断点”下,选中“所有异常”(注意:在选中此框之前运行您的机器人非常重要,因为有normal机器人启动时发生的异常):
- 在模拟器中,做一些让你的机器人崩溃的事情。当出现错误时,机器人应该自动停止。在这里,我强行提出了一个:
正如你所看到的,它说Exception has occurred: TypeError TypeError: Cannot read property 'answer' of undefined
这意味着qnaResults[0]
未定义或不存在,这表明未返回任何答案。
其他问题将显示其他错误。通常,您可以通过阅读错误详细信息并在网络上搜索错误代码(如果需要其他详细信息)来相当轻松地查明问题。