RAG 面试题总结
RAG 面试的分水岭不在”用过哪个向量库”,而在能否把召回链路的每一环讲清:文档怎么切、证据怎么取、答案怎么评、幻觉怎么治。本篇沿链路整理高频题。
考察地图
- 链路与定位:RAG 两阶段流程、与微调的分工。考察对链路的整体认知。
- Chunk 策略:固定长、递归、语义、父子切分的取舍。考察文档侧基本功。
- 检索优化:混合检索与 RRF、Rerank、”答非所问”排查路径。考察链路调优能力。
- 评估指标:检索与生成两段式指标。考察评测闭环意识。
- 幻觉治理与 GraphRAG:证据约束的分层手段、图结构的适用边界。考察进阶判断力。
- 建议自行查阅:HNSW/IVF 等索引算法细节、向量库选型对比、多模态文档解析、权限过滤的具体实现——属专题深挖,沿召回链路自行展开。
链路与定位
什么是 RAG?完整链路包含哪些环节?
结论:RAG(检索增强生成)在生成前先从外部知识库检索相关证据、连同问题一起交给模型作答,核心是让回答有据可依。链路分离线索引与在线检索生成两阶段。
原理:离线阶段是文档解析 → 清洗结构化 → Chunk 切分 → Embedding 向量化 → 写入向量索引;在线阶段是 Query(必要时改写)→ 召回(向量或混合检索)→ Rerank 精排 → 上下文组装 → 模型带引用生成。每一环都是独立的质量杠杆:解析坏了后面全错,切分决定证据粒度,召回决定质量天花板,重排决定 Top-K 成色,Prompt 决定模型用不用证据。
延伸:面试里按”数据流向”画出两阶段比背定义更加分;主动指出”生成质量的上限由检索质量决定”,说明理解了链路的串联本质。
追问:链路中哪一环的问题最难排查?提示:切分与召回的耦合问题——Chunk 切坏导致的召回失败,症状往往到生成端才暴露。
RAG 和微调怎么选?
结论:知识问题用 RAG,行为问题用微调;RAG 注入的是可追溯的事实,微调塑造的是稳定的风格与表达。
原理:RAG 的优势是知识可天级更新、答案带引用可审计、不触碰模型权重,适合事实密集、时效性强的问答,代价是链路多、检索质量决定上限。微调把领域语感与输出格式内化进权重,响应路径短,但知识更新要重训、容易过拟合旧事实,且无法给出引用来源。企业知识库问答首选 RAG;需要模型”说行话、按固定模板输出”时再叠加微调。
延伸:两者可组合——微调负责格式收敛与领域表达,RAG 负责事实供给。典型反例:试图用微调让模型”记住”每月变更的价格表。
追问:法律法规问答选哪条路?提示:条文时效强且需引用出处,RAG 为主;微调仅用于法言法语的表达风格。
Chunk 策略
Chunk 为什么不能只按固定长度切?
结论:固定长度切分无视语义边界,会把完整论点拦腰斩断、把无关内容拼进同一块,直接污染召回与生成;切分必须尊重文档结构。
原理:常见策略按强度递进:固定长加 Overlap 实现最简单,但块内语义混杂;递归切分按”段落→句子”的层级找边界,是通用默认;语义切分按 Embedding 相似度检测话题拐点,成本高但边界最准;父子切分(Parent-Child)用小 Chunk 做精准召回、返回父块保证上下文完整,兼顾命中率与信息量。块大小的取舍:太大则 Embedding 被稀释、噪声多;太小则语义不完整、答案缺上下文。Overlap 一般取块长的 10%~15%,防边界处信息断裂。
延伸:结构化文档优先按标题层级切,表格与代码块保持整块不拆;标题、页码、来源、权限等元数据要在切分阶段挂到 Chunk 上,后续召回过滤全靠它。
追问:技术文档里代码块被切成两半导致答案报错,怎么改?提示:按语法边界识别代码块,整块保留并允许超出块长限制。
检索优化
Hybrid Search 是什么?BM25 和向量怎么融合?
结论:混合检索并行跑关键词(BM25)与向量两路召回,再按融合算法合并结果,兼顾精确匹配与语义泛化。
原理:两路互补:BM25 对专有名词、型号、错误码等字面匹配极强,但不懂同义词;向量检索理解语义,却在罕见术语与数字编号上漂移。融合常用 RRF(Reciprocal Rank Fusion):只看各路名次、不看原始分数,天然免疫两路分数量纲不一致的问题,常数 k 一般取 60。合并后再接 cross-encoder 重排定型 Top-K。
RRF(d) = 1 / (k + rank_bm25(d)) + 1 / (k + rank_vector(d)) |
延伸:权重可按场景调——FAQ 类精问精答给 BM25 更高权重,开放问答偏向向量。注意权限与租户过滤要在两路召回时各自生效,合并后再过滤会漏数据。
追问:为什么不能把 BM25 分数和向量余弦分直接加权?提示:两者量纲与分布完全不同,需归一化或改用名次融合。
为什么需要 Rerank?不能只靠向量相似度排序吗?
结论:向量召回是粗排——双塔分别编码、打分快但精度有限;Rerank 用 cross-encoder 对 query 与候选联合编码,精度高但慢。两者搭配是性价比最优解。
原理:向量检索把 query 和文档独立编码成向量再算距离,编码时彼此不可见,相关性信号有损失;cross-encoder 把 query 与候选拼在一起过模型,逐对打出精细相关分,但 O(n) 的逐对计算无法对全库使用。标准做法是向量或 BM25 召回 Top 50100,Rerank 精排出 Top 510 进上下文。召回决定天花板,重排决定最终质量,解决的是链路不同位置的问题。
延伸:Rerank 在长 Chunk、候选噪声大时收益最明显;短句精确匹配场景收益有限。上线前用 Recall@K 对比验证,别为”架构完整”硬加。
追问:正确文档已进候选池但总排在 TopK 之外,调召回还是上 Rerank?提示:先看候选池名次分布——落在 20~50 名说明召回够、缺精排。
线上出现”答非所问”,按什么路径排查?
结论:沿链路从数据到生成逐层定位:解析 → Chunk → 召回 → 重排 → Prompt 与生成,先确认证据对不对,再看模型用没用。
原理:五层排查法。解析层:源文档是否解析成功,表格图片有没有丢;Chunk 层:正确内容是否被切散、元数据是否缺失;召回层:用原 query 直查向量库,正确 Chunk 在不在候选池——不在就是召回问题(改写 query、调索引、上混合检索);重排层:在候选池但进不了 Top-K,加重排或调权重;生成层:证据齐了仍答错,查上下文顺序(关键证据是否被埋在中段)、截断与指令约束(有无要求仅依据证据作答)。
延伸:这套路径的前提是先建 Badcase 样本集,用标注好的”问题 → 应有证据”对照,才能分清每一层的责任;没有样本集的优化都是盲调。
追问:只有最终答案评分、没有中间数据时,怎么判断问题在检索还是生成?提示:人工标注一轮检索结果——证据对而答案错归生成,证据错归检索。
评估指标
RAG 评估指标有哪些?为什么要分检索和生成两段?
结论:RAG 是检索与生成的串联系统,最终答案差无法区分责任归属;两段式指标把检索质量与生成质量拆开量化,优化才有方向。
原理:检索段指标:Recall@K(正确证据是否进入 Top-K,最重要)、MRR(首个正确结果的倒数排名)、NDCG(考虑排序位置的分级相关性)。生成段指标:Faithfulness(答案是否忠于证据,用于检幻觉)、Answer Relevancy(答案与问题的相关度)、Context Precision(上下文中有用证据的占比)。评测方法上,检索段用标注样本集计算,生成段常用 LLM-as-Judge 打分再加人工抽检校准。
延伸:闭环流程是”Badcase 标注 → 指标定位责任段 → 改策略 → 回归验证”;只看最终答案的主观好坏,会把检索的锅甩给模型,优化永远在错误的层发力。
追问:Faithfulness 低但 Recall@K 高说明什么?提示:证据取对了但模型没用——查指令约束、证据位置与上下文噪声。
幻觉治理与 GraphRAG
RAG 的幻觉问题怎么解决?RAG 一定不会产生幻觉吗?
结论:RAG 只能显著压低幻觉,不能根除——检索可能取错证据,模型也可能无视证据自行发挥;治理要检索、生成、校验三层联动。
原理:幻觉在 RAG 里有三个入口:检索失败(库里没有或没取到,模型被迫硬答)、证据错误(召回内容本身过时或错误)、生成违背(证据正确但模型编造或曲解)。对应手段:检索层保证覆盖与更新,取不到时明确拒答而非让模型自由发挥;Prompt 层强制”仅依据给定证据作答”并要求引用编号;输出层校验答案与证据的一致性(Faithfulness 检测),关键字段走工具核验。源头治理同样关键:知识库要有版本管理与过期清理,数据错了一切白搭。
延伸:拒答策略常被低估——设定召回分数阈值,低于阈值直接回复”未找到相关资料”,代价远小于让模型硬答。
追问:模型引用了证据编号但曲解原意,算哪种幻觉?提示:生成违背型,用 Faithfulness 校验与引用对齐检测来抓。
GraphRAG 解决什么问题?和标准向量 RAG 有什么区别?
结论:标准 RAG 把知识切成孤立 Chunk、靠相似度取证,擅长点状事实问答;GraphRAG 用实体-关系图组织知识,补的是多跳推理与全局性问题的短板。
原理:向量相似度回答不了”A 和 B 通过谁关联”这类多跳问题——每一跳的证据与 query 的相似度都未必高;也回答不了”整个库主要讲什么”这类全局问题。GraphRAG 离线阶段抽取实体与关系建图,做社区发现并为每个社区生成摘要;查询时局部检索沿图多跳遍历,全局检索用社区摘要自底向上聚合。代价是建图成本高(实体关系抽取要过模型)、更新复杂、权限过滤更难设计。
延伸:定位是”补”不是”替”——成熟系统常是关键词、向量、图三路组合,按问题类型路由。判断要不要上图:看 Badcase 里多跳与全局问题的占比,占比很低就不值得。
追问:GraphRAG 的权限过滤怎么做?提示:实体与边挂权限标签、遍历时过滤,比 Chunk 级过滤复杂,需提前设计。
Embedding 模型升级后为什么要重建索引?
结论:不同 Embedding 模型产出的是不同的向量空间,新旧向量之间算距离没有意义;换模型必须全量重建索引,不能混用。
原理:向量相似度的前提是所有向量由同一模型映射到同一空间。升级模型后,旧文档向量留在旧空间,新 query 向量在新空间,两者算出的余弦值接近随机噪声。同理,Chunk 策略变更也要重切重嵌——切分变了,块的内容与边界全变。工程上的平滑做法是双索引灰度:新索引进新库或新 collection,离线评测达标后切流量,旧索引保留一段时间用于回滚。
延伸:只新增不删除的知识库会积累过期与多版本文档,同一文档新旧版本同时被召回是常见 Badcase——更新要走”删旧版再写新版”(delete-then-insert),并给 Chunk 挂版本号便于审计。
追问:全量重建期间线上检索不能停,怎么设计?提示:双写或双索引加别名切换,流量切完再下线旧索引。

