返回
查看原链接原链接
Bilibili17分2秒 · —

RAG技术原理笔记

RAG 检索增强生成:原理、流程与实现机制详解

RAG 是一种通过“先检索、后生成”的方式,从资料库中找出与用户问题最相关的片段,再交给大语言模型生成答案的技术,是目前企业构建知识库问答系统与智能客服最常用的技术方案之一。

核心概念与使用场景

RAG 是什么

RAG(Retrieval Augmented Generation,检索增强生成)是一种解决大模型无法回答特定领域问题的技术方案。它做的事情本质上只有两件:

  1. 检索——先从资料库中检索出与用户问题相关的内容;
  2. 生成——再基于检索到的内容生成答案。

因为它先执行检索步骤、再执行生成步骤,所以被称为“检索增强生成”。

为什么需要 RAG

大模型(如 GPT-4o、DeepSeek 等)本身具有很强的通用能力,但对企业内部的产品信息一无所知。如果要做一个能回答公司产品问题的智能客服,一个直接的思路是:在给模型发送问题的同时,把产品手册也一起发给模型

然而,当产品手册篇幅极大(例如上百页甚至上千页)时,这种“全量输入”的做法会带来三个严重问题:

  • 上下文窗口限制:每个模型只能接收一定量的信息,这个上限称为“上下文窗口大小”。当手册内容超过模型窗口大小时,模型会“读了后面忘了前面”,回答准确率无法保障。
  • 推理成本高:模型输入量越大,推理成本越高。每次问答都要携带整本厚手册,成本开销巨大。
  • 推理速度慢:输入内容越多,模型需要消化的内容就越多,产生输出的速度也就越慢。

解决问题的方式

RAG 的思路是:只把文档中与用户问题真正相关的内容发给模型。具体做法是:

  1. 提前将文档切分为多个片段;
  2. 用户提问后,在所有片段中检索相关内容;
  3. 只挑出真正相关的少数几个片段(例如只找到 3 个相关的片段);
  4. 将这 3 个片段与用户问题一起发给大模型。

这样一来,模型感知到的只有几个相关片段,而不是整篇文档,上下文窗口限制、成本和速度问题都随之解决。

RAG 整体流程概览

RAG 的完整流程由两个部分构成,共包含五个核心环节:

流程阶段所处时间包含环节作用
数据准备部分用户提问前分片、索引将文档处理为可供检索的结构化存储
回答部分用户提问后召回、重排、生成检索出相关内容并生成最终答案

为理解 RAG 完整流程,需要先掌握几个关键专业术语:向量Embedding 模型向量数据库向量相似度等。下文将深入拆解每一个环节的原理与实现机制。

环节一:分片

分片(Chunking) 是将文档切分为多个片段的过程,是整个 RAG 流程的第一步。

分片的方式

分片的切分方式有多种选择,常见的有:

  • 按字数切分,例如每 1,000 个字为一个片段;
  • 按段落切分,每个自然段为一个片段;
  • 按章节切分,按文档语义结构划分;
  • 按页码切分,以页为单位。

无论采用哪种策略,最终目标一致:将一篇长文档拆分成多个较小单元。分片完成后,就进入下一个环节——索引。

环节二:索引

索引(Indexing) 是通过 Embedding 模型将每一个片段文本转换为向量,然后将“片段文本”和“对应向量”都存入向量数据库的过程。

这一环节只有两步,但涉及三个必须理解的基础概念:向量、Embedding 和向量数据库。

2.1 向量(Vector)

向量是数学概念,表示一个有大小、有方向的量。在计算机中通常用一个数组来表示,向量的维度等于数组中数字的个数。

  • 一维向量,如 13,可放置在一维坐标轴中;
  • 二维向量,如 [2, 2][1, 2],需放在二维坐标轴中;
  • 三维向量需放在三维坐标轴中;
  • RAG 中实际使用的向量维度通常很大,通常是几百甚至几千维。

一个重要性质:维度越大,每个向量所包含的信息越丰富,用这些向量做各种计算的可靠性也越强。高维向量虽然无法在三维空间中直接可视化,但其存在性与有效性不受影响。

2.2 Embedding(嵌入)

Embedding 是将文本转换为向量的过程。它由专门的 Embedding 模型完成——注意,它不是 GPT-4o、DeepSeek 这类对话式大模型,而是专用的嵌入模型。

Embedding 的核心目的在于:含义相近的文本经过 Embedding 后,对应的向量在空间中也相近。

以二维向量为例:

文本向量
“马克喜欢吃水果”[1, 2]
“马克爱吃水果”[1, 1]
“天气真好”[3, -1]

前两句语义相似,向量非常接近;第三句与前两者无关,距离则较远。正是基于这种性质,当用户提问“马克喜欢吃什么”时,系统可以先对该问题做 Embedding 得到向量,再通过向量相似度搜索找到语义相关的文本片段,最终让大模型给出“马克喜欢吃水果”的答案。

2.3 向量数据库(Vector Database)

向量数据库是专门用于存储和查询向量的数据库。它为存储向量做了大量优化,并内置了向量相似度计算等相关函数。

使用与存储时需注意以下关键点:

  • Embedding 后得到的向量会存入向量数据库中,但原始文本必须一并存储
  • 因为最终提供给大模型处理的是原始文本,向量只是中间结果
  • 一般的向量数据库表中至少包含两列:原始文本列与向量列

索引操作流程回顾

