Руководство по Использование QnA Maker в боте для ответов на вопросы.Tutorial: Use QnA Maker in your bot to answer questions

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

Вы можете использовать службу QnA Maker, чтобы создать базу знаний для добавления поддержки вопросов и ответов в программу Bot.You can use the QnA Maker service to create a knowledge base to add question-and-answer support to your bot. Созданная база знаний заполняется готовыми вопросами и ответами.When you create your knowledge base, you seed it with questions and answers.

В этом руководстве описано следующее:In this tutorial, you learn how to:

  • Создание службы QnA Maker и базы знанийCreate a QnA Maker service and knowledge base
  • Добавление сведений о базе знаний в файл конфигурацииAdd knowledge base information to your configuration file
  • Обновление бота для запросов по базе знанийUpdate your bot to query the knowledge base
  • Повторная публикация ботаRepublish your bot

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.If you don't have an Azure subscription, create a free account before you begin.

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

  • Бот, созданный при работе с предыдущим руководством.The bot created in the previous tutorial. В программу-робот добавляется функция вопросов и ответов.You'll add a question-and-answer feature to the bot.
  • Вам будет проще, если вы уже знакомы со службой QnA Maker.Some familiarity with QnA Maker is helpful. Вы будете использовать портал QnA Maker для создания, обучения и публикации базы знаний для использования с программой-роботом.You'll use the QnA Maker portal to create, train, and publish the knowledge base to use with the bot.
  • Опыт создания бота QnA с помощью службы Azure Bot.Familiarity with QnA bot creation using Azure Bot Service.
  • Установленный Mavenтолько для Java.Installed Maven, for Java only.

Кроме того, уже должны быть выполнены Предварительные требования для предыдущего руководства.You should also already have the prerequisites for the previous tutorial.

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

Вы импортируете существующее определение базы знаний из примера QnA Maker в репозитории BotBuilder-Samples .You'll import an existing knowledge base definition from the QnA Maker sample in the BotBuilder-Samples repo.

  1. Клонируйте или скопируйте на компьютер репозиторий примеров.Clone or copy the samples repo to your computer.
  2. Войдите на портал QnA Maker с учетными данными Azure.Sign into to the QnA Maker portal with your Azure credentials.
  3. Выберите создать базу знаний на портале QnA Maker.Select Create a knowledge base in the QnA Maker portal.
    1. Если потребуется, создайте службу QnA.If necessary, create a QnA service. (Можно использовать существующую службу QnA Maker или создать новую специально для работы с этим руководством.) Более подробные инструкции по QnA Maker см. в руководствах по созданию службы QnA Maker и созданию, подготовке и публикации базы знаний QnA Maker.(You can use an existing QnA Maker service or create a new one for this tutorial.) For more detailed QnA Maker instructions, see Create a QnA Maker service and Create, train, and publish your QnA Maker knowledge base.
    2. Подключение QnA Makerную службу в базу знаний.Connect your QnA Maker service to your knowledge base.
    3. Присвойте имя базе знаний.Name your knowledge base.
    4. Чтобы заполнить базу знаний, используйте файл смартлигхтфак. tsv из репозитория Samples.To populate your knowledge base, use the smartLightFAQ.tsv file from the samples repo. Если вы уже скачали примеры, отправьте файл smartLightFAQ.tsv со своего компьютера.If you have downloaded the samples, upload the file smartLightFAQ.tsv from your computer.
    5. Щелкните создать базу знаний, чтобы создать ее.Select Create your kb to create the knowledge base.
  4. Выберите сохранить и обучить.Select Save and train.
  5. Выберите опубликовать , чтобы опубликовать базу знаний.Select PUBLISH to publish your knowledge base.

После публикации QnA Maker приложения выберите Параметры и прокрутите вниз до пункта сведения о развертывании.Once your QnA Maker app is published, select SETTINGS, and scroll down to Deployment details. Скопируйте следующие значения из запроса HTTP-примера POST .Copy the following values from the Postman HTTP example request.

POST /knowledgebases/<knowledge-base-id>/generateAnswer
Host: <your-hostname>  // NOTE - this is a URL ending in /qnamaker.
Authorization: EndpointKey <qna-maker-resource-key>

Полная строка URL-адреса для имени узла будет выглядеть так: "https:// <knowledge-base-name> . Azure.NET/qnamaker".The full URL string for your hostname will look like "https://<knowledge-base-name>.azure.net/qnamaker".

Эти значения будут использоваться в файле конфигурации Bot на следующем шаге.These values will be used within your bot configuration file in the next step.

Теперь база знаний готова для использования в боте.The knowledge base is now ready for your bot to use.

Добавление сведений о базе знаний в ботаAdd knowledge base information to your bot

Используйте приведенные ниже инструкции для подключения ленты C#, JavaScript, Java или Python к базе знаний.Use the following instructions connect your C#, JavaScript, Java, or Python bot to your knowledge base.

