Использование QnA Maker для ответов на вопросыUse QnA Maker to answer questions

применимо к: Пакет SDK v4APPLIES TO: SDK v4

QnA Maker создает слой вопросов и ответов для диалога на основе ваших данных.QnA Maker provides a conversational question and answer layer over your data. Это позволяет вашему роботу отправить вопрос в QnA Maker и получить ответ без необходимости анализировать и интерпретировать цель вопроса.This allows your bot to send a question to the QnA Maker and receive an answer without needing to parse and interpret the question intent.

Одна из основных сложностей при создании собственной службы QnA Maker — заполнить ее начальным набором вопросов и ответов.One of the basic requirements in creating your own QnA Maker service is to populate it with questions and answers. Во одних случаях вопросы и ответы уже существуют в таком содержимом, как разделы с вопросами и ответами или другая документация. В других случаях вы можете настроить ответы на вопросы в более естественном разговорном стиле.In many cases, the questions and answers already exist in content like FAQs or other documentation; other times, you may want to customize your answers to questions in a more natural, conversational way.

Предварительные требованияPrerequisites

Об этом примереAbout this sample

Чтобы использовать QnA Maker в боте, создайте базу знаний на портале QnA Maker, как показано в следующем разделе.To use QnA Maker in your bot, you need to create a knowledge base in the QnA Maker portal, as shown in the next section. После этого бот сможет использовать базу знаний, чтобы отвечать на вопросы пользователя.Your bot then can use the knowledge base to answer the user's questions.

Поток логики QnABot — C#

OnMessageActivityAsync вызывается для каждого полученного блока данных, введенных пользователем.OnMessageActivityAsync is called for each user input received. Этот метод обращается к информации _configuration, сохраненной в файле appsetting.json этого примера кода. При этом выполняется поиск значения для подключения к предварительно настроенной базе знаний QnA Maker.When called, it accesses _configuration information stored within the sample code's appsetting.json file to find the value to connect to your pre-configured QnA Maker knowledge base.

Введенные пользователем данные передаются в эту базу знаний, а наиболее точный полученный ответ отображается для пользователя.The user's input is sent to your knowledge base and the best returned answer is displayed back to your user.

Создание службы QnA Maker и публикация базы знанийCreate a QnA Maker service and publish a knowledge base

  1. Создайте службу QnA Maker.Create a QnA Maker service.
  2. Создайте базу знаний на основе файла smartLightFAQ.tsv, который расположен в папке CognitiveModels этого примера проекта.Create a knowledge base using the smartLightFAQ.tsv file located in the CognitiveModels folder of the sample project. Присвойте базе знаний имя qna и используйте файл smartLightFAQ.tsv, чтобы ее заполнить.Name your knowledge base qna, and use the smartLightFAQ.tsv file to populate it.

Этот способ можно также использовать для доступа к собственным базам знаний QnA Maker.You can also use these steps to access your own QnA Maker knowledge bases.

Примечание

В документации по QnA Maker содержатся инструкции по созданию службы в Azure, а также по созданию, обучению и публикации базы знаний.The QnA Maker documentation has instructions on how to create a service in Azure and to create, train, and publish your knowledge base.

Получение значений для подключения бота к базе знанийObtain values to connect your bot to the knowledge base

  1. На сайте QnA Maker выберите свою базу знаний.In the QnA Maker site, select your knowledge base.
  2. При открытой базе знаний выберите Параметры.With your knowledge base open, select the Settings. Сохраните значение из поля Имя службы.Record the value shown for service name. Это значение используется для поиска нужной базы знаний в интерфейсе портала QnA Maker.This value is useful for finding your knowledge base of interest when using the QnA Maker portal interface. Оно не используется для подключения к этой базе знаний из приложения бота.It is not used to connect your bot app to this knowledge base.
  3. Прокрутите вниз, чтобы найти сведения о развертывании, и запишите следующие значения из примера HTTP-запроса Postman:Scroll down to find Deployment details record the following values from the Postman sample HTTP request:
    • POST /knowledgebases/<knowledge-base-id>/generateAnswerPOST /knowledgebases/<knowledge-base-id>/generateAnswer
    • Host: <your-host-url>Host: <your-host-url>
    • Авторизация: EndpointKey <your-endpoint-key>Authorization: EndpointKey <your-endpoint-key>

URL-адрес узла будет начинаться с https:// и заканчиваться /qnamaker, например https://<hostname>.azure.net/qnamaker.Your host URL will start with https:// and end with /qnamaker, such as https://<hostname>.azure.net/qnamaker. Чтобы подключиться к базе знаний QnA Maker, боту потребуется идентификатор базы знаний, URL-адрес узла и ключ конечной точки.Your bot will need the knowledge base ID, host URL, and endpoint key to connect to your QnA Maker knowledge base.

Обновление файла параметровUpdate the settings file

Во-первых, добавьте в файл параметров сведения, необходимые для доступа к базе знаний: имя узла, ключ конечной точки и идентификатор базы знаний (kbId).First, add the information required to access your knowledge base including hostname, endpoint key and knowledge base ID (kbId) into the settings file. Это значения, полученные на вкладке Settings (Параметры) базы знаний в QnA Maker.These are the values you saved from the Settings tab of your knowledge base in QnA Maker.

Если это развертывание не предназначено для рабочей среды, поля идентификатора приложения и пароля можно оставить пустыми.If you aren't deploying this for production, your bot's app ID and password fields can be left blank.

Примечание

