RAG:原理、完整链路、各模块,以及优缺点

0 阅读5分钟

面试题就五问:RAG 是啥、原理、完整链路、各模块干什么、优势与不足。
下面按这个顺序答,最后一句话收口,再用项目把链路走一遍。


一、RAG 是啥

RAG = Retrieval-Augmented Generation,检索增强生成。

裸模型是闭卷考试:只靠参数里的旧知识,公司制度改了它不知道,还可能编。
RAG 是开卷考试:先从知识库找出相关段落,再让模型对着这些材料说话。

左:裸模型只靠参数;右:RAG 先检索再生成

面试一句话:模型负责把话说圆,RAG 负责把开卷资料放到桌上。

闲聊、翻译不必上 RAG。要答「我们公司怎么规定」,必须上。


二、RAG 原理

原理就一件事:生成前多一次检索,用外部知识补模型不知道的东西。

用户问 → 把问题变成检索条件 → 从库里取出最相关的几块文本 → 和问题一起塞进提示词 → 模型基于这些证据生成(最好带引用)。

它不让模型变聪明,只解决两件事:知识过时闭卷胡编。检索找错了,生成一定错。

面试一句话:先找资料,再对着资料生成。


三、完整链路

完整 RAG 是两条路,不是「提问 → 检索 → 生成」三步就完。

  • 离线索引: 文档 → 解析 → 切块 → Embedding → 写入向量库(文档更新再跑)
  • 在线问答: 提问 →(改写查询)→ 检索 TopK →(重排)→ 拼提示词 → 生成并引用

左:离线把文档入库;右:在线拿证据再回答

面试一句话:离线把文档变成可搜的块,在线先搜再生成。


四、各模块作用

阶段模块干什么做错了会怎样
离线解析PDF/网页变成可切的文本表格、页眉混进正文
离线切块切成检索单位,块之间留重叠太大噪声高,太小语义碎
离线Embedding文本变成向量入库和查询用了不同模型,召回飘
离线向量库 + 元数据存向量、原文、来源、权限无法引用,或把不该看的搜出来
在线查询处理口语改成好搜的问法「出差票怎么报」搜不准
在线检索向量 + 关键词取 TopK漏掉条款号、专有名词
在线重排先宽召回再压到 3~8 条垃圾块塞进提示词
在线生成只根据资料写答案并带出处资料不够仍瞎编

切块没有标准长度。中文制度常见 300~800 字加重叠,标准是:单独拿出来,人看了能懂。

检索为空:改写再搜一次;还空就说不知道,禁止用模型常识顶制度。

没有相关块就改写再检索,仍空则承认不知道

面试一句话:切块定召回上限,检索定回答下限,生成只是最后一公里。


五、优势与不足

和微调对比着说:

RAG微调
知识更新换文档、重建索引重新训练
可追溯能指到某一节知识融进权重
适合制度、FAQ、接口文档口吻、格式、推理习惯

优势: 更新快、能引用、比给每份文档微调便宜。
不足: 检索错则全错;切块和权限要自己扛;多跳问题一次检索经常不够;仍可能胡编(错块、截断、模型不听「只根据资料」)。

面试一句话:RAG 擅长把新知识塞给模型,不擅长让模型学会一种新能力。


六、总结(面试时这样说,大约 30 秒)

可以先完整说一遍,最后再用那句压住:

RAG 是检索增强生成,先把外部文档变成可检索的知识,再让模型对着检索结果生成,相当于开卷考试。
完整链路分两条:离线把文档解析、切块、向量化写入向量库;在线把用户问题检索出 TopK,必要时重排,拼进提示词再生成,并带上引用。
切块决定召回上限,检索决定回答下限,生成只是组织语言。
比微调强在更新快、能引用;弱在检索错就全错,切块和权限都要自己扛。资料不够就明确说不知道,不能用模型常识顶业务制度。

压轴一句:模型负责把话说圆,RAG 负责把开卷资料放到桌上。


七、结合项目:企业制度问答助手

场景:员工问请假、报销、出差,必须按现行制度答,并给出条款出处。前端对话页,后端 FastAPI,知识库是制度 Markdown/PDF。

为什么用 RAG:制度常改、必须能点到「哪一节」、答错有合规成本,不能闭卷蒙。

用户问「出差报销要哪些票」:

项目走查:出差报销要哪些票

离线按标题切,4.2 差旅机票 单独成块,挂上来源和生效日期。在线改写查询后命中该块:机票要发票和行程单。Prompt 写死只根据资料答,每条带章节。

三条必须写进代码:检索为空禁止编细节、每条答案带引用、制度更新必须重建索引。

面试怎么讲这个项目:RAG 在这里是 Agent 的一个工具,规划到「要查制度」才检索;连续为空就转人工,不拿模型常识顶制度。


八、面试可能追问(短答)

Q:RAG 和微调怎么选?
A:知识常变、要引用、按文档答 → RAG。要改口吻、固定格式、领域推理习惯 → 微调。多数业务先 RAG。

Q:chunk 该多大?
A:没有标准值。从「单独拿出来人能看懂」出发,中文制度常见 300~800 字加重叠。用问答集看召回。

Q:只做向量检索够吗?
A:不够。条款号、专有名词要混合检索(向量 + BM25),再重排。纯向量容易漏「4.2.1」。

Q:检索为空怎么办?
A:改写再检一次;仍空就说资料里没有,转人工。禁止用模型常识顶制度。

Q:上了 RAG 还会胡编吗?
A:会。常见原因是检索到错块、块被截断、模型没遵守「只根据资料」。要用引用、拒答、抽检。

Q:Embedding 和聊天模型必须同一家吗?
A:不必。但入库和查询必须用同一个 Embedding。聊天模型可以换,向量空间不能混。