RAG 工程与检索系统设计

一个系统讲解 RAG 从 demo 到生产的工程专栏。

RAG 不是"向量数据库 + 大模型"这么简单。真正的生产级 RAG 系统要处理文档解析、分块、Embedding、索引构建、权限过滤、混合召回、重排序、上下文压缩、引用溯源、增量更新、质量评估、成本延迟控制,以及 Agent 长期记忆。任何一环做错,最终都会表现为同一个症状:模型看似会回答,实际不可信。

本专栏从一次用户提问的完整生命周期出发,拆解 RAG 系统的每个工程边界。

flowchart LR
  subgraph OFF [离线 · 知识进入系统]
    direction TB
    D[文档解析] --> C[分块] --> M[metadata / 权限] --> E[Embedding] --> IDX[索引 · 增量更新]
  end
  Q[用户提问] --> QR[查询理解与改写]
  QR --> PERM[权限边界]
  PERM --> REC[多路召回<br/>稠密 + 稀疏]
  REC --> RR[重排序]
  RR --> PK[上下文打包<br/>token 预算内的证据密度]
  PK --> GEN[生成 + 引用校验]
  GEN --> LOG[日志 / 反馈 / 评估]
  IDX -.供给.-> REC
  LOG -.回流.-> OFF

这个专栏最不一样的地方:它从失败讲起。 第 3 章不讲怎么做对,先把四大失败家族摊开——找不到(Retrieval Miss)、找错(Retrieval Error)、塞不下(Context Packing Failure)、答不准(Generation Failure),外加一个被普遍忽视的第五类:延迟失败。再讲它们怎么级联放大、怎么做结构化归因、每类失败该配哪个指标,以及五个真实事故的 postmortem。

理由很简单:RAG 出问题时的症状永远是同一句「答得不对」,而原因可能在八个阶段中的任何一个。不会归因,调参就是抽奖。

读完你能做到什么

  1. 把一次提问拆成八个可观测的阶段。 每个阶段的输入输出契约、降级与 fallback 路径、并行化空间,以及端到端 trace 怎么设计(第2章 请求生命周期)。
  2. 给线上问题定位到具体阶段。 四大失败家族 + 延迟失败的判据、每类失败的最小可观测指标集、error budget 的量化管理(第3章 失败模式)。
  3. 把分块这件事做对。 三大策略的取舍、Contextual Chunk、重叠与 metadata 继承、parent-child 多级分块、代码/表格/对话这些特殊内容怎么切,还有真实参数的经验区间与策略变更时的迁移工程(第6章 分块)。
  4. 建一条混合召回链路。 稠密与稀疏各自的失效场景、混合搜索的融合策略、重排序把候选变成证据(第12章 稀疏检索第13章 混合搜索第14章 重排序)。
  5. 让答案可追溯。 上下文打包在 token 预算内保留证据密度、引用与 grounding 校验(第16章 上下文打包第17章 引用与溯源)。
  6. 做权限正确的企业知识库。 metadata 设计与权限过滤要在检索之前发生,而不是在生成之后补救;索引怎么增量更新(第7章 权限第8章 增量索引)。
  7. 评估与调优。 RAG 该测什么、怎么对照迭代、成本与延迟怎么压(第20章 评估第21章 成本与延迟),最后一章是完整的生产落地(第22章)。

这个专栏的讲法

先失败,后成功。 第 3 章的失败地图是本专栏的坐标系,后面每一章都能挂回去:这一章解决的是哪一类失败。

给经验区间,不给"最佳实践"。 分块参数、召回数量、rerank 的取舍——这些数字都带着适用条件,而不是一句"建议 512"。

覆盖到 Agent。 长期记忆与 GraphRAG 两章把 RAG 接到 Agent 上(第18章 长期记忆第19章 GraphRAG),这是「检索增强」向「智能体」过渡的那一段。

适合谁读

不适合:想用二十行代码搭个问答 demo 的读者——那不需要这个专栏。这里讲的是 demo 之后的那些事。

目录

开篇

第一部分:RAG 系统全景

第二部分:知识进入系统

第三部分:表示与索引

第四部分:召回、排序与上下文

第五部分:Agent Memory 与 GraphRAG

第六部分:生产化

版权声明

本专栏内容为 杨艺韬 版权所有,保留一切权利。未经书面许可,不得全文或大段转载、改编、翻译,或用于任何商业用途(含以本专栏内容训练模型、生成衍生课程或商品)。

欢迎分享本专栏的链接。引用少量内容用于评论、教学或研究时,请署名 杨艺韬 并附上原文链接。