RAG(检索增强生成)
一句话定义:让 LLM 在回答问题前,先去外部知识库里查找相关资料,再基于查到的内容生成答案——就像允许考生带着参考书考试。
为什么需要它?
LLM 的知识被冻结在训练截止日期里。你问它”今天的股价”或”公司内部的报销流程”,它要么一无所知,要么编造一个听起来合理的答案(幻觉)。
更根本的问题:把所有知识都烧进模型参数里,代价极高——每次知识更新都要重新训练;而且模型记住的是”压缩后的统计规律”,不是可溯源、可审计的原始事实。
核心直觉
想象一个律师备考过程和出庭应答的区别:
Fine-tuning 像是把所有案例背进大脑,上庭时凭记忆答。问题是记错了无从发现,且记忆无法实时更新。
RAG 像是上庭时带着案例库,先在库里搜索相关判例,再基于检索到的真实文本给出论点。答案可溯源,知识库随时可更新,无需重新”培训律师”。
它是怎么工作的?
核心流程分两阶段:离线索引 + 在线检索生成。
流程图
flowchart TD
subgraph 离线阶段["📦 离线索引(一次性)"]
D[原始文档] --> C[文本切块 Chunking]
C --> E[Embedding 模型]
E --> V[(向量数据库)]
end
subgraph 在线阶段["⚡ 在线检索生成(每次查询)"]
Q[用户问题] --> QE[Embedding 模型]
QE --> S{相似度检索}
V --> S
S --> TOP[Top-K 相关片段]
TOP --> P[拼装 Prompt]
Q --> P
P --> LLM[LLM 生成]
LLM --> A[最终答案]
end
style 离线阶段 fill:#f0f4ff,stroke:#4a6cf7
style 在线阶段 fill:#f0fff4,stroke:#2ecc71
关键步骤解析:
① 切块(Chunking):文档不能整个塞给检索器,需要切成合适大小的片段(通常 256~512 tokens)。切得太小,上下文丢失;切得太大,噪音多、检索精度低。
② 向量化(Embedding):用 Embedding 模型将文本转换为高维向量。语义相近的文本,向量在空间中距离也近。这是语义检索(而非关键词匹配)的基础。
③ 相似度检索:用户问题同样向量化,在向量数据库中找最近的 K 个片段。常用算法:余弦相似度、HNSW 近似最近邻。
④ 增强生成:将检索到的片段拼入 Prompt,通常格式如下:
基于以下参考资料回答问题:
[检索到的内容]
问题:{用户问题}
请仅基于上述资料作答,如无相关信息请说明。
关键组件 / 核心要素
| 组件 | 作用 | 常见选型 |
|---|---|---|
| 文档切块器 | 将原始文档分割为可检索的片段 | LangChain TextSplitter、自定义按段落切 |
| Embedding 模型 | 将文本映射为语义向量 | text-embedding-3-small、BGE、E5 |
| 向量数据库 | 存储向量,支持高效相似度检索 | Pinecone、Chroma、pgvector、Weaviate |
| 检索器 | 执行查询,返回 Top-K 结果 | 稠密检索、稀疏检索(BM25)、混合 |
| LLM | 基于检索内容生成最终答案 | GPT-4、Claude、Llama |
| Reranker(可选) | 对检索结果二次排序,提升精度 | Cohere Rerank、BGE Reranker |
与相关概念的关系
- vs Fine-tuning:Fine-tuning 改变模型参数(内化知识),RAG 不改变参数(外挂知识)。知识频繁更新、需要溯源时选 RAG;需要模型掌握特定风格或推理方式时选 Fine-tuning。两者可以结合。
- vs 长上下文(Long Context):直接把所有文档塞进上下文也能实现类似效果,但代价是推理成本随文档量线性增长,且模型对超长上下文中间部分的关注度下降(“lost in the middle”问题)。RAG 通过检索只取相关片段,更高效。
- 依赖于 向量数据库:语义检索的核心基础设施。
- 依赖于 Embedding 模型:Embedding 质量直接决定检索精度上限。
- 被 AI Agent 使用:Agent 中的记忆模块通常基于 RAG 实现。
典型应用场景
- 企业内部知识问答 — 公司文档、报销政策、技术规范频繁更新,用 RAG 可以随时同步知识库而无需重训模型,且每个答案可追溯到原始文档。
- 客服机器人 — 产品手册、FAQ、退换货政策等结构化知识,RAG 能保证答案准确且来源可审计,避免 LLM 幻觉导致的客诉风险。
- 学术/法律文献分析 — 在海量论文或判例中检索相关内容,辅助研究员或律师快速定位证据,LLM 负责综合分析而非凭空生成。
常见误解与陷阱
-
❌ 误以为:RAG 可以解决所有幻觉问题 ✅ 实际上:RAG 只能减少”知识缺失”导致的幻觉。如果检索到的内容本身有误,或 Prompt 设计不当导致 LLM 忽视检索结果,幻觉依然会发生。
-
❌ 误以为:切块越细,检索越准 ✅ 实际上:过细的切块会丢失上下文,导致检索到的片段语义不完整。需要根据文档类型调整切块策略(如代码按函数切,文章按段落切)。
-
❌ 误以为:向量相似度 = 语义相关性 ✅ 实际上:向量检索基于 Embedding 空间的距离,对”反义”处理较差(“不支持 X 功能”可能和”支持 X 功能”距离很近)。关键场景需结合关键词检索(混合检索)。
延伸阅读
- 想深入理解原理 → 研究 FAISS 索引结构、HNSW 算法、Dense Passage Retrieval (DPR) 原论文
- 想看工程实践 → LangChain / LlamaIndex 的 RAG 实现、RAGAs 评估框架
- 想了解前沿进展 → GraphRAG(微软)、Self-RAG、Corrective RAG(CRAG)
关联概念
前置知识:Embedding 向量 | Transformer | 向量数据库 同族概念:Fine-tuning | Prompt Engineering | 长上下文模型 应用场景:AI Agent | 企业知识管理 | 智能客服