菜单

RAG与向量数据库

相关源文件

本文档提供了关于检索增强生成 (RAG) 和向量数据库的技术概述,解释了它们如何协同工作以通过外部知识增强大型语言模型 (LLM)。有关与 LLM 集成函数调用的信息,请参阅函数调用集成。有关实现基本搜索应用程序的详细信息,请参阅构建搜索应用程序

RAG 简介

检索增强生成 (RAG) 是一种通过将大型语言模型 (LLM) 连接到外部数据源来增强其能力的架构。这种方法解决了传统 LLM 的关键局限性,传统 LLM 受限于其训练数据中嵌入的知识,无法访问最新信息。

在 RAG 系统中,当用户提交查询时,系统会从知识库中检索相关信息,并将这些信息包含在发送给 LLM 的提示中。这种对外部、可验证数据的接地有助于减少幻觉(捏造的信息)并实现更准确、更及时的响应。

来源:15-rag-and-vector-databases/README.md:46-58

RAG 架构

RAG 系统使用编码器和解码器组件的组合来处理信息。当用户输入查询时,系统会将其编码为向量表示,从数据库中检索相似向量,并将相关信息与原始查询结合起来生成响应。

其架构包括:

  1. 知识库:已处理、分块并存储为向量嵌入的文档或数据源
  2. 编码器:将文本查询转换为向量表示
  3. 检索器:根据查询相似性在向量数据库中查找相关信息
  4. 生成器:使用检索到的上下文生成最终响应的 LLM

存在两种主要的 RAG 实现方法

  • RAG-Sequence:使用检索到的文档预测用户查询的最佳答案
  • RAG-Token:使用文档生成下一个 token,然后检索它们来回答用户查询

来源:15-rag-and-vector-databases/README.md:59-68, 15-rag-and-vector-databases/images/encoder-decode.png

向量数据库

向量数据库是一种专门设计的数据库,用于存储、管理和搜索嵌入向量——捕获语义含义的数据的数值表示。与存储原始文本的传统数据库不同,向量数据库存储这些数学表示,从而使相似性搜索更有效。

为什么需要向量数据库?

LLM 的输入有 token 限制。向量数据库允许我们

  1. 存储大量嵌入式数据
  2. 在需要时有效地检索最相关的块
  3. 通过仅将最相关的信息传递给 LLM 来降低成本

流行的向量数据库选项包括

  • Azure Cosmos DB
  • Azure AI Search
  • Pinecone
  • Chromadb
  • Clarifyai
  • Qdrant
  • DeepLake

来源:15-rag-and-vector-databases/README.md:81-94, 08-building-search-applications/translations/pl/README.md:74-76

文本到嵌入的过程

将文本数据转换为向量嵌入是构建 RAG 系统的关键步骤。此过程通常包括

1. 分块

将文档分割成更小的片段,以更好地管理上下文并提高检索精度。分块可以在不同级别进行

  • 句子级别
  • 段落级别
  • 固定长度分段

这种分块方法会创建落在指定长度约束内的文本片段。

2. 嵌入生成

分块后,使用模型(如

  • OpenAI 的 text-embedding-ada-002
  • Azure 计算机视觉嵌入
  • word2vec
  • 其他嵌入模型

将每个文本片段转换为向量嵌入。嵌入模型的选择取决于语言支持、输入大小容量和输出嵌入维度等因素。

来源:15-rag-and-vector-databases/README.md:97-123, 15-rag-and-vector-databases/notebook-rag-vector-databases.ipynb:93-123

检索与向量相似性

当用户提交查询时,检索过程会从向量数据库中查找最相关的信息,以增强 LLM 的响应。

搜索方法

有几种在向量数据库中执行搜索的方法

  • 关键词搜索:传统的基于文本的搜索
  • 语义搜索:使用词语的含义而不是精确匹配
  • 向量搜索:将查询转换为向量并查找具有相似向量表示的文档
  • 混合搜索:结合关键词和向量搜索方法

向量相似性测量

向量相似性通常使用以下方法计算

  • 余弦相似度:测量两个向量之间夹角的余弦(最常见)
  • 欧几里得距离:测量向量端点之间的直线距离
  • 点积:测量对应元素乘积的总和

构建搜索索引

为了执行高效的检索,会创建一个搜索索引来快速查找相似向量

来源:15-rag-and-vector-databases/README.md:126-184, 08-building-search-applications/translations/pl/README.md:78-86

与 LLM 集成

RAG 管道的最后一步是将检索到的信息与 LLM 集成以生成响应。这包括

  1. 将用户查询转换为向量嵌入
  2. 在向量数据库中查找最相似的文档
  3. 将检索到的文档与原始查询结合起来
  4. 将增强的提示发送给 LLM 以生成响应

此实现演示了如何在将检索到的上下文添加到用户查询后再发送给 LLM,从而使模型能够生成更具信息性和更准确的响应。

来源:15-rag-and-vector-databases/README.md:186-225

评估与用例

评估指标

RAG 系统的评估通常侧重于

  • 响应质量:评估自然语言生成、流畅性和人性化质量
  • 事实依据:确保响应源自提供的文档
  • 相关性:衡量响应是否直接回答了所提出的问题
  • 流畅性:检查语法正确性和可读性

常见用例

RAG 系统适用于各种应用

  • 问答:为组织特定数据创建知识库
  • 推荐系统:将用户与相关内容匹配
  • 聊天机器人服务:存储对话历史以进行个性化交互
  • 图像搜索:使用向量嵌入进行图像识别和异常检测

实现框架

一些框架简化了 RAG 的实现

  • Semantic Kernel
  • LangChain
  • Autogen

来源:15-rag-and-vector-databases/README.md:229-267

实际实现

要实现 RAG 系统,您需要

  1. 数据收集与处理:

    • 收集相关文档
    • 分割成适当的块
    • 存储文档元数据
  2. 嵌入生成:

    • 选择嵌入模型
    • 将文本块转换为向量嵌入
    • 将嵌入存储在向量数据库中
  3. 检索系统:

    • 实现相似性搜索
    • 在需要时创建重排序机制
    • 定义相关性阈值
  4. LLM 集成:

    • 构建包含检索到的上下文的提示
    • 管理对话历史
    • 配置 LLM 参数

位于15-rag-and-vector-databases/notebook-rag-vector-databases.ipynb 中的 notebook 示例演示了使用 Azure Cosmos DB 作为向量数据库以及 Azure OpenAI 服务进行嵌入和 LLM 生成的实际实现。

总结

检索增强生成 (RAG) 将 LLM 的强大功能与访问外部、最新信息的能力相结合。通过利用向量数据库来存储和检索相关信息,RAG 系统可以提供比独立 LLM 更准确、更真实、更及时的响应。

RAG 系统的关键组成部分是

  1. 存储文档嵌入表示的向量数据库
  2. 将文本转换为向量表示的嵌入过程
  3. 查找相关信息的检索机制
  4. 将检索到的上下文与用户查询结合起来的集成层
  5. 基于增强上下文生成响应的 LLM

这种架构解决了常见的 LLM 局限性,如知识截止、幻觉和无法访问专业信息,使其成为创建更强大的 AI 应用程序的强大方法。

来源:15-rag-and-vector-databases/README.md