RAG 从理论到实践:检索增强生成全景解读
RAG 解决的核心问题
大语言模型有两个与生俱来的短板:知识截止日期和幻觉(Hallucination)。RAG(Retrieval-Augmented Generation,检索增强生成)正是为解决这两个问题而生的架构范式。它的核心思想简单而强大:在模型生成回答之前,先从外部知识库中检索相关信息,将这些信息与用户问题一同送入模型,让模型基于检索到的证据进行生成。
这种”先检索、后生成”的模式带来了几个关键收益:模型不需要把全世界的知识都记住,它只需要根据”查阅”到的资料来回答问题;知识的更新不再依赖于模型的重训练或微调,只需更新外部知识库;回答具备可追溯性——每个结论都可以对应到具体的检索来源,这对于企业级应用至关重要。
在 2023 年,RAG 被视为一个独立的研究方向;到 2025-2026 年,它已经成为几乎所有 AI 应用的标配架构。任何涉及私有数据、专业领域或实时信息的 LLM 应用,几乎都离不开 RAG。
RAG 架构全景
一个标准的 RAG 系统包含两条核心流水线:
索引流水线(Indexing Pipeline)——离线执行,负责将知识库转换为可检索的格式:
- 文档加载:从各种数据源(PDF、网页、数据库、API)读取文档。
- 文本提取与清洗:去除格式噪声,提取纯文本内容。
- 文档分块(Chunking):将长文档切分为适合检索和模型处理的小段落。
- 向量化(Embedding):使用嵌入模型将每个文本块映射为高维向量。
- 索引存储:将向量存入向量数据库并建立索引(如 HNSW 图索引)。
检索-生成流水线(Retrieval-Generation Pipeline)——在线执行,处理用户的每一次查询:
- 查询处理:对用户问题做预处理(重写、扩展、分解)。
- 查询向量化:将处理后的查询转为向量。
- 向量检索:在向量数据库中查找最相似的文本块。
- 后处理:对检索结果进行过滤、重排序、去重。
- 上下文组装:将检索结果与系统提示词、用户问题组装为完整上下文。
- LLM 生成:模型基于组装的上下文生成最终回答。
分块策略详解
分块(Chunking)是 RAG 系统中最被低估却影响深远的环节。分块的质量直接决定了检索的召回率和精度:
固定大小分块(Fixed-size Chunking):按固定字符数或 token 数切分,如每 512 token 一块。优点是简单可控,缺点是经常在不该断开的地方断开——一段论述可能被从中间切为两半。
语义分块(Semantic Chunking):利用文本的语义结构进行切分,保持每个块内部的主题一致性。可以通过计算相邻句子的嵌入相似度来检测”语义边界”——当相似度显著下降时,说明话题发生了转换,此处适合切分。
递归分块(Recursive Chunking):先按大粒度(如段落)切分,如果某个块超出长度限制,再按更小粒度(如句子)递归切分。LangChain 的 RecursiveCharacterTextSplitter 就是这种策略的实现,它默认尝试用 \n\n、\n、 、''的分隔符优先级来保证在自然边界处断开。
句子感知分块(Sentence-aware Chunking):使用句子边界检测模型(如 spaCy 的 sentencizer)确保不会在句子中间截断。这对于需要精确语义匹配的任务尤为重要。
重叠窗口(Overlap):在相邻块之间保留一定比例的重叠内容。例如,512 token 的块体 + 64 token 的重叠。重叠保证了跨块边界的信息不会丢失,但增加了存储和计算开销。
实践中,”固定大小 + 适度重叠 + 语义边界优化”的组合往往是工程上的最佳起点。
嵌入模型选型对比
嵌入模型是将文本转换为向量的关键组件,其质量直接影响检索效果。以下是 2026 年初主流的嵌入模型:
OpenAI text-embedding-3 系列:text-embedding-3-small(性价比高)和 text-embedding-3-large(质量最优)。支持动态维度缩减——你可以指定输出 256 维而非默认的 3072 维,以牺牲少量精度换取显著的存储和速度提升。
BGE 系列(BAAI):BGE-M3 是开源社区的标杆,支持多语言和长文本(8192 token),最重要的是它同时生成稠密向量和稀疏向量(学得的词权重),天然支持混合检索。
Jina Embeddings:Jina AI 的 jina-embeddings-v3 支持 8192 token 的输入长度和灵活的任务适配——同一个模型通过不同的 task prompt 可以在检索、分类、聚类等任务间切换。
Cohere Embed:Cohere 的 embed-v3 系列在企业级场景中表现优异,特别是对长文档和多语言场景的支持。其压缩感知训练使得模型对输入截断有更好的鲁棒性。
选择嵌入模型时,需要在质量(MTEB 基准排名)、延迟、成本和输入长度限制之间做权衡。对于中文场景,BGE-M3 和 text-embedding-3-large 是当前最受推荐的选择。
向量搜索算法
HNSW(Hierarchical Navigable Small World):目前最主流的近似最近邻搜索算法,几乎所有生产级向量数据库(Milvus、Qdrant、Weaviate、Pinecone)都基于或借鉴了 HNSW。它构建多层图结构,上层做跳跃式粗粒度导航,下层做精细搜索,实现了对数级别的搜索复杂度。
混合搜索(Hybrid Search):稠密向量搜索擅长捕捉语义相似性,但可能在精确关键词匹配上表现不佳(如同义词、缩写)。混合搜索将稠密向量检索与稀疏检索(如 BM25)的结果进行融合——常见做法是对两个分数做加权求和或使用倒数排名融合(RRF)。实践表明,混合搜索在大多数企业场景中优于纯向量搜索。
多向量检索:不只对文档做向量化,还支持对查询做多视角向量化(ColBERT 风格),即查询的每个 token 独立地与文档的对应 token 匹配。这种 late-interaction 方法保留更细粒度的匹配信息。
高级 RAG 技术
基础 RAG 可以解决大部分简单场景,但复杂场景需要更高级的技术:
查询转换(Query Transformation):在检索之前对用户查询进行增强处理。
- HyDE(Hypothetical Document Embeddings):让 LLM 先生成一份假设性的理想回答,然后用这份回答(而非原始查询)去检索。对于简短、模糊的查询效果显著。
- 多查询检索(Multi-Query):用 LLM 从不同角度改写用户查询,生成多个查询变体,聚合所有变体的检索结果。
- 回退提示(Step-back Prompting):先让 LLM 生成一个更抽象、更基础性的”回退问题”,用回退问题的检索结果作为背景知识补充。
重排序(Re-ranking):第一阶段向量检索返回 top-100 个候选块,第二阶段使用更精准(但更慢)的模型重新排序,最终送入 LLM 的可能只有 top-5 到 top-10。Cohere 的 Rerank API 和开源跨编码器模型(如 bge-reranker)是常用的重排序方案。
自我反思与校正:让 LLM 评估检索到的上下文是否足以回答问题——如果不足,自主触发补充检索或向用户追问。这种闭环反馈机制让 RAG 从”一次性检索”进化为”迭代式检索”。
Agentic RAG
Agentic RAG 是 2025-2026 年最受关注的架构演进方向。它将 RAG 与 Agent 范式结合,赋予了检索过程自主决策能力:
自适应检索路由:Agent 判断用户问题是否需要检索。简单的闲聊和常识性问题直接用模型内部知识回答(节省检索成本),需要专业知识的问题触发检索。
工具辅助检索:Agent 不只从向量数据库中检索,还能调用 SQL 查询结构化数据库、调用 API 获取实时数据、执行代码做计算。不同的查询意图路由到不同的检索工具。
多步推理检索:复杂问题往往需要多步信息收集。Agent 先检索一部分信息,基于这些信息做初步推理,发现知识缺口,再发起针对性的二次检索——如此迭代直到信息充分。
GraphRAG:知识图谱 + 向量搜索
GraphRAG 是 Microsoft 提出的将知识图谱与 RAG 结合的方案,特别适用于需要理解实体间关系的全局性问题(如”这个主题的主要趋势是什么”而非”这段文本说了什么”)。
GraphRAG 的工作流程是:对文档集提取实体和关系,构建知识图谱;将图谱中的社区做层次聚类,为每个社区生成摘要;对于全局性问题,用图谱社区摘要而非文档块作为检索单元。结果是对宏观问题的回答质量有显著提升,但代价是更长的索引时间和更高的成本。
RAG 评估体系
RAGAS(Retrieval Augmented Generation Assessment)是目前最广泛使用的 RAG 评估框架,它定义了四个核心指标:
忠实性(Faithfulness):生成回答中的每一个声明是否都能在检索到的上下文中找到支撑?通过将回答分解为原子声明,逐个检验其在上下文中的可验证性。
答案相关性(Answer Relevancy):回答与原始问题之间的关联程度。通过让 LLM 根据回答反推问题,然后检验反推问题与原始问题的语义相似度。
上下文精度(Context Precision):检索到的上下文中”真正相关的条目”是否被排在了前面?这个指标反映了检索排序的质量。
上下文召回率(Context Recall):回答问题所需的关键信息是否都在检索到的上下文中?是否存在遗漏?
此外,端到端的评估还需要人工评估和业务指标(如用户满意度、任务完成率)的支撑。
生产环境 RAG 的关键实践
延迟优化:RAG 的端到端延迟 = 查询向量化 + 向量检索 + 重排序 + LLM 生成。优化策略包括:使用更小但足够好的嵌入模型加速查询编码;配置向量索引的 ef_search 参数以在速度和精度间平衡;对高频查询做结果缓存;使用流式输出让用户更早看到回答。
缓存策略:对查询嵌入、检索结果、LLM 生成分别做缓存。语义缓存(对语义相似但不完全相同的查询命中缓存)比精确匹配缓存有更高的命中率。
成本管理:RAG 的成本主要来自三方面——嵌入 API 调用(索引阶段)、向量数据库存储和 LLM 推理(查询阶段)。优化策略包括:使用动态维度降低嵌入成本;对不常用的冷数据使用更便宜的存储层级;对查询做路由,简单问题用更便宜的小模型。
监控与迭代:生产 RAG 系统需要持续监控检索质量(召回率、精度分布)和生成质量(用户反馈、回答拒答率、幻觉率)。建立反馈闭环——用户点踩的回答自动进入分析队列,驱动检索策略和提示词的迭代优化。
RAG 从最初的”向量检索 + LLM 生成”的简单范式,已经发展为包含分块策略、混合检索、多阶段重排序、Agent 决策和 Graph 增强的复杂系统工程。但它最迷人的地方在于,即使是最简单的 RAG 实现,也往往能带来立竿见影的效果提升——这正是它获得如此广泛采用的底层原因。