Добавьте следующие значения в appsetting.jsв файле:Add the following values to you appsetting.json file:

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "ScmType": "None",

  "QnAKnowledgebaseId": "knowledge-base-id",
  "QnAAuthKey": "qna-maker-resource-key",
  "QnAEndpointHostName": "your-hostname" // This is a URL ending in /qnamaker
}
ПолеField ЗначениеValue
QnAKnowledgebaseIdQnAKnowledgebaseId Идентификатор базы знаний, автоматически созданный на портале QnA Maker.The knowledge base ID that the QnA Maker portal generated for you.
QnAAuthKey (QnAEndpointKey на Python)QnAAuthKey (QnAEndpointKey in Python) Ключ конечной точки, автоматически созданный на портале QnA Maker.The endpoint key that the QnA Maker portal generated for you.
QnAEndpointHostNameQnAEndpointHostName URL-адрес узла, созданный на портале QnA Maker.The host URL that the QnA Maker portal generated. Используйте полный формат URL-адрес, начиная с https:// и заканчивая /qnamaker.Use the complete URL, starting with https:// and ending with /qnamaker. Строка полного URL-адреса будет выглядеть так: "https:// <knowledge-base-name> . Azure.NET/qnamaker".The full URL string will look like "https://<knowledge-base-name>.azure.net/qnamaker".

Сохраните изменения.Now save your edits.

Обновление бота для запросов по базе знанийUpdate your bot to query the knowledge base

Обновите код инициализации, чтобы загрузить данные службы для вашей базы знаний.Update your initialization code to load the service information for your knowledge base.

  1. Добавьте в проект пакет NuGet Microsoft.Bot.Builder.AI.QnA.Add the Microsoft.Bot.Builder.AI.QnA NuGet package to your project.

    это можно сделать с помощью диспетчера пакетов NuGet или командной строки:You can do this via the NuGet package manager or the command line:

    dotnet add package Microsoft.Bot.Builder.AI.QnA
    

    Дополнительные сведения о NuGet см. в документации по NuGet.For more information on NuGet, see the NuGet documentation.

  2. В файле Startup. CS добавьте следующую ссылку на пространство имен.In your Startup.cs file, add the following namespace reference.

    Startup.csStartup.cs

    using Microsoft.Bot.Builder.AI.QnA;
    
  3. Измените ConfigureServices метод в файле Startup. CS , чтобы создать QnAMakerEndpoint объект, который подключается к базе знаний, определенной в appsettings.js файла.Modify the ConfigureServices method in Startup.cs to create a QnAMakerEndpoint object that connects to the knowledge base defined in the appsettings.json file.

    Startup.csStartup.cs

    // Create QnA Maker endpoint as a singleton
    services.AddSingleton(new QnAMakerEndpoint
    {
        KnowledgeBaseId = Configuration.GetValue<string>("QnAKnowledgebaseId"),
        EndpointKey = Configuration.GetValue<string>("QnAAuthKey"),
        Host = Configuration.GetValue<string>("QnAEndpointHostName")
    });
    
  4. В файле ечобот. CS добавьте следующие ссылки на пространства имен.In your EchoBot.cs file, add the following namespace references.

    Bots\EchoBot.csBots\EchoBot.cs

    using System.Linq;
    using Microsoft.Bot.Builder.AI.QnA;
    
  5. Добавьте EchoBotQnA свойство и добавьте конструктор для его инициализации.Add an EchoBotQnA property and add a constructor to initialize it.

    EchoBot.csEchoBot.cs

    public QnAMaker EchoBotQnA { get; private set; }
    
    public EchoBot(QnAMakerEndpoint endpoint)
    {
       // connects to QnA Maker endpoint for each turn
       EchoBotQnA = new QnAMaker(endpoint);
    }
    
  6. Добавьте AccessQnAMaker метод:Add an AccessQnAMaker method:

    EchoBot.csEchoBot.cs

    private async Task AccessQnAMaker(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
       var results = await EchoBotQnA.GetAnswersAsync(turnContext);
       if (results.Any())
       {
          await turnContext.SendActivityAsync(MessageFactory.Text("QnA Maker Returned: " + results.First().Answer), cancellationToken);
       }
       else
       {
          await turnContext.SendActivityAsync(MessageFactory.Text("Sorry, could not find an answer in the knowledge base."), cancellationToken);
       }
    }
    
  7. Обновите OnMessageActivityAsync метод, чтобы вызвать новый AccessQnAMaker метод.Update the OnMessageActivityAsync method to call the new AccessQnAMaker method.

    EchoBot.csEchoBot.cs

    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var replyText = $"Echo: {turnContext.Activity.Text}";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    
        await AccessQnAMaker(turnContext, cancellationToken);
    }
    

Локальная проверка ботаTest the bot locally

