RAG 基本流水线:索引—检索—增强—生成

01-RAG基础与架构 入门 约 15 分钟 #流水线#架构#离线索引#在线检索 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。

一句话定义

RAG 流水线分两个阶段:离线索引(解析文档 → 分块 → 嵌入 → 存入向量库)与在线服务(查询处理 → 检索 → 重排 → 上下文组装 → LLM 生成 → 引用),每一环都有独立的失败模式与调优手段。

为什么重要

排障与调优都要求把链路拆开看:用户抱怨"答错了",可能是索引阶段分块切碎了证据,也可能是检索阶段没召回、重排没救回来、或者生成阶段模型无视上下文。不理解流水线分段,调优就只能在黑盒里碰运气(kp-017 的方法论依赖这条分段)。

前置知识

kp-001。

核心概念

离线索引阶段:

  1. 文档解析(parse):把 PDF/HTML/Word/邮件变成干净文本(表格与版面是大坑,见 kp-005)。
  2. 分块(chunking):把长文档切成适合检索的片段(kp-004)。
  3. 嵌入(embedding):每块文本编码为向量(kp-007)。
  4. 入库(indexing):向量 + 原文 + 元数据写入向量库/搜索引擎。

在线服务阶段:

  1. 查询处理:改写、扩展、分解用户问题(kp-011)。
  2. 检索(retrieval):向量检索 ± 关键词检索取 top-k 候选(kp-009、kp-010)。
  3. 重排(rerank):用更重的模型对候选精排,选出真正相关的少数(kp-013)。
  4. 上下文组装(augmentation):模板拼装——系统指令 + 历史对话 + 检索片段 + 问题(kp-014)。
  5. 生成(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-004/005/006:索引阶段三件套。
  • kp-007~013:检索质量链。
  • kp-014~016:生成质量链与评测。

自测题

  1. 流水线哪几步在离线完成?为什么这样划分?

答:解析、分块、嵌入、入库;它们是重计算且只在数据变更时发生,分离后在线只剩轻量检索与一次生成,延迟成本可控。

  1. 用户反馈"答案引用了错误文档",最可能坏在哪几环?

答:检索召回错(嵌入/查询问题)、重排没把真相关排上来、或生成阶段模型张冠李戴;按 kp-016 的分段指标逐环定位。

  1. 为什么 chunk 需要稳定 ID 与元数据?

答:增量更新按 ID 替换、引用与权限过滤靠元数据;没有它们,更新与合规都做不了。

延伸阅读

  • Lewis 等 RAG 论文(2020)§2。
  • LlamaIndex 文档 "Understanding RAG"。
  • Gao 等 RAG 综述(2023)§2 流水线分类(Naive/Advanced/Modular)。