跳到主要内容

创建日期:2026-09-23 | 最近更新:2026-09-23 本文是专题开篇,只给「链条」和「每一环的坑」。涉及外部资料的地方均为逐字原文(抓取日期 2026-09-23,留档于 source/rag-lab/official-sources.md);涉及数字的地方为本机实测(RTX 3090 / torch 2.10.0 / transformers 5.7.0,脚本与真实输出在 source/rag-lab/)。两类陈述在正文中分别标注。

RAG 入门:一条检索链路的五个环节

一句话:RAG(Retrieval-Augmented Generation)就是「先去你的资料库里查出相关片段,再把片段塞进 prompt 让模型照着回答」。 它解决的不是「模型不够聪明」,而是「模型不知道你的事」。

先问一句为什么需要它。大模型有三个绕不开的短板,而且都不靠「换个更大的模型」解决:

  1. 知识有截止点——训练数据之后发生的事,它不知道;
  2. 不知道你的私有数据——公司制度、内部文档、你昨天的会议记录,它没训过;
  3. 会编——不知道的时候不一定说不知道,而是给一个像模像样的答案。

RAG 的思路是把「记忆」从模型参数里搬到外部检索系统:参数负责语言能力,检索负责事实依据。好处是资料改了只要重建索引,不用重训模型;而且答案能带上出处。

一条标准链路​

五个环节各自在干什么、最容易在哪里翻车:

环节在干什么常见做法最容易踩的坑
① 切分与索引把长文档切成片段,逐片算成向量入库按标题/段落切,相邻片段留一点重叠切得太碎丢上下文;切得太大,向量被稀释成一锅粥,什么都像又什么都不像
② 召回用 query 从库里取出 top-N 候选稠密向量 / BM25 / 两者混合只取 top-k 就直接用。k 里的「相关」是按向量距离算的,不等于「答得上问题」
③ 重排(可选)对候选逐个精算相关性,重新排序cross-encoder 模型 / 托管 rerank API把它和「多路召回融合(RRF)」混为一谈——两者输入都不一样(下一篇专门拆这个)
④ 组装上下文把片段拼进 prompt带上标题、出处、编号不管字数上限硬塞;不标注来源,模型分不清哪段是资料哪段是指令
⑤ 生成让模型基于材料回答要求「只依据材料回答,没有就说不知道」材料里没有答案时,模型用先验知识补上去

③ 是可选的,这正是本专题要讨论的核心。 ②和③的关系是:②负责「别漏」(召回率),③负责「别把不相关的排前面」(精确率)。链条上任何一环出问题,最后都会表现成「模型答得不对」,但根因常常在前两环。

瓶颈通常不在生成,而在召回​

这是各家做检索系统的文档里反复出现的一句话。Milvus 官方文档的原话(逐字,model-ranker-overview.md):

Traditional vector search ranks results purely by mathematical similarity—how closely vectors match in high-dimensional space. While efficient, this approach often misses true semantic relevance. Consider searching for "best practices for database optimization": you might receive documents with high vector similarity that mention these terms frequently, but don't actually provide actionable optimization strategies.

翻译过来就是:向量检索排的是「数学上像不像」,不是「能不能回答这个问题」。 上面那个例子——满篇都是关键词、但一条可操作建议都没有——是向量检索的典型失败形态。

sentence-transformers 的文档则把「重排」这件事的存在理由写成了四个特征(逐字,cross_encoder/usage/usage.rst):

Characteristics of Cross Encoder (a.k.a reranker) models:

  1. Calculates a similarity score given pairs of inputs (typically text pairs, but also image-text or other modalities).
  2. Generally provides superior performance compared to a Sentence Transformer (a.k.a. bi-encoder) model.
  3. Often slower than a Sentence Transformer model, as it requires computation for each pair rather than each text.
  4. Due to the previous 2 characteristics, Cross Encoders are often used to re-rank the top-k results from a Sentence Transformer model.

更准 + 更慢 ⇒ 只能用来重排 top-k。 这四条既是重排的定义,也是它的适用边界,下一篇会逐条展开并配上实测数字。

本专题的路线​

#篇目状态
0入门:一条链路的五个环节(本篇)✅
1Rerank:是什么、什么时候用、怎么用✅
2切片与向量化:不同类型文档怎么切、怎么算成向量✅
3向量相似度的原理:余弦、点积、欧氏,以及「像不像」到底在算什么✅
4检索能力边界:同一批问题,四种检索组合各在哪失效✅
5失败案例拆解:六个真实坏案例,一套固定模板✅
6架构演进之路:Naive → Advanced → Agentic✅
7PDF 解析:RAG 链路最前面那道闸门✅
8+待定:上下文组装与引用 / 召回评测的工程落地⏳

配套读物(不在本栏目,放在读书栏目):《信息检索导论》里与 RAG 相关的 4 章必读 + 5 章略读,配 11 道能接到本专题脚本上的习题——**BM25 的推导、检索评估指标、查询改写(Rocchio / 伪相关反馈)**这三块理论在这里补。

引用边界​

  • 本文引用的 Milvus、sentence-transformers 原文,均为逐字,来源 URL 与抓取方式记在 source/rag-lab/official-sources.md。
  • 「大模型三个短板」这段是通用工程共识的归纳,不是某份文档的原话,也没有配引用——它只是把「为什么要检索」讲清楚,不承担事实主张。
  • 表格里的「常见做法」是经验归纳;凡涉及具体数字的结论,都放到下一篇用实测说话。