Azure Databricks 上的检索增强生成 (RAG)

本文概述了检索增强生成 (RAG),并介绍了 Azure Databricks 中的 RAG 应用程序支持。

什么是检索增强生成?

RAG 是一种生成式 AI 设计模式,涉及将大型语言模型 (LLM) 与外部知识检索相结合。 将实时数据连接到生成式 AI 应用程序需要 RAG。 这样做可通过在推理时将数据作为上下文提供给 LLM 来提高应用程序的准确性和质量。

Databricks 平台提供了一组支持以下 RAG 场景的集成工具。

RAG 的类型 说明 示例用例
非结构化数据 文档的使用 - PDF、wiki、网站内容、Google 或 Microsoft Office 文档等。 产品聊天机器人文档
结构化数据 表格数据的使用 - Delta 表、来自现有应用程序 API 的数据。 用于检查订单状态的聊天机器人
工具和函数调用 调用第三方或内部 API 来执行特定任务或更新状态。 例如,执行计算或触发业务工作流。 用于下订单的聊天机器人
代理 通过使用 LLM 选择一系列操作,动态地决定如何响应用户的查询。 替换客户服务代理的聊天机器人

RAG 应用程序体系结构

下面说明了构成 RAG 应用程序的组件。

RAG application architecture all up

RAG 应用程序需要一个管道和链组件以执行以下操作:

  • 索引,从源引入数据并为其编制索引的管道。 此数据可以是结构化的或非结构化的。
  • 检索和生成,这是实际的 RAG 链。 它采用用户查询并从索引中检索类似的数据,然后将数据连同查询一起传递到 LLM 模型。

下图演示了以下核心组件:

RAG application architecture for just the indexing pipeline and retrieval and generation, the RAG chain, pieces of RAG. The top section shows the RAG chain consuming the query and the subsequent steps of query processing, query expansion, retrieval and re-ranking, prompt engineering, initial response generation and post-processing, all before generating a response to the query. The bottom portion shows the RAG chain connected to separate data pipelines for 1. unstructured data, which includes data parsing, chunking and embedding and storing that data in a vector search database or index. Unstructured data pipelines require interaction with embedding and foundational models to feed into the RAG chain and 2. structured data pipelines, which includes consuming already embedded data chunks and performing ETL tasks and feature engineering before serving this data to the RAG chain

非结构化数据 RAG 示例

以下各节在非结构化数据 RAG 示例的上下文中介绍了索引管道和 RAG 链的详细信息。

RAG 应用中的索引管道

以下步骤介绍了索引管道:

  1. 从专有数据源引入数据。
  2. 将数据拆分为适合基础 LLM 上下文窗口的区块。 此步骤还包括分析数据和提取元数据。 此数据通常称为训练基础 LLM 所依据的知识库。
  3. 使用嵌入模型为数据区块创建矢量嵌入。
  4. 将嵌入和元数据存储在矢量数据库中,使其可供 RAG 链访问以进行查询。

使用 RAG 链进行检索

准备好索引后,可提供应用程序的 RAG 链以回答问题。 以下步骤和关系图介绍了 RAG 应用程序如何响应传入请求。

  1. 使用用于在知识库中嵌入数据的相同嵌入模型嵌入请求。
  2. 查询矢量数据库,以在矢量数据库中的嵌入请求与嵌入数据区块之间执行相似性搜索。
  3. 检索与请求最相关的数据区块。
  4. 将相关的数据区块和请求馈送给自定义 LLM。 数据区块提供有助于 LLM 生成适当响应的上下文。 通常,LLM 具有有关如何设置响应格式的模板。
  5. 生成响应。

以下关系图演示了此过程:

RAG workflow after a request

使用 Azure Databricks 开发 RAG 应用程序

Databricks 提供以下功能来帮助开发 RAG 应用程序。

使用 Azure Databricks 的 RAG 体系结构

以下体系结构关系图演示了每个 Azure Databricks 功能在 RAG 工作流中的适用位置。 有关示例,请参阅“使用检索增强生成部署 LLM 聊天机器人”演示

处理非结构化数据和 Databricks 管理的嵌入

