Azure AI 搜索中的知识存储“投影”
投影定义知识存储中接受 Azure AI 搜索扩充管道中内容的物理表、对象和文件。 如果要创建知识存储,则定义和整形投影是大部分工作。
本文介绍了投影概念和工作流,以便你在开始编码之前获得一些背景知识。
投影在 Azure AI 搜索技能组中定义,但最终结果是 Azure 存储中的表投影、对象投影和映像文件投影。
投影类型和用法
知识存储是一种逻辑构造,其在 Azure 存储中以物理形式表示为表、JSON 对象或二进制映像文件的松散集合。
投影 | 存储 | 使用情况 |
---|---|---|
表 | Azure 表存储 | 用于适合表示为行和列的数据,或者可在每次需要数据的精细表示(例如,作为数据帧)时使用。 表投影使你可以定义架构化形状,使用整形程序技能或内联整形来指定列和行。 你可以根据熟悉的规范化原则将内容组织到多个表中。 同一组中的表会自动关联。 |
对象 | Azure Blob 存储 | 当需要在一个 JSON 文档中获取数据的完整 JSON 表示和扩充时使用。 与表投影一样,只能将有效的 JSON 对象投影为对象,并且可借助整形实现此目的。 |
文件 | Azure Blob 存储 | 需要保存规范化的二进制映像文件时使用。 |
投影定义
投影在技能组的“knowledgeStore”属性下指定。 投影定义在调用索引器期间使用,以使用扩充内容在 Azure 存储中创建并加载对象。 如果不熟悉这些概念,请首先大致了解 AI 扩充。
以下示例说明了投影在 knowledgeStore 下的放置和基本构造。 名称、类型和内容源构成投影定义。
"knowledgeStore" : {
"storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
"projections": [
{
"tables": [
{ "tableName": "ks-museums-main", "generatedKeyName": "ID", "source": "/document/tableprojection" },
{ "tableName": "ks-museumEntities", "generatedKeyName": "ID","source": "/document/tableprojection/Entities/*" }
],
"objects": [
{ "storageContainer": "ks-museums", "generatedKeyName": "ID", "source": "/document/objectprojection" }
],
"files": [ ]
}
]
投影组
投影是一组复杂的集合,这意味着每种类型可以指定多个组。 通常只使用一个投影组,但如果存储要求包括支持不同的工具和方案,则可以使用多个投影组。 例如,可以使用一个组来设计和调试技能组,而第二个组收集用于联机应用的输出,第三个组用于数据科学工作负载。
相同的技能组输出用于填充投影下的所有组。 以下示例显示了两个组。
"knowledgeStore" : {
"storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
"projections": [
{
"tables": [],
"objects": [],
"files": []
},
{
"tables": [],
"objects": [],
"files": []
}
]
}
投影组具有以下重要的互斥性和相关性特征。
原则 | 说明 |
---|---|
互斥性 | 每个组完全独立于其他组,以支持不同的数据整理方案。 例如,如果要测试不同的表结构和组合,则可以将每个集放在不同的投影组中以进行 AB 测试。 每个组都从同一个源(扩充树)获取数据,同时完全独立于任何其他投影组的表对象文件组合。 |
相关性 | 在投影组中,表、对象和文件中的内容是相关的。 知识存储使用生成的键作为公共父节点的引用点。 例如,假设有一个文档包含图像和文本。 你可以将文本投影到表或对象,将映像投影到二进制文件,并且表和对象都将具有包含文件 URL 的列/属性。 |
投影源
source 参数是投影定义的第三个组成部分。 由于投影会存储来自 AI 扩充管道的数据,因此投影的源始终是技能的输出。 因此,输出可能是单个字段(例如,已翻译文本的字段),但通常是对数据形状的引用。
数据形状来自技能组。 在 Azure AI 搜索中提供的所有内置技能中,有一个称为整形程序技能的实用工具技能,用于创建数据形状。 可以包含尽可能多的整形程序技能,以支持知识存储中的预测。
形状经常与表投影一起使用,其中形状不仅指定哪些行将放入表中,还指定将创建哪些列(也可以将形状传递到对象投影)。
形状可能很复杂,本文不会深入讨论形状,但以下示例简要说明了一个基本形状。 整形程序技能的输出指定为表投影的源。 表投影本身中存在“metadata storage_path”、“reviews_text”和“reviews_title”等列,这些列是在形状中指定的。
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"name": "ShaperForTables",
"description": null,
"context": "/document",
"inputs": [
{
"name": "metadata_storage_path",
"source": "/document/metadata_storage_path",
"sourceContext": null,
"inputs": []
},
{
"name": "reviews_text",
"source": "/document/reviews_text"
},
{
"name": "reviews_title",
"source": "/document/reviews_title"
},
{
"name": "reviews_username",
"source": "/document/reviews_username"
},
],
"outputs": [
{
"name": "output",
"targetName": "mytableprojection"
}
]
}
投影生命周期
投影具有一个与数据源中源数据绑定的生命周期。 更新源数据并重建其索引时,将使用扩充的结果更新投影,以确保投影最终与数据源中的数据保持一致。 不过,投影在 Azure 存储中也是独立存储的。 删除索引器或搜索服务本身时不会删除投影。
在应用中使用
在运行索引器后,连接到投影,并在其他应用和工作负载中使用数据。
使用 Azure 门户验证 Azure 存储中的对象创建和内容。
使用 Power BI 进行数据研究。 如果数据位于 Azure 表存储中,则此工具非常适用。 在 Power BI 中,可以将数据处理为更易于查询和分析的新表中。
在数据科学管道中使用 blob 容器中的扩充数据。 例如,可以将 blob 中的数据加载到 Pandas 数据帧。
最后,如果需要从知识存储导出数据,可以使用 Azure 数据工厂提供的连接器来导出数据,然后将其载入所选的数据库。
入门清单
回想一下,投影专用于知识存储,不用于构建搜索索引。
在 Azure 存储中,获取访问密钥中的连接字符串,并验证该帐户是否为 StorageV2(常规用途 V2)。
在 Azure 存储中,熟悉容器和表中的现有内容,以便为投影选择不冲突的名称。 知识存储是表和容器的松散集合。 考虑采用命名约定来跟踪相关对象。
在 Azure AI 搜索中,在索引器中启用扩充缓存(预览版),然后运行索引器以执行技能组并填充缓存。 这是一项预览功能,请务必对索引器请求使用预览版 REST API。 填充缓存后,只要技能本身未修改,就可以在不收费的知识存储中修改投影定义。
在代码中,所有投影仅在技能组中定义。 没有适用于投影的索引器属性(例如字段映射或输出字段映射)。 在技能组定义中,你将重点放在两个方面:knowledgeStore 属性和技能数组。
在 knowledgeStore 下,在
projections
节中指定表投影、对象投影、文件投影。 对象类型、对象名和数量(按你定义的投影数量)在此节中确定。根据技能数组,确定应在每个投影的
source
中引用的技能输出。 所有投影都具有源。 源可以是上游技能的输出,但通常是整形程序技能的输出。 投影的组成是通过形状确定的。
在 Azure 存储中检查结果。 在后续运行中,通过删除 Azure 存储中的对象或更改技能组中的项目名来避免命名冲突。
如果使用表投影,请检查了解表服务数据模型以及表存储可伸缩性和性能目标,以确保数据要求在表存储记录的限制范围内。
后续步骤
查看每种投影类型的语法和示例。