怎么考「完整讲一遍 RAG 链路:从文档进来到答案出去,每一步在解决什么问题?」
谁在问:一面开场必问;简历写了 RAG 项目几乎 100% 会被问
开场怎么问
你先给我讲讲你理解的 RAG 是怎么工作的,从头到尾。
换个问法
- 一个 RAG 系统大概分几步?
- 用户问一个问题,到拿到答案,中间发生了什么?
五层追问链
左边照着问,右边对着听。最后一层是压力面,不必每个候选人都问到。
这些步骤里,你觉得哪一步对最终效果影响最大?为什么?
- 期望
- 没有唯一答案,但要给出归因逻辑。常见的有理据答案:分块和 embedding 决定检索精度的上限(漏召回不可逆,后面无论如何补不回来);或者答「取决于 badcase 类型,所以我先建评测集分桶定位」。
- 信号
- 直接说「模型最重要」的,说明还停留在调 API 的视角。
为什么不直接微调一个模型把知识学进去?
- 期望
- 知识更新频繁(微调跟不上)、无法引用溯源、成本高、私有数据训练有合规风险;而 RAG 改一份文档立刻生效。进阶:两者不对立,微调调「风格和能力」,RAG 供「知识」(详见 Q4-07)。
- 信号
- 只会说「微调贵」而说不出「不能溯源」「更新慢」的,理解不完整。
检索回来的 chunk 怎么组织进 prompt?顺序有讲究吗?
- 期望
- 有讲究——模型对上下文中间位置的信息利用率较低(lost in the middle),所以最相关的通常放最前或首尾;要带编号供引用溯源;要控 token 预算,不是塞越多越好(context rot);要明确指示「材料中没有就说不知道」。
- 信号
- 答「按相似度倒序塞进去就行」的,没做过上下文组装优化。
你们线上这条链路的延迟大概是多少?瓶颈在哪?
- 期望
- 能给量级即可——检索几十毫秒、rerank 几十到几百毫秒、生成占大头(首字延迟);瓶颈通常在生成和 rerank;优化手段是流式输出、轻量重排模型、并行召回。
- 信号
- 完全说不出量级的,大概率没参与过上线。
你这套链路和直接把文档全塞进百万上下文的模型比,优势在哪?
- 期望
- 见 Q2-02。成本与延迟(数量级差距)、效果(长输入准确率会塌方)、规模(TB 级知识库装不下)、可控性(权限过滤、时效过滤、引用溯源)。加分:长上下文改变的是 RAG 的参数而不是它的存废。
- 信号
- 立场摇摆或答「确实长上下文更好」的,缺乏工程判断。
危险信号
听到这些话,基本可以判定是背题而不是做过。
评分卡
- 明确区分离线建索引与在线查询两条线
- 每步能说出「解决什么问题」而非只报名词
- 提到了混合检索或 rerank(说明知道生产链路 ≠ 纯向量检索)
- 提到元数据(来源/权限/时间)的价值
- 提到评测或 badcase 闭环
- 加分:主动给出「检索 vs 生成」的归因方法
- 加分:能说出 RAG 相对微调的定位差异
参考答案与考察意图面试中途别看这一段
考察意图
热身题,但淘汰率不低。面试官在看三件事:① 你是「搭过系统」还是「调过 API」——搭过的人会自然分出离线和在线两条线;② 你能不能说出每步在解决什么问题,而不是背名词;③ 你的表达是否有结构——这题答得散乱,后面的深挖题面试官会自动降低预期。
参考答案
60 分答案(及格线)
RAG 分两个阶段。离线建索引:文档解析成文本 → 切成 chunk → 用 embedding 模型向量化 → 存进向量库建索引。在线查询:用户问题向量化 → 在向量库里检索最相似的 top-k 个 chunk → 把这些 chunk 和问题一起拼成 prompt → 交给 LLM 生成答案。核心思想是让模型「开卷考试」,用外部知识弥补它不知道私有数据、知识有截止日期的问题。
90 分答案(有生产经验的回答)
在 60 分的骨架上,每步补一句「解决什么问题」,并补齐生产链路里被新手省略的环节:
离线:① 解析(把 PDF/表格/扫描件变成干净文本,脏文档处理是最花时间的一环)→ ② 分块(平衡语义完整与检索精度,同时挂上标题路径、来源、权限等元数据)→ ③ 向量化(决定检索精度的上限)→ ④ 建索引(向量索引 + 倒排索引,让千万级检索在毫秒内完成)。
在线:⑤ 查询理解(改写解决多轮指代、扩展解决表述鸿沟、路由决定去哪查)→ ⑥ 混合召回(向量 + BM25 双路,目标是不漏)→ ⑦ 融合与重排(RRF 融合 + cross-encoder 精排,目标是不排错)→ ⑧ 上下文组装(控预算、排顺序、带出处编号)→ ⑨ 生成(约束忠实度、要求引用、材料不足时说不知道)→ ⑩ 评测与迭代(badcase 归因回流)。
再补一句总结性判断:这条链路本身就是排障框架——出了问题先把正确文档手工塞进 prompt,能答对就是检索的锅,还答不对就是生成的锅。