Azure AI 搜索中的知识存储
知识存储是 Azure AI 搜索中的技能组创建的 AI 扩充内容的辅助存储。 在 Azure AI 搜索中,索引编制作业始终将输出发送到搜索索引,但如果将技能集附加到索引器,还可以选择将 AI 扩充的输出发送到 Azure 存储中的容器或表。 知识存储可用于非搜索场景中的独立分析或下游处理,例如知识挖掘。
搜索索引和知识存储这两个索引编制输出是同一管道的互斥产品。 它们派生自相同的输入并包含相同的数据,但它们的内容会在不同的应用程序中结构化、存储和得到使用。
在物理上,知识存储是一个 Azure 存储,可以是 Azure 表存储和/或 Azure Blob 存储。 任何可以连接到 Azure 存储的工具或进程都可以使用知识存储的内容。 Azure AI 搜索不支持查询从知识存储检索内容。
在通过 Azure 门户查看时,知识存储看上去就像是表、对象或文件的任何其他集合。 以下屏幕截图显示了由三个表组成的知识存储。 可以采用命名约定(例如 kstore
前缀)来使内容保持在一起。
知识存储的优势
知识存储的主要优点有两个方面:灵活访问内容和形状数据处理能力。
与只能通过 Azure AI 搜索中的查询进行访问的搜索索引不同,知识存储可供支持 Azure 存储连接的任何工具、应用或进程访问。 这种灵活性为使用由扩充管道生成的经过分析和扩充的内容提供了新方案。
同一技能组除了可以扩充数据,还可以用于绘制数据。 某些工具(如 Power BI)更适合与表配合使用,而数据科学工作负载可能需要采用 blob 格式的复杂数据结构。 将整形程序技能添加到技能组,可用于控制数据形状。 然后,可将这些形状传递到投影(表或 blob),以创建与数据使用目的一致的物理数据结构。
知识存储定义
知识存储在技能组定义内部进行定义,其中包含两个组件:
Azure 存储的连接字符串
确定知识存储是否包含表、对象或文件的投影。 投影元素是一个数组。 一个知识存储中可以创建多组“表-对象-文件”组合。
"knowledgeStore": { "storageConnectionString":"<YOUR-AZURE-STORAGE-ACCOUNT-CONNECTION-STRING>", "projections":[ { "tables":[ ], "objects":[ ], "files":[ ] } ] }
在此结构中指定的投影类型确定了知识存储使用的存储类型,而不是其结构。 如果以编程方式创建知识存储,则表、对象和文件中的字段取决于 Shaper 技能输出;如果使用门户,则取决于导入数据向导。
tables
将扩充内容投影到表存储中。 如果需要使用表格式报告结构作为分析工具的输入或者要以数据帧的形式导出到其他数据存储,请定义表投影。 可指定同一投影组中的多个tables
以获取扩充文档的子集或交叉部分。 在同一投影组内,将会保留表关系,以便可以使用所有表。投影的内容不会聚合或规范化。 以下屏幕截图显示了一个按关键短语排序的表格,并在相邻列中指示了父文档。 与索引编制期间的数据引入相比,不会对内容进行语言分析或聚合。 复数形式和大小写差异被认为是独特的实例。
objects
将 JSON 文档投影到 Blob 存储中。object
的物理表示形式是一个表示扩充文档的分层 JSON 结构。files
将图像文件投影到 Blob 存储中。file
是从文档中提取的图像,它按原样传输到 Blob 存储。 虽然被命名为“files”,但它显示在 Blob 存储中,而不是在文件存储中。
创建知识存储
若要创建知识存储,请使用门户或 API。
你需要 Azure 存储、技能组和索引器。 由于索引器需要搜索索引,因此你还需要提供索引定义。
使用门户方法是创建知识存储的最快路径。 或者选择 REST API,以便更深入地了解如何定义和关联对象。
使用“导入数据”向导,通过四个步骤创建第一个知识存储。
定义一个数据源,其中包含要扩充的数据。
定义技能组。 该技能组指定扩充步骤和知识存储。
定义索引架构。 你可能不需要,但索引器会需要它。 该向导可以推断索引。
完成向导。 数据提取、扩充和知识存储创建发生在最后这一步。
向导会自动执行多个任务。 具体而言,就是为你创建整形和投影(Azure 存储中的物理数据结构定义)。
与应用连接
只要存储中存在经过扩充的内容,就可以使用任何连接到 Azure 存储的工具或技术来浏览、分析或使用这些内容。 请从以下列表入手:
Azure 门户中的存储资源管理器或存储浏览器,用于查看扩充的文档结构和内容。 将这视为用于查看知识存储内容的基线工具。
用于报告和分析的 Power BI。
Azure 数据工厂:用于进一步操作。
内容生命周期
每次运行索引器和技能组时,如果技能组或基础源数据已更改,知识存储就会更新。 索引器选取的任何更改都将通过扩充过程传播到知识存储中的投影,从而确保投影数据是原始数据源中内容的当前表示形式。
注意
虽然可以编辑投影中的数据,但如果源数据中的文档被更新,则任何编辑都会在下一次管道调用时被覆盖。
源数据中的更改
对于支持更改跟踪的数据源,索引器将处理新文档和更改的文档,并绕过已处理的现有文档。 时间戳信息因数据源而异,但在 Blob 容器中,索引器将查看 lastmodified
日期以确定哪些 Blob 需要引入。
对技能组的更改
如果要对技能组进行更改,你应允许缓存扩充文档,以便尽可能重用现有的扩充。
如果不使用增量缓存,索引器将始终按高使用标记的顺序处理文档,而不是向后进行处理。 对于 Blob,索引器将处理按 lastModified
排序的 Blob,而不考虑索引器设置或技能组的任何更改。 如果你更改了技能组,系统不会更新以前处理的文档来反映新的技能组。 技能组更改后处理的文档将使用新的技能组,因此索引文档混合使用新旧技能集。
如果使用增量缓存,那么在技能组更新后,索引器将重用不受技能组更改影响的任何扩充。 上游扩充是从缓存中拉取的,任何独立且不受技能更改影响的扩充也是如此。
删除
尽管索引器在 Azure 存储中创建和更新结构和内容,但不会将它们删除。 即使删除了索引器或技能组,投影仍然存在。 作为存储帐户的所有者,如果不再需要投影,应将其删除。
后续步骤
知识存储提供扩充文档的持久性,在设计技能集,或者在创建新的结构和内容供可访问 Azure 存储帐户的任何客户端应用程序使用时,知识存储非常有用。
创建扩充文档的最简单方法是通过门户,但 REST 客户端和 REST API 可以让你更深入地了解如何以编程方式创建和引用对象。