На этом этапе бот уже может отвечать на некоторые вопросы.At this point your bot should be able to answer some questions. Запустите бот на локальном компьютере и откройте его в эмуляторе.Run the bot locally and open it in the Emulator.

Пример взаимодействия с Bot и QnA Maker.

Повторная публикация ботаRepublish your bot

Теперь можно повторно опубликовать бота в Azure.You can now republish your bot back to Azure. Для этого необходимо заархивировать папку проекта и выполнить команду развертывания.You need to zip your project folder and then run the command to deploy your bot to Azure. Дополнительные сведения см. в статье развертывание программы-Bot .For details please read the Deploy your bot article.

Архивация папки проектаZip your project folder

Если для развертывания кода бота используются ненастроенные интерфейсы API развертывания ZIP-файлов, Web App или Kudu демонстрирует следующее поведение.When using the non-configured zip deploy API to deploy your bot's code, Web App/Kudu's behavior is as follows:

Kudu по умолчанию предполагает, что развертывание из ZIP-файлов готово к выполнению и не требует дополнительных шагов сборки, таких как npm install или dotnet restore/dotnet publish.Kudu assumes by default that deployments from zip files are ready to run and do not require additional build steps during deployment, such as npm install or dotnet restore/dotnet publish.

Важно включить весь код сборки и все необходимые зависимости в развертываемый ZIP-файл, иначе бот не будет работать должным образом.It is important to include your built code with all necessary dependencies in the zip file being deployed, otherwise your bot will not work as intended.

Важно!

Прежде чем архивировать файлы проекта, убедитесь, что вы зашли в папку проекта бота.Before zipping your project files, make sure that you are in the bot's project folder.

  • Для ботов на C# это папка, в которой расположен CSPROJ-файл.For C# bots, it is the folder that has the .csproj file.
  • Для ботов на JavaScript это папка, в которой расположен файл app.js или index.js.For JavaScript bots, it is the folder that has the app.js or index.js file.
  • Для ботов на TypeScript это папка, которая содержит папку src (с файлами bot.ts и index.ts).For TypeScript bots, it is the folder that includes the src folder (where the bot.ts and index.ts files are).
  • Для ботов Python это папка, в которой расположен файл app.py.For Python bots, it is the folder that has the app.py file.

Перед выполнением команды для создания ZIP-файла убедитесь, что в папке проекта выбраны все файлы и папки.Within the project folder, make sure you select all the files and folders before running the command to create the zip file. В папке проекта будет создан один ZIP-файл.This will create a single zip file within the project folder. Если расположение корневой папки выбрано неверно, бот не сможет запуститься на портале Azure.If your root folder location is incorrect, the bot will fail to run in the Azure portal.

Развертывание кода в AzureDeploy your code to Azure

Совет

Если срок действия маркера сеанса истек, запустите его az login снова.If your session token expired, run az login again. Если вы не используете подписку по умолчанию, также сбросьте свою подписку.If you are not using your default subscription, also reset your subscription.

Теперь мы готовы развернуть код в виде веб-приложения Azure.At this point we are ready to deploy the code to the Azure Web App.

Запустите следующую команду из командной строки, чтобы выполнить развертывание с помощью принудительного развертывания в Kudu из ZIP-файла веб-приложения.Run the following command from the command line to perform deployment using the kudu zip push deployment for a web app.

az webapp deployment source config-zip --resource-group "<resource-group-name>" --name "<name-of-web-app>" --src "<project-zip-path>"
ПараметрOption ОписаниеDescription
resource-groupresource-group Имя группы ресурсов Azure, которая содержит бота.The name of the Azure resource group that contains your bot.
namename Имя веб-приложения, которое вы использовали ранее.Name of the Web App you used earlier.
srcsrc Путь к созданному ранее ZIP-файлу проекта.The path to the zipped project file you created.

Примечание

Этот шаг может занять несколько минут.This step can take a few minutes to complete. Кроме того, после завершения развертывания бот станет доступным для тестирования через несколько минут.Also it can take a few more minutes between when the deployment finishes and when your bot is available to test.

Если вы не собираетесь использовать это приложение в дальнейшем, удалите все связанные ресурсы, выполнив следующие действия.If you're not going to continue to use this application, delete the associated resources with the following steps:

  1. На портале Azure откройте группу ресурсов бота.In the Azure portal, open the resource group for your bot.
  2. Выберите Удалить группу ресурсов , чтобы удалить группу и все содержащиеся в ней ресурсы.Select Delete resource group to delete the group and all the resources it contains.
  3. Введите имя группы ресурсов на панели подтверждения, а затем выберите Удалить.Enter the resource group name in the confirmation pane, then select Delete.

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

См. подробнее о сведения о том, как добавлять в бот новые функции, в инструкциях по отправке и получению текстовых сообщений и других руководствах по разработке.For information on how to add features to your bot, see the Send and receive text message article and the other articles in the how-to develop section.