检索增强生成
概述
检索增强生成(Retrieval-Augmented Generation, RAG)是一种通过检索外部知识库中的相关信息并注入提示,来弥补 LLM 静态训练知识不足的技术。适用于知识库超过上下文窗口容量(约 20 万 token)的场景。
关键内容
标准 RAG 流水线
预处理阶段(离线): 1. 将知识库(文档语料)切分为若干百 token 的 Chunk 2. 用嵌入模型(Embedding Model)将 Chunk 转换为向量 3. 向量存入向量数据库,支持语义相似度检索
运行时阶段(在线): 4. 用户查询 → 向量化 5. 向量数据库按语义相似度召回 Top-K 个 Chunk 6. 将 Top-K Chunk 追加到提示中,模型生成回答
BM25 混合检索
纯语义嵌入擅长捕捉语义关系,但会遗漏精确词汇匹配。BM25(Best Matching 25)作为补充,通过词频-逆文档频率(TF-IDF)进行词汇精确匹配,对含有专有标识符或技术术语的查询尤为有效。
示例:查询 "Error code TS-999"——嵌入模型可能检索到关于错误码的泛化内容,而 BM25 能精确定位包含 "TS-999" 的文档。
标准混合 RAG 流程: 1. 切 Chunk → 生成 TF-IDF 编码 + 语义嵌入 2. BM25 找到词汇精确匹配的 Top Chunks 3. 嵌入找到语义相似的 Top Chunks 4. Rank Fusion(倒数排名融合等方式)合并去重 5. Top-K Chunk 注入提示生成回答
传统 RAG 的核心缺陷:上下文破坏
切块使每个 Chunk 失去原文档的上下文信息。经典案例:
原文 Chunk:
"The company's revenue grew by 3% over the previous quarter."
缺失信息:哪家公司?哪个季度?
→ 语义检索无法知道此 Chunk 是否对"ACME Corp Q2 2023 营收"有关
这一问题催生了 情境化检索 技术。
适用边界
- 知识库 < 20 万 token(约 500 页):可直接将全部内容放入提示(配合提示缓存大幅降低成本),无需 RAG
- 知识库 > 20 万 token:RAG 是可扩展的标准方案
- 动态频繁更新的内容:RAG 配合增量索引优于全量提示
与即时上下文检索的关系
| RAG | 即时上下文检索(JIT) | |
|---|---|---|
| 检索时机 | 查询时预处理召回 | Agent 运行时工具按需读取 |
| 索引方式 | 离线预建向量/BM25 索引 | 轻量标识符(路径、URL) |
| 适合场景 | 静态知识库、问答系统 | 动态代码库、实时数据 |
来源
- raw/articles/ai-engineering/anthropic-engineering/Contextual Retrieval in AI Systems.md
- 02_contextual_retrieval.md — 检索技术全栈解析与性能实验
相关
- 情境化检索 — related_to(解决传统 RAG 上下文破坏问题的增强方案)
- 检索重排序 — related_to(RAG 召回后的精排步骤)
- Context-Engineering — part_of(RAG 是上下文工程的主要信息注入手段)
- 即时上下文检索 — compares_to(Agent 场景下的 JIT 替代方案)
- 上下文腐烂 — related_to(RAG 是应对模型静态知识不足的手段,但上下文腐烂同样影响 RAG 注入的 Chunk 数量上限)