Добавление нескольких категорий в бот вопросов и ответов

В этом руководстве описано следующее:

  • создание проекта и разделение пар "вопрос — ответ" по разным категориям с помощью метаданных;
  • создание отдельного проекта для каждого домена;
  • Создание отдельного языкового ресурса для каждого домена

При создании бота вопросов и ответов вы можете столкнуться с ситуациями, требующими решения запросов в нескольких доменах. Предположим, что команде маркетинга корпорации Майкрософт требуется создать бота поддержки клиентов, который бы отвечал на распространенные вопросы пользователей по нескольким продуктам Surface. Для простоты мы будем использовать два URL-адреса часто задаваемых вопросов для Surface Pen и Surface Earbuds для создания проекта.

Создание проекта с доменными метаданными

Авторы содержимого могут использовать документы для извлечения пар ответов на вопросы или добавления в проект пользовательских пар ответов на вопросы. Чтобы сгруппировать эти вопросы и ответы в определенные домены или категории, можно добавить метаданные.

Чтобы создать бота, отвечающего на вопросы по обоим продуктам Surface, можно использовать следующую последовательность действий.

  1. Добавьте следующие URL-адреса вопросов и ответов в качестве источников, выбрав Добавить источник>URL-адреса>, а затем Добавить все после добавления каждого из представленных ниже URL-адресов:

    Часто задаваемые вопросы о Surface Pen
    Часто задаваемые вопросы о Surface Earbuds

    Screenshot of add URL UI.

  2. В этом проекте у нас есть пары ответов на вопросы для двух продуктов, и мы хотели бы различать их, чтобы мы могли искать ответы среди вопросов и ответов на данный продукт. Для этого необходимо образом изменить поле метаданных для пар "вопрос — ответ".

    Как видно из приведенного ниже примера, мы добавили метаданные с product в качестве ключа и surface_pen или surface_earbuds в качестве значений там, где это применимо. Этот пример можно расширить, чтобы извлекать данные по нескольким продуктам и добавить различные значения для каждого продукта.

    Screenshot of metadata example.

  3. Теперь, чтобы ограничить систему поиском ответа в определенном продукте, необходимо передать этот продукт в качестве фильтра в пользовательском ответе REST API.

    URL-адрес прогнозирования REST API можно получить из области проекта развертывания:

    Screenshot of the Deploy project page with the prediction URL displayed.

    В тексте JSON для вызова API мы передали surface_pen в качестве значение для поля product метаданных. Таким образом, система будет искать ответ в парах "вопрос — ответ", имеющих те же метаданные.

        {
          "question": "What is the price?",
          "top": 3
        },
        "answerSpanRequest": {
          "enable": true,
          "confidenceScoreThreshold": 0.3,
          "topAnswersWithSpan": 1
        },
        "filters": {
          "metadataFilter": {
            "metadata": [
              {
                "key": "product",
                "value": "surface_pen"
              }
            ]
          }
        }
    

    Получить значения метаданных на основе данных, вводимых пользователем, можно следующими способами.

    • Явным образом принимать домен в качестве входных данных пользователя через клиента бота. Например, как показано ниже, можно использовать категорию продукта в качестве входных данных пользователя при инициации диалога.

      Take metadata input

    • Неявное определение домена на основе контекста бота. Например, если предыдущий вопрос был по определенному продукту Surface, он может быть сохранен клиентом в качестве контекста. Если пользователь не указал продукт в следующем запросе, можно передать контекст бота в виде метаданных в API создания ответов.

      Pass context

    • Извлечение сущности из пользовательского запроса для определения домена для фильтрации по метаданным. Для извлечения сущностей можно использовать другие службы ИИ Azure, такие как распознавание именованных сущностей (NER) и распознавание общения.

      Extract metadata from query

Насколько большим может быть проект?

В один проект можно добавить до 50000 пар ответов на вопросы. Если данные превышают 50 000 пар ответов на вопросы, следует рассмотреть возможность разделения проекта.

создание отдельного проекта для каждого домена;

Вы также можете создать отдельный проект для каждого домена и поддерживать проекты отдельно. Все API-интерфейсы требуют, чтобы пользователь передал имя проекта, чтобы внести любое обновление в проект или получить ответ на вопрос пользователя.

Когда запрос пользователя получен службой, необходимо передать projectName в конечную точку REST API, чтобы получить ответ от соответствующего проекта. URL-адрес можно найти на странице "Развертывание проекта" в разделе Get prediction URL:

https://southcentralus.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName=Test-Project-English&api-version=2021-10-01&deploymentName=production

Создание отдельного языкового ресурса для каждого домена

Предположим, что команде маркетинга корпорации Майкрософт требуется создать бота поддержки клиентов, который бы отвечал на вопросы пользователей по продуктам Surface и Xbox. Они планируют назначить отдельные команды для доступа к проектам на Surface и Xbox. В этом случае рекомендуется создать два настраиваемых ресурса ответа на вопросы — один для Surface и другой для Xbox. Однако можно определить отдельные роли для пользователей, обращающихся к одному и тому же ресурсу.