Compartilhar via

在 Azure AI Search 中集成矢量嵌入

集成向量化是Azure AI Search中索引和查询管道的扩展功能。 它添加了以下功能:

  • 索引器驱动索引编制期间的矢量编码
  • 查询期间的矢量编码

数据分块 不是硬性要求,但除非原始文档较小,否则需要分块以满足嵌入模型的令牌输入要求。

矢量转换是单向的:非向量到向量。 例如,查询或结果没有向量到文本转换,例如将向量结果转换为人工可读字符串,这就是为什么索引包含向量字段和非函数字段的原因。

集成向量化可加快开发速度,并在数据引入和查询时间期间最大程度地减少维护任务,因为必须手动实现的作更少。

在索引编制期间使用集成矢量化

对于集成的数据分块和矢量转换,你依赖于以下组件:

在查询中使用集成矢量化

在查询期间进行文本到矢量的转换时,需要依赖以下组件:

组件图

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

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

工作流是索引器管道。 索引器从支持的数据源检索数据,并通过调用 Azure OpenAI 或 Foundry 工具或自定义代码来启动数据扩充(或应用 AI),以便进行文本到矢量转换或其他处理。

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

可用性和定价

集成矢量化在所有区域和层中都可用。 但是,如果使用技能和向量器进行 AI 扩充,则区域要求可能适用。 有关详细信息,请参阅 将 Foundry 资源附加到技能集

如果使用自定义技能和 Azure 托管机制(例如 Azure 函数应用、Azure Web 应用和 Azure Kubernetes),请检查 Azure 产品按地区页面以获取功能可用性。

数据分块(文本拆分技能)是免费的,可在所有区域中的所有 Foundry 工具上使用。

注意

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

集成矢量化支持哪些场景?

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

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

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

如何使用集成矢量化

对于仅限查询的矢量化:

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

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

  1. 与支持的数据源建立数据源连接,以进行基于索引器的索引编制。
  2. 创建技能集,用于调用 Text Split 技能用于分块和Azure OpenAI 嵌入或其他嵌入技能来向量化区块。
  3. 创建一个索引,用于在查询时指定一个矢量化器,并将其分配到矢量字段。
  4. 创建一个索引器以驱动从数据检索到技能组执行,再到索引编制的整个流程。 我们建议按计划运行索引器,以选取已更改的文档或由于限制而遗漏的任何文档。

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

提示

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

与向量器和模型的安全连接

如果您的架构需要绕过互联网的专用连接,那么可以创建一个技能在索引和查询时用于向量化器的共享专用链接连接到嵌入模型。

共享专用链接仅适用于Azure到Azure连接。 如果你要连接到 OpenAI 或其他外部模型,则必须通过公共 Internet 进行连接。

对于矢量化方案,可以使用:

  • openai_account,用于嵌入在 Azure OpenAI 资源上托管的模型。

  • sites,用于作为自定义技能自定义矢量化器访问的嵌入模型。 sites组 ID 适用于应用服务和 Azure Functions,可用于托管不是 Azure OpenAI 嵌入模型之一的嵌入模型。

优点

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

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

  • 实现端到端自动索引。 当源中的数据发生更改(例如在 Azure Storage、Azure SQL 或 Cosmos DB 中),索引器可以将这些更新通过整个管道进行移动,从数据检索到文档解析,再到可选的 AI 增强、数据分块、矢量化以及索引。

  • 批处理和重试逻辑是内置的(不可配置的)。 Azure AI Search具有内部重试策略,用于处理因为嵌入模型的令牌配额被耗尽,而Azure OpenAI终结点出现的限流错误。 我们建议将索引器设置为计划任务(例如每5分钟),以便索引器可以处理任何被Azure OpenAI终结点限制的调用,即使有重试策略。

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

    辅助索引旨在用于问答或聊天样式应用。 辅助索引包含更具体的匹配项的精细信息,但父索引包含更多信息,并且通常可以生成更完整的答案。 在辅助索引中找到匹配项后,查询会从主索引返回父文档。 例如,假设将一个大型 PDF 文件用作源文档,则主索引可能包含基本信息(标题、日期、作者、描述),而辅助索引则包含可搜索的内容块。

限制

请确保知道嵌入模型的 Azure OpenAI 配额和限制。 Azure AI Search具有重试策略,但如果配额已用尽,重试会失败。

Azure OpenAI 令牌每分钟的限制分别适用于每个模型和每个订阅。 如果对查询和索引编制工作负载使用嵌入模型,请记住这一点。 如果可能,请遵循最佳实践。 为每个工作负载提供一个嵌入模型,并尝试将其部署在不同的订阅中。

请注意,在 Azure AI Search 中,服务在不同层级和工作负荷下具有服务限制

后续步骤