将前面三个概念串联起来,索引环节的完整操作就是:

  1. 处理片段一 → 将片段一文本发给 Embedding 模型 → 得到向量 → 文本+向量存入向量数据库;
  2. 处理片段二 → 重复上述操作;
  3. 以此类推,直到所有片段处理完毕,索引流程结束。

注意:分片和索引均发生在用户提问之前,属于提前准备的离线步骤。

环节三:召回

召回(Retrieval) 是搜索与用户问题相关片段的过程,发生在用户提问之后。

召回的工作流程

  1. 用户将问题发送给 Embedding 模型;
  2. Embedding 模型将用户问题转换为向量;
  3. 该向量被发送给向量数据库;
  4. 向量数据库查询与用户问题最相关的十个片段并返回。

召回结果的数量(如 10 个)并非固定,可以选择 15 个、20 个等,只要数量不是太多即可。向量数据库会返回一批与用户问题最相似的片段。

向量相似度计算

向量数据库判断“哪些片段与用户问题最相关”,依靠的是向量相似度计算。其基本逻辑是:将每个片段向量与用户问题向量分别代入相似度计算公式,得出一个相似度数值,将所有数值排序后取最大的前 N 个。

目前主流的向量相似度计算方法有三种:

方法原理判断标准
余弦相似度计算两个向量之间夹角的余弦值夹角越小→相似度越高
欧式距离计算两个向量之间的直线距离距离越小→相似度越高
点积通过代数方式同时考量向量方向与长度乘积越大→相似度越高

补充说明——点积的判定逻辑:计算向量 A 与 B 的点积时,从 A 向 B 引垂线,点积等于投影长度与 B 的长度的乘积。两个向量方向一致时,向量越长点积越大;方向相反时点积为负;方向垂直时点积为零。因此可通过点积判断两个向量是否在相同方向上“努力”以及努力的程度。

召回阶段的重要结论:召回阶段查出了与用户问题最匹配的十个片段,这十个片段会发送到重排阶段继续处理。

召回环节适用的计算特点

召回阶段使用的是向量相似度,无论采用三种方法中的哪一种,共同特点是:成本低、耗时短、准确率相对较低。正因如此,它适合做初步的粗筛选——在短时间内将上千条片段的相似度值全部计算完毕,从中挑出最高的十个。

环节四:重排

重排,全称“重新排序”(Rerank),核心任务是从召回阶段选出的十个片段中,再筛选出三个与用户问题最相似的片段,作为最终结果。

为什么不能跳过重排、直接在召回阶段取三个?

一次直接挑出三个片段当然可以,但实际效果不如“召回 + 重排”的两阶段方案。根本原因在于:召回与重排阶段使用的文本相似度计算逻辑不一样

召回与重排的核心区别

对比维度召回阶段重排阶段
所用方法向量相似度(余弦相似度、欧式距离、点积)CrossEncoder 模型
成本与耗时成本低、耗时短成本高、耗时长
准确率准确率较低准确率高很多
适用角色初步粗筛选精挑细选

重排阶段通常使用一种叫做 CrossEncoder 的模型来计算每个片段与用户问题的相似度。CrossEncoder 成本较高、耗时较长,但其准确率显著高于向量相似度方法,非常适合对召回结果进行精细化筛选。

类比理解:公司招聘的两阶段筛选

RAG 的两阶段检索与公司招聘流程高度相似:

  • 召回 → 简历筛选:候选人太多,公司只能用粗略方法,从成千上万份简历中挑出十个“看起来最优秀”的人,准确率可能不高,但这是成本约束下的必要妥协;
  • 重排 → 面试:公司对十位候选人逐一面试、仔细考察,尽可能保证判断正确,从中挑出最优秀的三人录用。

环节五:生成

生成(Generation) 是整个流程的最终产出环节。此时系统已拥有两类输入:

  1. 用户问题
  2. 与用户问题相关的三个片段(经过重排精筛后的结果)。

将这两部分一起发送给大模型(如 GPT-4o、DeepSeek),由大模型根据片段内容生成回答。至此,RAG 全流程结束。

全流程拉通的两种视角

提问前的准备流程(离线部分)

  1. 将相关资料文档进行分片
  2. 将所有片段依次发送给 Embedding 模型,为每个片段生成对应向量;
  3. 将“文本 + 向量”存入向量数据库

此步骤完成后,知识库构建完毕,系统即可等待用户提问。

提问后的回答流程(在线部分)

  1. 用户问题发送给 Embedding 模型,转化为向量;
  2. 将问题向量传给向量数据库,查询出十个与问题最相近的片段;
  3. 将十个片段送给 CrossEncoder 模型做重排,从中筛选出三个相关程度最高的片段;
  4. 将三个片段 + 用户问题一起发给大模型,由大模型生成最终答案。

总结:RAG 的五个关键要点

要点内容
总体思路检索相关内容 + 基于内容生成答案,避免将整个知识库全文送入大模型
离线准备分片 → Embedding → 存入向量数据库,构建可检索的知识库
在线问答问题 Embedding → 向量检索(召回 Top 10)→ CrossEncoder 重排(选出 Top 3)→ 大模型生成
核心依赖向量、Embedding 模型、向量数据库、向量相似度计算、CrossEncoder 模型五大技术组件
设计精髓召回阶段用低成本方法快速筛除无关内容,重排阶段用高成本高精度方法精细挑选,在成本与质量间取得平衡