Прежде всего, относительно этого учебника :
В этой статье используется Bot Framework v3 SDK.Пожалуйста, ознакомьтесь с этой статьей Bot Framework, если вас интересует версия этой информации для Bot Framework v4 SDK.
Она старая и использует V3 из Bot Framework SDK.Я настоятельно рекомендую создавать любые новые боты в V4.Используйте Добавить учебник по пониманию естественного языка .
InternalServerError
указывает, что где-то есть проблема с вашим бот-кодом.
Вот несколько вещей, которые выможет попробовать, что, вероятно, вызывает проблему:
Написать код, который имеет дело с Нет ответа
Официальный Пример QnAMaker делает это здесь :
// 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.
В Azure Portal > Resource Group > QnA App Service > Configuration
(примечание: это НЕ служба приложения вашего бота; она предназначена только для QnAMaker), убедитесь, что установлено DefaultAnswer
:
Отладка
Предполагая, что ваш бот действительно ломается только тогда, когда ответы QnA не найдены, эти две вещи должны быть единственными, которые вам необходимо устранить.В противном случае, вот как отладить бота:
Visual Studio / C # :
- В Visual Studio запустите своего бота, нажав F5 или нажав:
Откройте свой бот в эмуляторе
В Visual Studio перейдите на Debug > Windows > Exception Settings
:
В окне «Настройки исключений» установите флажок «Общие исключения во время выполнения»
В эмуляторе сделайте то, что заставит вашего бота сломаться.Бот должен автоматически остановиться при появлении ошибки.Здесь я заставил один:
Как вы можете видеть, он говорит System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
Это означает, что мой массив, response
не имеет 0
-го элемента, потому что ответы не были возвращены.
Другие проблемы будут отображать другие ошибки.Обычно вы можете довольно точно определить проблемы, прочитав подробности об ошибках и выполнив поиск по сети для кода ошибки, если вам нужны дополнительные сведения.
VS Code
- В VS Code запустите своего бота, нажав F5 и выбрав «Node.js» (для ботов Node / TypeScript) или
.NET Core
(для ботов C #):
Откройте своего бота в эмуляторе
В VS Code откройте меню «Отладка»:
В разделе «BREAKPOINTS» установите флажок «Все исключения» (Примечание: важно запустить вашего бота, прежде чем ставить этот флажок, потому что есть
нормальные исключения, возникающие при запуске бота):
В эмуляторе сделайте то, что заставит вашего бота сломаться.Бот должен автоматически остановиться при появлении ошибки.Здесь я заставил один:
Как вы можете видеть, он говорит Exception has occurred: TypeError TypeError: Cannot read property 'answer' of undefined
Это означает, что qnaResults[0]
не определено, или не существует, что указывает на то, что ответы не были возвращены.
Другие проблемы будут отображать другие ошибки.Обычно вы можете довольно точно определить проблемы, прочитав подробности об ошибках и выполнив поиск по сети для кода ошибки, если вам нужны дополнительные сведения.