若要处理非结构化数据和 Databricks 管理的嵌入,请遵循下图中的步骤和关系图:

  1. 从专有数据源引入数据。 可以将此数据存储在 Delta 表或 Unity Catalog 卷中。
  2. 然后,将数据拆分为适合基础 LLM 上下文窗口的区块。 此步骤还包括分析数据和提取元数据。 可以使用 Databricks 工作流、Databricks 笔记本和 Delta 实时表来执行这些任务。 此数据通常称为训练基础 LLM 所依据的知识库。
  3. 然后,嵌入的模型会使用已分析的数据区块来创建矢量嵌入。 在此示例中,Databricks 会为你计算嵌入作为矢量搜索功能的一部分,该功能使用模型服务来提供嵌入模型。
  4. 在矢量搜索计算嵌入后,Databricks 会将它们存储在 Delta 表中。
  5. 矢量搜索还可以为嵌入和元数据编制索引并将其存储在矢量数据库中,以便 RAG 链可以对其进行查询。 矢量搜索会自动计算添加到源数据表的新数据的嵌入,并更新矢量搜索索引。

RAG indexing pipeline processing unstructured data and Databricks managed embeddings. This diagram shows the RAG application architecture for just the indexing pipeline.

处理非结构化数据和客户管理的嵌入

若要处理非结构化数据和客户管理的嵌入,请遵循以下步骤和关系图:

  1. 从专有数据源引入数据。 可以将此数据存储在 Delta 表或 Unity Catalog 卷中。
  2. 然后,可将数据拆分为适合基础 LLM 上下文窗口的区块。 此步骤还包括分析数据和提取元数据。 可以使用 Databricks 工作流、Databricks 笔记本和 Delta 实时表来执行这些任务。 此数据通常称为训练基础 LLM 所依据的知识库。
  3. 接下来,嵌入的模型可使用已分析的数据区块来创建矢量嵌入。 在此方案中,可以自行计算嵌入,并使用模型服务来提供嵌入模型。
  4. 计算嵌入后,可将它们存储在 Delta 表中,该表可与矢量搜索同步。
  5. 矢量搜索可以为嵌入和元数据编制索引并将其存储在矢量数据库中,以便 RAG 链可以对其进行查询。 矢量搜索会自动同步添加到 Delta 表的新嵌入,并更新矢量搜索索引。

RAG with Databricks unstructured data and self managed embeddings

处理结构化数据

若要处理结构化数据,请遵循以下步骤和关系图:

  1. 从专有数据源引入数据。 可以将此数据存储在 Delta 表或 Unity Catalog 卷中。
  2. 对于特征工程,可以使用 Databricks 笔记本、Databricks 工作流和 Delta 实时表。
  3. 创建特征表。 特征表是 Unity Catalog 中具有主键的 Delta 表。
  4. 创建联机表并将其托管在特征服务终结点上。 终结点会自动与特征表保持同步。

有关说明对 RAG 应用程序使用联机表和特征服务的示例笔记本,请参阅 Databricks 联机表和 RAG 示例笔记本的特征服务终结点

RAG with Databricks structured data

RAG 链

准备好索引后,可提供应用程序的 RAG 链以回答问题。 以下步骤和关系图介绍了 RAG 链如何响应传入请求。

  1. 可使用用于在知识库中嵌入数据的相同嵌入模型嵌入传入问题。 使用模型服务提供嵌入模型。
  2. 嵌入问题之后,可使用矢量搜索在矢量数据库中的嵌入请求与嵌入数据区块之间执行相似性搜索。
  3. 在矢量搜索检索与请求最相关的数据区块后,这些数据区块以及特征服务中的相关特征和嵌入的问题将先在自定义 LLM 中进行后处理,然后再生成响应。
  4. 数据区块和特征提供有助于 LLM 生成适当响应的上下文。 通常,LLM 具有有关如何设置响应格式的模板。 再次使用模型服务提供 LLM。 还可使用 Unity Catalog 和 Lakehouse Monitoring 分别存储日志和监视链工作流。
  5. 生成响应。

Running the chain

区域可用性

支持 Databricks 上的 RAG 应用程序开发的功能在与模型服务相同的区域中提供。

如果计划在 RAG 应用程序开发的过程中使用基础模型 API,则你会受到基础模型 API 支持区域的限制。