05.01概念更新于 2026年9月17日

RAG 全流程

文档 → 切块 → 向量化 → 检索 → 组装上下文 → 生成。

05.01 · 课时讲解

RAG 全流程

先找出与问题相关的知识片段放进上下文,再让模型基于片段回答。

1 / 11

一句话理解:RAG(检索增强生成)就是先从企业知识里找出与问题相关的片段,放进上下文,再让模型基于这些片段回答;它分为离线“建索引”和在线“查与答”两条流水线。

模型不知道你们公司的退款政策,不知道上个月刚更新的换货标准,也不知道企业版和个人版的发票流程有什么差别。让 Agent 用上企业自己的知识,最常见的做法就是 RAG。

很多团队的 RAG 项目会经历同一条曲线:Demo 阶段效果惊艳,上线后用户开始反馈“答非所问”“引用了过期规则”“明明文档里有却说找不到”。团队的第一反应通常是换一个更强的模型,但问题往往出在检索链路的某一环。这一课先把整条流水线画清楚,后面几课再逐环深入。

两条流水线

下面这张全景图把离线与在线两条流水线,以及贯穿其中的支撑能力画在一起:

RAG 全景:离线建索引链路、在线查与答链路,以及权限、保鲜、评估与分流等支撑体系 OFFLINE 离线 建索引 文档变化时运行 原始文档 PDF / Word 网页 / 工单 解析 提取文字 表格与图片 清洗 去页眉页脚 去重复 切块 按结构切分 设置重叠 补充元数据 来源、版本、权限 生效日期、区域 向量化 Embedding 语义坐标 写入索引 向量索引 + 关键词索引 知识索引 · 片段 + 元数据 ONLINE 在线 查与答 每次提问时运行 用户问题 自然语言提问 附带用户身份 理解与改写 补全指代 加过滤条件 混合检索 关键词 + 向量 元数据过滤 重排序 精排 截断 Top N 组装上下文 去重、排序 标注来源 生成回答 基于片段作答 无依据则拒答 引用与校验 指回原文 程序校验引用 权限 检索时按用户身份过滤 · 分库 / 元数据过滤 / 实时鉴权 · Agent 用当前用户身份,而不是全权服务账号 保鲜 变更检测(包括删除) · 增量更新先删旧片段 · 只取“生效中” · 引用显示版本与更新日期 评估 检索段:命中率、排名、上下文精确度与召回 · 生成段:忠实度、答案相关性、正确性、拒答 分流 实时业务数据走工具查询 · 多步问题交给 Agentic RAG · 知识总量很小时可直接放入上下文
图 1 · RAG 全景:上排离线建索引,下排在线查与答,底部是贯穿两条流水线的支撑体系

每一环都会影响最终答案,也都可能成为故障点。下表列出每一环的职责、常见问题,以及在本模块哪一课深入:

环节 做什么 常见问题 详见
解析 从 PDF、Word、网页中提取文字与表格 表格被拆成乱序文字;扫描件提取不到文字 本课
切块 把长文档切成适合检索的片段 条款被从中间切断;片段丢失“这是哪份文档”的背景 切块与元数据
元数据 给片段标注来源、版本、权限、生效日期 没有版本信息,新旧规则一起被召回 切块与元数据
向量化 把文本转成表示语义的向量 对订单号、错误码等精确字符串不敏感 Embedding 与语义搜索
检索 找出与问题最相关的候选片段 只用向量检索,漏掉关键词精确匹配的结果 混合检索与重排序
重排序 对候选片段精细打分,只保留最相关的几段 不做重排,把 20 个半相关片段全塞进去 混合检索与重排序
组装上下文 决定片段的顺序、格式与标注 片段没有来源标签,模型无法引用 上下文五问
生成与引用 基于片段回答并标注出处 片段里没有答案时仍然编造 引用与可追溯
保鲜与权限 文档更新后同步索引;只检索用户有权看的内容 删除的文档仍被召回;越权看到其他区域的客户合同价 知识保鲜与权限

解析 这一环值得单独强调,因为它最容易被低估。企业文档里大量关键信息在表格中:价格表、时效表、退款标准。如果解析工具把一张“版本 × 席位数 × 价格”的表格拆成一串没有结构的数字,后面的检索和生成再好也救不回来。上线前一定要抽查解析结果,尤其是表格、多栏排版和扫描件。

一个完整的例子

用户(华东区售后客服)问:“订单已经开了发票,还能退款吗?”

1. 理解与改写:
   原问题 → “已开具发票 订单 退款 处理方式”
   附加过滤:业务线=售后;区域 ∈ {全国, 华东};状态=生效中;用户权限=华东客服

