RAG 面试手册
依据 《从零开始学 Agent》第 6 章 整理,改成能讲、能对比、能说代价的面试口径。不是把教程代码背下来。
0. 30 秒开场(可直接说)
RAG 是先从外部知识库找出相关段落,再让模型基于这些段落回答。用来补三块短板:知识会过期、看不到公司内部文档、容易瞎编。今天线上一般是「切块 → 向量化 → 检索 →(可选精排)→ 拼进提示词生成」。原始 2020 论文是检索器和生成器一起训;现在几乎都拆开,检索用通用 embedding,生成用现成大模型。
1. 为什么要 RAG(必问)
大模型三件事做不好:
| 问题 | 例子 | RAG 怎么补 |
|---|---|---|
| 知识截止日期 | 「最新版有什么功能」 | 文档更新了就能查到 |
| 没有私有知识 | 「我们公司退款政策」 | 检索内部知识库 |
| 幻觉 | 编造不存在的论文 | 逼它对着真实段落写,并能引用来源 |
加分句: RAG 减幻觉,不是消灭幻觉。检索错了,生成也会错。所以瓶颈往往在检索,不在模型文笔。
别把 RAG 吹成万能。 书里点的局限,面试要能自己说:
- 检索质量差,后面再强也救不了
- 塞太多段会稀释重点(top_k 别乱加大)
- 答案散在多篇文档里,一次检索不好拼(要多跳 / Map-Reduce / 图)
- 索引不更新就会过时
- 表格、数据库不如上 Text-to-SQL
2. 一条流水线(白板就画这个)
离线(建库): 加载文档 → 切成 Chunk → Embedding → 写入向量库(带 metadata:来源、页码、时间)
在线(问答): 用户问题 →(可选改写)→ 检索 Top-N →(可选重排序到 Top-k)→ 把段落塞进 Prompt → LLM 生成(要求:只用资料、没有就说没有、注明来源)
四个名词用大人话:
- Chunk:切出来的一小段,独立存、独立搜。切坏了,后面全坏。
- Embedding:把文字变成一串数字。意思近的,数字也近。
- 相似度检索:拿问题的向量去库里找最近的几段。常用余弦相似度。
- 上下文注入:找到的段落写进提示词,不是写进模型权重。
3. 切分(面试官很爱追,因为很多人只会调模型)
原则:每一块最好是自己能看懂的一小段完整意思。在句子、概念中间砍断,检索回来就是残句。
书里三种切法:
- 递归分隔符:先按段落
\n\n,再按行、句号,最后才硬切。最常用。 - 按 Token:卡 embedding 上限或计费时用。
- 按 Markdown 标题:一块带着面包屑路径,例如
[Python入门 > 数据类型],单独搜到也知道它属于哪一节。
重叠 overlap: 关键句卡在两块交界时,重叠保证至少有一块是完整的。
块大小没有万能值,对齐问题粒度:
| 场景 | 建议(书中口径) | 原因 |
|---|---|---|
| 具体问答 | 300–500 字 | 更准、噪音少 |
| 摘要 / 总结 | 800–1500 字 | 上下文更完整 |
| 代码 | 按函数 / 类 | 语义边界天然在这 |
加载侧:PDF / Word / 网页结构完全不同,用策略模式按后缀选 loader 即可(这点和设计模式能串起来讲)。
4. 向量与数据库
选 embedding 看三件事:效果、钱、维度(维度越大越占存储、检索也可能更慢)。
书中对比(价格会变,面试说「以官网为准」):
text-embedding-3-small:多数场景性价比首选text-embedding-3-large:更准、更贵、维度更高- 本地
BGE等:隐私、不想走 API - 中文场景优先考虑中文优化过的模型
向量库:开发用 Chroma(像 SQLite,本地文件持久化)很常见;规模上去换 FAISS / Pinecone / Weaviate 等。索引常用 HNSW。检索可加:
- metadata 过滤(来源、时间)
- 最低相关度阈值(太不像的丢掉,书中示例 0.3)
- 批量 embedding,少打几次 API
余弦相似度: 看两个向量方向像不像,不看绝对长度。Chroma 里 distance 常是 1 - 相似度,所以代码里会 relevance = 1 - dist。面试说到这个,显得你读过实现而不是只听过名词。
5. 检索策略(第 6.4 节,你前面问的就是这块)
纯向量有两个坑:
- 语义漂:问「Error 404」,可能捞到「HTTP 错误」科普,而不是真写了 404 的段落。
- 召回不够:同一问题有很多问法,一条 query 会漏。
书里三条优化,对应搜索引擎的老套路:先求召回,再求精准。
5.1 混合检索(向量 + BM25)
- 向量:懂同义,对不准专有名词
- BM25:按字眼打分,FastAPI、工单号很稳,不懂同义
- 融合:两边各搜一批,加权合成(书中默认向量 0.7、关键词 0.3,可调)
- 中文 BM25 前要分词(jieba 一类)
面试怎么说: 两条腿走路。线上默认我会上混合,不先上 Agent。
5.2 重排序
粗找 10~20 条「大概相关」,真正最相关的可能排在第 5。精排把「问题和每一条」放在一起再打分,只留 3~5 条给生成模型。
两阶段:
- 第一阶段要召回(别漏)
- 第二阶段要精准(最相关的排前面)
和你之前那个问题对齐: 书第 6.4 节的示例是把候选交给 LLM(如 gpt-4.1-mini) 打分排序。这是一种做法。工业界更常见的是专用 reranker / cross-encoder(BGE-reranker 等):只判断贴不贴,比回答用的大模型小、便宜、快。
所以标准答法:是二次精排;不一定是那个写答案的大模型。
5.3 查询扩展
用户只会一种问法。让小模型改写成 2~3 个变体,分别检索,合并去重。提高召回,再交给重排序。
书中完整管道:
查询扩展 → 多路检索 → 合并去重 → 重排序 → 取最终 k 条
6. 一个能讲清楚的问答 Agent(第 6.5 节)
面试别背 300 行。讲四个盒子:
- 初始化:向量库 + 短对话历史
- 入库:切块 → embedding → 带上 source / 时间
- 问答:检索 → 过滤低相关 → 只取前几条拼 prompt → 生成
- 约束:只用资料、没有就承认、引用「根据文档 X」
书中几个工程细节值得提:
- 中文没空格,不能按空格切,要按段落、句号
- 相关度低于阈值直接扔(示例 0.3)
- 生成只喂前 3 段,防止稀释
- 历史只留最近几轮,避免上下文爆炸
- 库是空的或检索为空,直接说找不到,不要硬编
7. 范式演进(第 6.6 节,论文口试)
按时间线说,比报论文名好看:
| 阶段 | 一句话 | 代表 |
|---|---|---|
| Naive RAG | 检索完就生成,每问必检索 | 2020 Lewis 等 |
| Advanced RAG | 检索前改写、检索后精排 | 混合 / 扩展 / rerank |
| Modular RAG | 模块可插拔、可自适应 | Self-RAG、CRAG |
| Agentic RAG | Agent 决定检不检、检什么、不够再检 | LangGraph 编排 |
原始 RAG(2020)
知识写在参数里:难更新、长尾差、不能溯源。论文把 DPR 检索和 BART 生成端到端一起训。
今天:检索和生成解耦,embedding 用通用模型,生成用 GPT/Claude。思想没变:生成时能看外部知识。
两种老变体能提一句:RAG-Sequence(一篇文档生成一整段再加权)vs RAG-Token(每个 token 可以看不同文档)。知道即可。
Self-RAG:要不要检索,模型自己想
传统 RAG 每个问题都检索,有的问题模型自己会,检索反而添乱;有的要检多次。
做法:训练模型吐反思标记——要不要检索、文档相关吗、生成有没有文档撑着、回答有没有用。
对 Agent 的启示:先判断;检索后要验相关;生成后要验是不是胡编。
CRAG:检索差了怎么办
向量高分 ≠ 真相关。来了垃圾上下文,答案一起烂。
一个轻量评估器,按质量走不同路:够用就用 / 不行就过滤或改去 Web 搜 / 大段里只抽几句关键。
启示:检索不是终点;要有降级;大段要压缩。
GraphRAG(微软,2024)
向量块适合「X 是什么」这种局部题。不适合「各团队怎么协作」「这批文档主题是什么」这种全局题。
先抽实体和关系建成图,再社区摘要。局部题走邻居,全局题对社区摘要做 Map-Reduce。书中写全局题质量可高一大截,但建索引很烧 LLM。
LightRAG
GraphRAG 贵、慢、加几篇可能要重建。LightRAG:抽取得更省、双层检索(具体 + 抽象)、增量更新。适合知识库经常变。面试对比就一句话:要图能力但钱紧、更新勤,用轻量图;静态语料、关系特别重,才上完整 GraphRAG。
Agentic RAG
从「固定水管」变成「会想的侦探」:检不检、用哪条 query、结果够不够、不够就改写或换数据源。组件来自上面那些论文:自适应检索、纠错、改写、多源、多轮(IRCoT)、用状态机把检索嵌进推理。
新论文很多(MASS-RAG、隐空间加速、SQL 超边等),面试点到「方向」即可:多智能体拆证据、检索加速、结构化/SQL 补向量、图和文本互证。不必背 arXiv 号。
8. 工程落地怎么选(第 6.7 节)
朴素 RAG 的隐藏假设:答案一定在某几个相邻块里。 下面三类题它会跪:
- 全局:「各部门工作交叉点」
- 关系:「A 和 B 的间接合作」
- 多跳:「为什么结论是 X,请逐步推」
| 题型 | 架构 | 思想 |
|---|---|---|
| 全局 / 跨文档关系 | GraphRAG / LightRAG | 关系显式存在图上 |
| 多跳 / 不确定 / 要不要检索不一定 | Agentic RAG | Agent 动态决策 |
GraphRAG 两种搜:
- Local:具体人、具体事 → 找节点 → 逛邻居
- Global:主题、全貌 → 社区摘要再综合
LightRAG 查询模式:naive / local / global / hybrid(默认优先)。
别过度设计(书里的选型函数就是这个意思):
- FAQ、文档少、没有全局题 → 朴素 RAG 够了
- 文档多、偶有全局题、要省钱或常更新 → LightRAG
- 静态语料、要最强关系推理 → GraphRAG
- 客服、研究助手、问题忽难忽易 → Agentic RAG
Agentic RAG 四个零件(面试按流程说,不要背代码):
- 决策器:要不要检索(常识 / 已在历史里 → 不检;内部、时效、精确数字 → 检)
- 改写器:口语变检索用语,2~3 条
- 评估器:相关吗、够不够、缺什么
- 带引用生成:
[1][2]标来源
LangGraph 编排要点:
- 重试必须有上限(书中 ≥2 次就停,防死循环)
- 评估标准要写死,否则模型会把什么都判成「够了」
- 决策、改写、评估用小模型;最终回答用大模型
- top_k 3~5,变体 2~3,再多噪音和钱一起涨
生产里两者常组合:先判断题型,关系题走图,事实题走向量+改写。
书中踩坑表(很好用):
| 坑 | 表现 | 处理 |
|---|---|---|
| GraphRAG 没估 token | 索引到一半额度爆了 | 先 10~20 篇试成本 |
| Agentic 无上限 | 某个问题检索到死 | retry 封顶 |
| LightRAG 模式选 naive | 莫名其妙差 | 默认 hybrid |
| 评估过松 | 垃圾检索也过 | prompt 里写清「足够」= 有数字/日期/专名 |
「要不要检索」的提示词太糊,模型会觉得营收这种题训练数据里有,结果永远不检索。必须写明:公司内部、时效、精确数据 → 要查。
9. 对比速记(口试一页纸)
| 对比 | 怎么分 |
|---|---|
| RAG vs 微调 | 知识常变、要溯源 → RAG;风格/格式/稳定技能 → 微调。可以一起用。 |
| RAG vs 加长上下文 | 库大、要精确定位 → RAG;材料少且必须通读 → 长上下文。 |
| 向量 vs BM25 | 同义 vs 关键字。生产常混合。 |
| 装饰性 rerank vs 生成模型 | 精排用小 reranker 或小 LLM;写答案用大模型。 |
| Graph vs 向量 | 关系/全局 vs 局部事实。 |
| GraphRAG vs LightRAG | 质量/成本/能否增量更新。 |
| 朴素 vs Agentic | 固定管道 vs 动态决策;后者更慢更贵。 |
10. 项目怎么讲(准备一个就够)
我们做内部文档问答。先按标题和段落切,重叠 50~100,块大约 400 字,metadata 带来源和时间。检索用向量 + BM25 混合,粗召回 20,rerank 留 5。Prompt 写死:只用资料、没有就说没有、带引用。后来发现「各部门协作」这种题向量搜不准,全局题走图检索,事实题仍走混合检索。坑是:中文按空格切切不动;AOP 式自调用不是这块,这块的坑是 Agent 检索没上限、评估过松。
把「内部文档」换成你真实的库。主动说坑,比报名词像做过。
11. 高频追问
Q:RAG 一定比直接问模型好吗?
A:私有、时效、要引用时是。常识题检索可能添噪,所以 Self-RAG 才要先判断。
Q:chunk 越大越好吗?
A:越大越完整也越吵。问答偏小,总结偏大。
Q:top_k 调大能不能提高正确率?
A:召回可能升,但上下文被稀释,还可能超窗口。先精排和压缩,别只加 k。
Q:如何评估 RAG?
A:拆开看:检索有没有把金段落召回(Recall@k);答案是否有依据、是否忠于文档;延迟和费用。别只看「感觉回答得好」。
Q:幻觉还在怎么办?
A:检索错 / 评估松 / prompt 没禁止编造 / 模型不听引用。对症:混合+精排、强制无依据就拒绝、引用校验。
Q:和记忆系统什么关系?
A:长期知识进知识库;刚聊过的进短期记忆。别把聊天记录和制度文档混成一种索引。
12. 复习优先级
必须能讲 8 分钟: 为何 RAG、五步流水线、切块与 overlap、混合检索、重排序(专用模型 vs LLM)、Self-RAG 的「先判断」、CRAG 的「检索后评估」、Graph 适合全局题。
能对比即可: LightRAG、Agentic 四组件、LangGraph 重试上限、Chroma/HNSW/余弦。
点到为止: RAG-Sequence/Token、2026 一长串新论文。
来源:hao zhe-xing《从零开始学 Agent》第 6 章(6.1–6.7)。本手册是面试重组,不是原文摘录。细节以原章为准:https://haozhe-xing.github.io/agent_learning/zh/chapter_rag/index.html