Поделиться через


Фильтрация ответов с помощью метаданных

QnA Maker позволяет добавлять метаданные в виде пар "ключ/значение" в наборы пар вопросов и ответов. Затем эти сведения можно использовать, чтобы отфильтровать результаты запросов пользователей и сохранить дополнительную информацию, которая может использоваться в дальнейших диалогах.

Примечание.

Поддержка службы QnA Maker будет прекращена 31 марта 2025 г. Новая версия вопроса и возможности ответа теперь доступна как часть языка искусственного интеллекта Azure. Сведения о возможностях ответов на вопросы в службе Языка см. в статье с ответами на вопросы. С 1 октября 2022 г. вы не сможете создавать ресурсы QnA Maker. Сведения о переносе существующих баз знаний QnA Maker в функцию вопросов и ответов см. в руководстве по миграции.

Хранение вопросов и ответов с помощью сущности QnA

Важно понимать, как QnA Maker хранит данные вопросов и ответов. На рисунке ниже показана сущность QnA.

Иллюстрация сущности QnA

У каждой сущности QnA имеется уникальный постоянный идентификатор. Этот идентификатор можно использовать для внесения изменений в определенную сущность QnA.

Использование метаданных для фильтрации ответов по настраиваемым тегам метаданных

Добавление метаданных позволяет фильтровать ответы по этим тегам метаданных. Добавьте столбец метаданных из меню Параметры представления. Добавьте метаданные в базу знаний, щелкнув значок метаданных +, чтобы добавить пару метаданных. Эта пара состоит из одного ключа и одного значения.

Снимок экрана: добавление метаданных

Фильтрация результатов с помощью strictFilters по тегам метаданных

Рассмотрим вопрос пользователя "Когда закрывается это отель?", где предполагается намерение для ресторана Paradise.

Поскольку требуются результаты только для ресторана Paradise, в вызове GenerateAnswer можно установить фильтр для метаданных Restaurant Name. Это иллюстрируется в примере ниже.

{
    "question": "When does this hotel close?",
    "top": 1,
    "strictFilters": [ { "name": "restaurant", "value": "paradise"}]
}

Фильтр по источнику

Если у вас имеется несколько источников содержимого в вашей базе знаний и вы хотите ограничить результаты определенным набором источников, вы можете сделать это с помощью зарезервированного ключевого слова source_name_metadata, как показано ниже.

"strictFilters": [
    {
        "name": "category",
        "value": "api"
    },
   {
        "name": "source_name_metadata",
        "value": "boby_brown_docx"
    },
   {
        "name": "source_name_metadata",
        "value": "chitchat.tsv"
   }
]

Логический "И" по умолчанию

Чтобы объединить несколько фильтров метаданных в запросе, добавьте дополнительные фильтры метаданных в массив свойства strictFilters. По умолчанию значения логически объединены ("И"). Логическое сочетание требует, чтобы все фильтры совпадали с парами "вопрос/ответ", чтобы пара возвращалась в ответе.

Это эквивалентно использованию свойства strictFiltersCompoundOperationType со значением AND.

Логический ИЛИ при использовании свойства strictFiltersCompoundOperationType

При объединении нескольких фильтров метаданных, если важен только один или несколько соответствующих фильтров, используйте свойство strictFiltersCompoundOperationType со значением OR.

Это позволяет базе знаний возвращать ответы при совпадении фильтра, но не возвращать ответы, не имеющие метаданных.

{
    "question": "When do facilities in this hotel close?",
    "top": 1,
    "strictFilters": [
      { "name": "type","value": "restaurant"},
      { "name": "type", "value": "bar"},
      { "name": "type", "value": "poolbar"}
    ],
    "strictFiltersCompoundOperationType": "OR"
}

Примеры метаданных в кратких руководствах

Дополнительные сведения о метаданных см. в кратком руководстве по порталу QnA Maker для метаданных.

Использование результатов вопросов и ответов для сохранения контекста беседы

Ответ на GenerateAnswer содержит сведения о соответствующих метаданных пары "вопрос/ответ". Эти сведения можно использовать в клиентском приложении для хранения контекста предыдущей беседы, который будет использоваться в последующих беседах.

{
    "answers": [
        {
            "questions": [
                "What is the closing time?"
            ],
            "answer": "10.30 PM",
            "score": 100,
            "id": 1,
            "source": "Editorial",
            "metadata": [
                {
                    "name": "restaurant",
                    "value": "paradise"
                },
                {
                    "name": "location",
                    "value": "secunderabad"
                }
            ]
        }
    ]
}

Следующие шаги