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

Azure AI 搜索中的集成数据分块和嵌入

重要

根据补充使用条款,此功能以公共预览版提供。 2023-10-01-Preview REST API 支持此功能。

在基于索引器的索引编制中,集成矢量化将数据分块和文本到矢量嵌入添加到技能中。 它还为查询添加文本到矢量的转换。

此功能仅供预览。 在矢量搜索正式版和以前的预览版中,数据分块和矢量化依赖于外部组件来处理分块和矢量,并且应用程序代码必须处理和协调每个步骤。 在此预览中,分块和矢量化通过技能和索引器内置到索引中。 可以设置一个使用文本拆分技能对数据进行分块的技能组,然后使用 AzureOpenAIEmbedding 技能或自定义技能调用嵌入模型。 还可以对查询调用在索引编制期间使用的任何矢量化器,以将文本转换为矢量。

对于索引编制,集成矢量化需要:

对于查询:

  • 一个在索引架构中定义的矢量化器,它已分配到矢量字段,在查询时会自动使用它来将文本查询转换为矢量。

矢量转换是单向的:文本到矢量。 查询或结果不会经过矢量到文本的转换(例如,无法将矢量结果转换为人类可读的字符串)。

组件图

下图显示了集成矢量化的组件。

集成矢量化工作流中组件的关系图。

下面是负责集成矢量化的组件清单:

  • 基于索引器的索引编制支持的数据源。
  • 一个用于指定矢量字段的索引,以及一个分配到矢量字段的矢量化器定义。
  • 一个用于为数据分块提供文本拆分技能的技能组,以及一个矢量化技能(AzureOpenAiEmbedding 技能,或指向外部嵌入模型的自定义技能)。
  • (可选)用于将分块数据推送到次要索引的索引投影(也在技能组中定义)
  • 一个嵌入模型,部署在 Azure OpenAI 上或通过 HTTP 终结点提供。
  • 用于推动端到端的流程的索引器。 索引器还指定用于进行更改检测的计划、字段映射和属性。

此清单主要与集成矢量化有关,但你的解决方案并不局限于此列表。 可以添加其他 AI 扩充技能、创建知识存储、添加语义排名、添加相关性优化和其他查询功能。

可用性和定价

集成矢量化可用性基于嵌入模型。 如果使用的是 Azure OpenAI,请查看区域可用性

如果使用的是自定义技能和 Azure 托管机制(例如 Azure 函数应用、Azure Web 应用和 Azure Kubernetes),请查看各区域上市的产品页以了解功能可用性。

数据分块(文本拆分技能)是免费的,已在所有区域的所有 Azure AI 服务中提供。

注意

在 2019 年 1 月 1 日之前创建的一些较旧搜索服务部署在不支持矢量工作负载的基础结构上。 如果你在尝试将矢量字段添加到架构时收到错误,则原因是服务已过时。 在这种情况下,必须创建新的搜索服务来试用矢量功能。

集成矢量化支持哪些方案?

  • 将大型文档划分为块,这对于矢量和非矢量方案很有用。 对于矢量方案,块可帮助你满足嵌入模型的输入约束。 对于非矢量方案,你可能会使用一个聊天式搜索应用,其中的 GPT 从编制了索引的块中组合响应。 可以使用矢量化块或非矢量化块进行聊天式搜索。

  • 生成一个矢量存储,其中的所有字段都是矢量字段,只有文档 ID(搜索索引所需)是字符串字段。 查询矢量存储以检索文档 ID,然后将文档的向量字段发送到另一个模型。

  • 组合矢量和文本字段来执行提供或不提供语义排名的混合搜索。 集成矢量化简化了矢量搜索支持的所有方案

何时使用集成矢量化

我们建议使用 Azure AI Studio 的内置矢量化支持。 如果此方法不能满足你的需求,你可以创建索引器和技能组,以便使用 Azure AI 搜索的编程接口调用集成矢量化。

如何使用集成矢量化

对于仅限查询的矢量化:

  1. 将一个矢量化器添加到索引。 它应该与用于在索引中生成矢量的嵌入模型相同。
  2. 将矢量器分配给矢量配置文件,然后将矢量配置文件分配给矢量字段。
  3. 构建矢量查询,用于指定要矢量化的文本字符串。

更常见的方案 - 在索引编制期间进行数据分块和矢量化:

  1. 与支持的数据源建立数据源连接,以进行基于索引器的索引编制。
  2. 创建一个技能组,用于调用文本拆分技能进行分块,并调用 AzureOpenAIEmbeddingModel 或自定义技能来将块矢量化。
  3. 创建一个索引用于指定查询时间的矢量化器,并将其分配到矢量字段。
  4. 创建一个索引器以驱动从数据检索到技能组执行,再到索引编制的整个流程。

(可选)对于分块内容位于一个索引中,非分块内容位于另一索引中的高级方案,创建次要索引。 分块索引(或次要索引)对于 RAG 应用非常有用。

提示

在编写任何代码之前,尝试使用 Azure 门户中新的“导入和矢量化数据”向导来探索集成矢量化。

或者,配置一个 Jupyter 笔记本来逐单元运行同一工作流,以查看每个步骤的工作方式。

限制

确保了解嵌入模型的 Azure OpenAI 配额和限制。 Azure AI 搜索具有重试策略,但如果配额耗尽,重试会失败。

Azure OpenAI 每分钟令牌数限制是按模型、按订阅计算的。 如果对查询和索引编制工作负载使用嵌入模型,请记住这一点。 在可能的情况下遵循最佳做法。 为每个工作负载提供一个嵌入模型,并尝试将其部署在不同的订阅中。

请记住,在 Azure AI 搜索中,存在按层和按工作负载规定的服务限制

最后,目前不支持以下功能:

集成矢量化的优势

下面是集成矢量化的一些重要优势:

  • 没有单独的数据分块和矢量化管道。 代码更易于编写和维护。

  • 自动进行端到端索引编制。 当源(例如 Azure 存储、Azure SQL 或 Cosmos DB)中的数据发生更改时,索引器可以在整个管道中传递这些更新(从检索到文档破解,再到可选的 AI 扩充、数据分块、矢量化和索引编制)。

  • 将分块的内容投影到次要索引。 次要索引的创建方式与创建任何搜索索引(包含字段和其他构造的架构)一样,但索引器会将它们与主要索引一起填充。 在同一索引编制运行期间,每个源文档的内容都会流向主要和次要索引中的字段。

    次要索引适用于数据分块和检索增强生成 (RAG) 应用。 假设将一个大型 PDF 文件用作源文档,主要索引可能包含基本信息(标题、日期、作者、描述),而次要索引则包含内容块。 借助数据块级别的矢量化,可以更轻松地查找相关信息(每个块均可搜索)并返回相关响应,尤其是在聊天式搜索应用中。

分块索引

分块是将内容划分为可独立处理的较小可管理部分(块)的过程。 如果源文档太大,以至超过了嵌入或大型语言模型的最大输入大小,那么就需要进行分块,但你可能发现,分块能够为 RAG 模式和聊天式搜索提供更好的索引结构。

下图显示了分块索引编制的组件。

区块化和矢量化工作流的关系图。

后续步骤