RAG 基本流水线:索引—检索—增强—生成
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。
一句话定义
RAG 流水线分两个阶段:离线索引(解析文档 → 分块 → 嵌入 → 存入向量库)与在线服务(查询处理 → 检索 → 重排 → 上下文组装 → LLM 生成 → 引用),每一环都有独立的失败模式与调优手段。
为什么重要
排障与调优都要求把链路拆开看:用户抱怨"答错了",可能是索引阶段分块切碎了证据,也可能是检索阶段没召回、重排没救回来、或者生成阶段模型无视上下文。不理解流水线分段,调优就只能在黑盒里碰运气(kp-017 的方法论依赖这条分段)。
前置知识
核心概念
离线索引阶段:
- 文档解析(parse):把 PDF/HTML/Word/邮件变成干净文本(表格与版面是大坑,见 kp-005)。
- 分块(chunking):把长文档切成适合检索的片段(kp-004)。
- 嵌入(embedding):每块文本编码为向量(kp-007)。
- 入库(indexing):向量 + 原文 + 元数据写入向量库/搜索引擎。
在线服务阶段:
- 查询处理:改写、扩展、分解用户问题(kp-011)。
- 检索(retrieval):向量检索 ± 关键词检索取 top-k 候选(kp-009、kp-010)。
- 重排(rerank):用更重的模型对候选精排,选出真正相关的少数(kp-013)。
- 上下文组装(augmentation):模板拼装——系统指令 + 历史对话 + 检索片段 + 问题(kp-014)。
- 生成(generation):LLM 基于上下文作答,附引用与拒答逻辑(kp-015)。
原理与机制
离线与在线的职责分离是架构第一原则:重计算(解析、嵌入、索引)放在数据变更时批量做,在线只做轻量检索与一次生成调用——延迟与成本由此可控。代价是新鲜度延迟:文档更新到可被检索之间有时间差,需要增量更新机制(kp-029)。
数据流与元数据一致性:一块 chunk 要能一路携带"来自哪个文档、哪个位置、什么权限"的元数据(kp-006),否则引用、权限过滤、去重都无法实现。工程上常给每个 chunk 一个稳定 ID(文档 ID + 块序号 + 内容哈希),更新时按 ID 替换。
失败模式分段清单(排障时的检查表):解析丢内容 → 分块切碎证据 → 嵌入不匹配领域 → 检索召回不足 → 重排失灵 → 上下文超限截断关键片段 → prompt 指令不清 → 模型不忠实。每一环有对应的观测指标(kp-016 的检索指标 vs 生成指标)。
图示
离线: 文档 ─► 解析 ─► 分块 ─► 嵌入 ─► 向量库(+元数据)
在线: 问题 ─► 查询变换 ─► 混合检索 ─► 重排 ─► 上下文组装 ─► LLM ─► 答案+引用
(kp-011) (kp-010) (kp-013) (kp-014) (kp-015)
直观类比
图书馆回答咨询:采购编目(解析分块)、做卡片索引(嵌入入库)是闭馆后的后台工作;读者提问(查询)、翻卡片(检索)、挑出最相关的几本摊在桌上(重排组装)、再口述答案并报书名页码(生成引用)是前台服务。后台做得烂,前台再机灵也白搭。
实例或案例
最小可行链路(伪代码级):文档集 → split(text, 512 tokens, overlap 64) → embed(chunk) → vector_db.upsert(id, vec, text, meta);查询时 top-k = vector_db.search(embed(q), k=20) → rerank(q, top-k) → top-5 → prompt 模板 → LLM → 输出附 source: [chunk.meta.source]。90% 的入门实现失败在分块参数与"没有重排"这两处。
常见误区
- 误区一:"top-k 越大越好"。k 太大引入噪音、撑爆上下文、激活"lost in the middle"效应(kp-014);正确姿势是小 k + 好重排。
- 误区二:"上线即结束"。文档会变、问题分布会漂移,没有评测与监控的 RAG 会在数周内静默劣化(kp-016、kp-029)。
- 误区三:"所有文档一种切法"。合同、FAQ、表格、对话记录的最优分块策略完全不同(kp-004)。
与其他知识点的关系
自测题
- 流水线哪几步在离线完成?为什么这样划分?
答:解析、分块、嵌入、入库;它们是重计算且只在数据变更时发生,分离后在线只剩轻量检索与一次生成,延迟成本可控。
- 用户反馈"答案引用了错误文档",最可能坏在哪几环?
答:检索召回错(嵌入/查询问题)、重排没把真相关排上来、或生成阶段模型张冠李戴;按 kp-016 的分段指标逐环定位。
- 为什么 chunk 需要稳定 ID 与元数据?
答:增量更新按 ID 替换、引用与权限过滤靠元数据;没有它们,更新与合规都做不了。
延伸阅读
- Lewis 等 RAG 论文(2020)§2。
- LlamaIndex 文档 "Understanding RAG"。
- Gao 等 RAG 综述(2023)§2 流水线分类(Naive/Advanced/Modular)。