2. 检索:
   关键词检索命中 “发票 作废” 的 12 个片段
   向量检索命中语义相近的 20 个片段
   合并去重后得到 26 个候选

3. 重排序:
   精排后保留 3 段:
   ①《退款政策》v3 第 4.2 条(生效中)
   ②《发票管理规范》第 7 条
   ③ FAQ:“开票之后还能不能退款”

4. 组装上下文:按相关度排列,每段带上文档名、条款号、版本、生效日期

5. 生成:
   “已开具发票的订单,需要先完成发票作废,再发起退款【退款政策 v3 §4.2】;
    发票已交付给客户的,须由客户确认作废后才能重新开具【发票管理规范 §7】。”

6. 校验:程序检查每条引用都能在对应片段中找到原文

注意第 1 步的过滤条件:“生效中”和“用户权限”不是让模型判断的,而是在检索时由程序直接过滤。 这比检索完再让模型“注意不要用过期规则”可靠得多。

什么时候不该用 RAG

RAG 不是让 Agent 获取信息的唯一方式。以下三种情况,要先考虑别的方案。

1. 数据是结构化的、实时的业务数据。 “订单 ORD-1024 现在是什么状态”“这个月华东区有多少笔退款失败”,答案在业务系统的数据库里,应该通过工具调用 API 或受控查询获取,而不是把订单数据导出成文本再做向量检索。RAG 适合 非结构化的、相对稳定的知识:规则、制度、手册、FAQ、历史案例。数据该用工具还是知识库,参见 LLM 与确定性程序的分工。

2. 知识总量很小。 如果全部相关文档加起来只有几万 Token,直接放进上下文(配合提示缓存)可能比搭建检索系统更简单、更准确。Anthropic 在 2024 年介绍 Contextual Retrieval 的文章中就给过类似建议:知识库小于约 20 万 Token 时,可以考虑直接整体放入提示。不过也要记住上下文腐化的问题,文档越多,这种做法越需要用评测验证。

3. 问题需要多步探索。 “对比近三个月三次退款政策修订的差异,并判断哪些历史订单受影响”,一次检索很难拿全信息。这类问题更适合让 Agent 把检索当作工具反复使用,参见 Agentic RAG 与联网搜索。

“答不准”时先定位是哪一环

RAG 最重要的排查习惯,是把问题拆成 检索问题 还是 生成问题:

RAG 答不准时的排查判断树:先判断是否检索到正确片段,再判断回答是否正确 检索到了正确片段? 是 否 回答正确吗? 检索问题 解析 · 切块 · 检索 · 权限 · 保鲜 查:索引里有没有、元数据、改写、Top K 是 否 正常 生成问题 片段太多有干扰?没要求基于片段作答? 片段顺序或格式让模型误读?
图 2 · 先分清检索问题还是生成问题,再决定修复方向

这个拆分决定了修复方向,也是 RAG 效果评估 一课中指标设计的基础。

常见误区

  • “RAG 效果不好就换更强的模型。” 如果正确片段根本没被检索到,任何模型都答不对。先看检索结果。
  • “把所有数据都放进向量库。” 实时业务数据应该通过工具查询。向量库里的订单状态一定是过期的。
  • “文档导进去就完事了。” 解析质量、切块方式、元数据、更新机制,决定了知识库上线三个月之后是否还可用。

产品经理检查清单

  • 用户的问题中,哪些依赖非结构化知识(适合 RAG),哪些依赖实时业务数据(适合工具)?
  • 知识源有哪些?总量多大?谁负责维护?多久更新一次?
  • 表格、扫描件、图片中的信息是否能被正确解析?抽查过吗?
  • 版本、生效状态、区域、权限,是在检索时由程序过滤,还是指望模型判断?
  • 检索不到依据时,Agent 的预期行为是什么?
  • 出现“答不准”时,能否在日志中看到检索到的具体片段?

练习

用 20 份 PDF 搭建公司知识库 Agent(贯穿项目 02)之前,先完成一份设计草图:

  1. 列出这 20 份文档的类型(制度、手册、FAQ、表格为主的文档……),标注哪些含有关键表格。
  2. 按本课的两条流水线,为每一环写一句你的方案(例如“切块:按标题层级切,表格整体保留”)。
  3. 写出 5 个用户可能问的问题,判断每个问题应该走 RAG、工具查询还是两者结合。
  4. 挑一份含表格的 PDF,用任意解析工具提取文字,检查表格是否还能读懂。

延伸阅读

下一步

下一课「Embedding 与语义搜索(直觉版)」会解释流水线中最“神奇”的一环:为什么意思相近但字面不同的文本能被找到,以及它在哪些地方会失灵。

试试:上下文、MCP、沙箱、Prompt 注入、外链