考察点
这是 RAG 面试的开门题,几乎每场必问(多份 2026 面经都有记录)。面试官想确认两件事:你是真做过,还是只会背概念;你能不能说清「难在哪」——只会讲流程的人会被追问细节拷打。追问方向通常是:切分怎么做、向量库用的哪个、效果怎么量化。
参考答案
一句话定义
RAG(Retrieval-Augmented Generation,检索增强生成)是给大模型外挂一个知识库的架构:用户提问时,先从知识库里检索出相关文档片段,把片段拼进 Prompt 一起喂给模型,让模型基于检索到的内容作答。它解决的是大模型三个核心短板:知识截止(训练数据有时效)、私有知识缺失(模型没见过公司内部文档)、幻觉(模型不知道时会编)。
完整流程:离线与在线两段
离线侧(建索引,只做一次或定期增量):
- 文档加载与清洗:PDF、Word、网页、Wiki 解析成纯文本,去掉页眉页脚、乱码、无关模板。这一步脏活最多,PDF 表格和双栏排版解析很容易翻车。
- 切分(Chunking):把长文档切成几百字的片段。切太大,向量表达被稀释;切太小,语义不完整。
- 向量化(Embedding):用 Embedding 模型把每个 chunk 编码成向量(比如 1024 维)。
- 入库:向量连同原文、元数据(文档名、章节、更新时间)写入向量数据库,建 ANN 索引(常用 HNSW)。
在线侧(每次问答都走):
- Query 处理:改写、补全指代、扩展同义词(可选但很关键)。
- 检索:query 向量化后做相似度搜索(余弦相似度),取 Top-K(常见 5-20 条),实际项目常叠加 BM25 关键词召回做混合检索。
- Rerank:用交叉编码器(如 bge-reranker)对召回结果精排,把 Top-K 收敛到 3-5 条最相关的。
- 生成:把精排结果按模板拼进 Prompt(带引用来源),调 LLM 生成答案,可流式返回。
最难的地方在哪
把 demo 跑通只要半天,难的是把检索质量做上去:
- 检索不到:切分把语义切碎了、Embedding 模型对领域词不敏感、query 和文档表述差异大(用户说「退货」,文档写「七天无理由」)。
- 检索到了但答错:Top-K 里混进噪声片段,模型被带偏;多个相关片段信息冲突时模型瞎选。
- 效果无法量化:没有评测集就不知道优化有没有用,改一个参数全看感觉。
- 工程化:文档更新后的增量索引、权限隔离(不同部门只能检索自己的文档)、高并发下向量库的延迟。
所以回答时我会主动带一句:「RAG 的天花板在检索不在生成,生成侧模型已经足够强,80% 的线上 Bad Case 都是召回问题。」这句话基本能引出面试官按你设定的方向追问。
可能的追问
Q:RAG 和直接把所有文档塞进超长上下文有什么区别? 成本和质量两个维度:百万级文档塞不进上下文,塞进去了也有「大海捞针」衰减——模型对中间位置的内容利用差;而且每次全量推理 token 成本和延迟都不可接受。
Q:你们项目离线索引多久更新一次? 看文档变更频率。客服知识库这种小时级更新的走增量管道:监听文档变更事件,只重新切分和向量化变化的文档,全量重建每周一次兜底。
Q:Top-K 设多少?怎么定的? 没有标准值。粗召回给 20-50,Rerank 后留 3-5。定值靠评测集:统计「正确片段出现在 Top-K 中」的 Recall@K 曲线,取拐点。