Чтобы добавить базу знаний QnA Maker в существующее приложение бота, обязательно создайте понятные описательные заголовки для записей QnA.To add a QnA Maker knowledge base into an existing bot application, be sure to add informative titles for your QnA entries. Параметр name в этом разделе предоставляет ключ для доступа к этой информации из приложения.The "name" value within this section provides the key required to access this information from within your app.

appsettings.jsonappsettings.json

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "QnAKnowledgebaseId": "",
  "QnAEndpointKey": "",
  "QnAEndpointHostName": ""
}

Настройка экземпляра QnA MakerSet up the QnA Maker instance

Для начала мы создадим объект для доступа к базе знаний QnA Maker.First, we create an object for accessing our QnA Maker knowledge base.

Убедитесь, что пакет NuGet Microsoft.Bot.Builder.AI.QnA установлен для вашего проекта.Be sure that the Microsoft.Bot.Builder.AI.QnA NuGet package is installed for your project.

В методе OnMessageActivityAsync в файле QnABot.cs мы создадим экземпляр QnAMaker.In QnABot.cs, in the OnMessageActivityAsync method, we create a QnAMaker instance. Класс QnABot извлекает имена для сведений о подключении, сохраненные выше в appsettings.json.The QnABot class is also where the names of the connection information, saved in appsettings.json above, are pulled in. Если вы выбрали другие имена для сведений о подключении к базе знаний в файле параметров, обязательно обновите имена в этом методе, чтобы они соответствовали выбранным.If you have chosen different names for your knowledge base connection information in your settings file, be sure to update the names here to reflect your chosen name.

Bots/QnABot.csBots/QnABot.cs

var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
    KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
    EndpointKey = _configuration["QnAEndpointKey"],
    Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);

Вызов QnA Maker из кода ботаCalling QnA Maker from your bot

Когда боту потребуется ответ от QnAMaker, вызовите из кода бота метод GetAnswersAsync(), чтобы получить ответ с учетом текущего контекста.When your bot needs an answer from QnAMaker, call GetAnswersAsync() from your bot code to get the appropriate answer based on the current context. Если вы обращаетесь к собственной базе знаний, измените представленное ниже сообщение об отсутствии ответов на более информативное для пользователей.If you are accessing your own knowledge base, change the no answers found message below to provide useful instructions for your users.

Bots/QnABot.csBots/QnABot.cs

var options = new QnAMakerOptions { Top = 1 };

// The actual call to the QnA Maker service.
var response = await qnaMaker.GetAnswersAsync(turnContext, options);
if (response != null && response.Length > 0)
{
    await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
    await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
}

Тестирование ботаTest the bot

Выполните этот пример на локальном компьютере.Run the sample locally on your machine. Установите Bot Framework Emulator, если вы этого еще не сделали.If you have not done so already, install the Bot Framework Emulator. Дополнительные инструкции доступны в файле сведений для примера C#, JavaScriptFor further instructions, refer to the readme file for C# or Javascript. или Python.or Python sample.

Запустите эмулятор, подключитесь к роботу и отправьте сообщение, как показано ниже.Start the Emulator, connect to your bot, and send a message as shown below.

Тестирование примера QnA

Дополнительные сведенияAdditional information

В примере многоэтапного диалога QnA Maker (на C#, JavaScript и Python) показывается, как использовать диалог QnA Maker для поддержки запросов для дальнейших действий и функций активного обучения QnA Maker.The QnA Maker multi-turn sample (C#, JavaScript, Python) shows how to use a QnA Maker dialog to support QnA Maker's follow-up prompt and active learning features.

  • QnA Maker поддерживает дополнительные (многоэтапные) подсказки.QnA Maker supports follow-up prompts, also known as multi-turn prompts. Если база знаний QnA Maker требует дополнительных сведений от пользователя, QnA Maker отправляет сведения о контексте, которые можно использовать при отправке запросов пользователю.If the QnA Maker knowledge base requires an additional response from the user, QnA Maker sends context information that you can use to prompt the user. Эти сведения затем используются для дополнительных обращений к службе QnA Maker.This information is also used to make any follow-up calls to the QnA Maker service. Поддержка этой функции добавлена в пакет SDK для Bot Framework версии 4.6.In version 4.6, the Bot Framework SDK added support for this feature.

    Чтобы создать такую базу знаний, воспользуйтесь статьей Use follow-up prompts to create multiple turns of a conversation (Использование дальнейших подсказок для создания диалога с несколькими шагами) из документации по QnA Maker.To construct such a knowledge base, see the QnA Maker documentation on how to Use follow-up prompts to create multiple turns of a conversation.

  • QnA Maker также поддерживает предложения для активного обучения, позволяя усовершенствовать базу знаний со временем.QnA Maker also supports active learning suggestions, allowing the knowledge base to improve over time. Диалог QnA Maker поддерживает явные отзывы для функции активного обучения.The QnA Maker dialog supports explicit feedback for the active learning feature.

    Сведения о том, как включить эту функцию в базе знаний, см. в документации QnA Maker по предложениям для активного обучения.To enable this feature on a knowledge base, see the QnA Maker documentation on Active learning suggestions.

Дальнейшие действияNext steps

QnA Maker можно объединять с другими службами Cognitive Services, чтобы сделать бота еще более мощным.QnA Maker can be combined with other Cognitive Services, to make your bot even more powerful. Средство подготовки к отправке предоставляет способ объединения QnA с распознаванием речи (LUIS) в боте.The Dispatch tool provides a way to combine QnA with Language Understanding (LUIS) in your bot.

Combine LUIS apps and QnA services using the Dispatch tool (Объединение приложений LUIS и служб QnA с помощью средства Dispatch)Combine LUIS and QnA services using the Dispatch tool