2023年11月12日

检索增强总览

检索增强生成(Retrieval-Augmented Generation, RAG)是指在 LLM 生成回答之前,先从外部知识库中检索相关文档片段,将其作为上下文注入提示词,从而提升回答的准确性、时效性和可追溯性。

知识库大模型检索增强ragoverview

检索增强生成(RAG)总览

先说结论

检索增强生成(Retrieval-Augmented Generation, RAG)是指在 LLM 生成回答之前,先从外部知识库中检索相关文档片段,将其作为上下文注入提示词,从而提升回答的准确性、时效性和可追溯性。

QUESTION 面试高频:RAG 的核心价值是什么? RAG 的核心价值是用外部知识库弥补 LLM 的三大缺陷:知识时效性不足(训练数据有截止日期)、事实可靠性差(容易产生幻觉)、领域知识薄弱(通用训练难以覆盖垂直领域)。相比微调,RAG 的优势在于无需重新训练模型知识可实时更新来源可追溯

RAG vs 微调 vs 预训练

维度 预训练 微调(SFT/RLHF) RAG
知识更新 需重新训练 需重新微调 实时更新知识库
成本 极高(百万级) 中等(万级) 低(千级)
知识可追溯
幻觉风险
适用场景 基础能力构建 行为/风格定制 知识密集型问答
知识注入方式 模型参数 模型参数 上下文窗口

QUESTION 面试高频:RAG 和微调如何选择? 不是二选一,而是互补。微调改变模型的"行为模式"(如输出格式、推理风格),RAG 提供"事实知识"。最佳实践是:先 RAG 解决知识问题,再微调优化行为模式。二者结合(RAG + FT)效果优于单独使用。

RAG 管线核心组件

离线索引阶段:
文档 → 加载 → 分割(Chunk) → 嵌入(Embed) → 存入向量数据库

在线查询阶段:
用户查询 → 查询嵌入 → 向量检索(Top-K) → 重排序(Rerank)
                                                    ↓
              LLM ← 拼接上下文 + 查询 ← Top-N 结果
                ↓
            生成回答
组件 功能 常见选择
文档加载器 从数据源提取原始内容 PDF Parser, Web Scraper, DB Connector
文本分割器 将文档拆分为适合检索的片段 Recursive, Semantic, Fixed-size
嵌入模型 将文本转换为向量表示 OpenAI text-embedding-3, BGE, Cohere
向量数据库 存储和检索向量 Pinecone, Weaviate, Milvus, Qdrant, Chroma
检索器 根据查询检索相关文档 Dense, Sparse, Hybrid
重排序器 对检索结果精排 Cross-Encoder, Cohere Rerank, ColBERT
生成器 基于检索上下文生成回答 GPT-4o, Claude, Qwen 等 LLM

RAG 演进阶段

阶段 名称 特点 关键技术
Naive RAG 基础 RAG 简单的索引-检索-生成管线 Dense Retrieval + LLM
Advanced RAG 高级 RAG 针对特定瓶颈优化检索和生成 Hybrid Search, Reranking, Query Rewriting
Modular RAG 模块化 RAG 各组件可独立替换和组合 路由、自适应检索、多路召回
Agentic RAG 智能体 RAG Agent 自主决定检索策略 Self-RAG, CRAG, 多工具协同

QUESTION 面试高频:Naive RAG 的主要问题是什么? Naive RAG 存在三大问题:检索质量差(召回不全、排序不准)、生成质量差(上下文过长导致信息过载、幻觉)、全链路缺乏反馈(没有评估和纠错机制)。Advanced RAG 通过 Hybrid Search、Reranking、Query Rewriting 等手段逐步解决这些问题。

设计时真正要权衡什么

  1. Chunk 大小:小块(128-256 Token)检索精确但上下文不足;大块(512-1024 Token)上下文丰富但可能引入噪声。通常 512 Token + 50-200 Token 重叠是好的起点。
  2. 检索数量(Top-K):K 值大覆盖广但噪声多;K 值小精准但可能遗漏。经验值:先检索 Top-20,重排后取 Top-5。
  3. 嵌入模型选择:通用嵌入(OpenAI、Cohere)开箱即用但领域适配差;微调嵌入领域适配好但需要额外训练数据和维护成本。
  4. 向量库选择:托管服务(Pinecone)运维省心但成本高;自建(Milvus)灵活但运维复杂。
  5. 重排序开销:Cross-Encoder 重排效果最好但每对 (query, doc) 都要过一遍 Transformer,延迟和成本显著。需要权衡重排文档数量。

如果要对外讲,可以怎么概括

"RAG 的本质是用检索来弥补 LLM 知识的时效性和准确性不足。基础 RAG 的管线是'加载-分割-嵌入-检索-重排-生成',但决定 RAG 系统质量的不是某一环节的极致优化,而是全链路的协调设计。在 Chunk 策略上,Recursive Character Splitting 是最稳妥的起点,512 Token + 100 Token 重叠适用于大多数场景;在检索策略上,Hybrid Search(Dense + Sparse)应作为标配;而重排序是性价比最高的单点优化。高级技巧方面,我特别关注 GraphRAG 解决全局性问题、Contextual Retrieval 解决 Chunk 上下文丢失、以及 Self-RAG 让模型自主决定是否检索。在实际项目中,我的建议是先搭基线、量化评估、再针对性优化。"

最后记几条

  1. RAG 与微调互补而非替代:微调改行为,RAG 补知识,二者结合效果最佳。
  2. 重排序是 ROI 最高的优化:比换嵌入模型、调 Chunk 策略、换向量库的提升都明显。
  3. Hybrid Search 应该是默认选择:Dense + Sparse 的融合检索在绝大多数场景优于单一策略。
  4. RAG 演进路线:Naive → Advanced → Modular → Agentic,每一阶段解决上一阶段的核心瓶颈。
  5. 评估比优化更重要:没有量化评估的 RAG 优化是盲人摸象。先建立评估管线,再做任何优化。

参考资料

  • Lewis, P. et al. "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks" (NeurIPS 2020)
  • Gao, Y. et al. "Retrieval-Augmented Generation for Large Language Models: A Survey" (2024)
  • Asai, A. et al. "Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection" (ICLR 2024)
  • Edge, D. et al. "From Local to Global: A Graph RAG Approach to Query-Focused Summarization" (微软)
  • Anthropic Blog: "Contextual Retrieval" (2024)

延伸阅读