你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用元数据筛选响应

通过 QnA Maker,可将键值对形式的元数据添加到问答对。 然后可以使用此信息来筛选用户查询的结果,以及存储可用于后续对话的其他信息。

注意

QnA Maker 服务将于 2025 年 3 月 31 日停用。 问答功能的较新版本现已作为 Azure AI 语言的一部分提供。 有关语言服务中的问答功能,请参阅问答。 从 2022 年 10 月 1 日开始,你将无法创建新的 QnA Maker 资源。 有关将现有 QnA Maker 知识库迁移到问题解答的信息,请参阅迁移指南

用 QnA 实体存储问答

务必要了解 QnA Maker 存储问答数据的方式。 下图显示了一个 QnA 实体:

QnA 实体图示

每个 QnA 实体都有一个唯一的永久 ID。 可以使用该 ID 对特定 QnA 实体进行更新。

使用元数据按自定义元数据标记筛选答案

通过添加元数据,可以按这些元数据标记筛选答案。 从“视图选项”菜单添加“元数据”列。 通过选择元数据 + 图标来添加元数据对,将元数据添加到知识库。 此对包含一个键和一个值。

添加元数据的屏幕截图

使用元数据标记的 strictFilters 来筛选结果

请考虑用户问题“这家酒店什么时候关门?”,其中的意向暗指餐馆“Paradise”。

由于只需要关于餐馆“Paradise”的结果,因此可以在 GenerateAnswer 调用中对元数据“餐馆名称”设置一个筛选器。 下面的示例对此进行了展示:

{
    "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"
   }
]

逻辑 AND(默认)

若要在查询中组合多个元数据筛选器,请将其他元数据筛选器添加到 strictFilters 属性的数组。 默认情况下,这些值按逻辑组合 (AND)。 逻辑组合要求所有筛选器都与 QnA 对匹配,以便在答案中返回该对。

这等效于将 strictFiltersCompoundOperationType 属性与 AND 值一起使用。

逻辑 OR 使用 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"
                }
            ]
        }
    ]
}

后续步骤