RAG 两年三代演进:为什么多数场景 Advanced RAG 才是性价比之选
AIAI Summary (BLUF)
本文系统梳理了RAG技术三代演进:Naive RAG基础架构、Advanced RAG的检索优化(查询重写、HyDE、Reranker、混合检索、上下文压缩),以及Agentic RAG的智能体化(规划、工具调用、自我纠错)。通过对比和代码示例,帮助读者理解各代特点及2026年最新进展。
核心洞察
这篇文章最有意思的点,是它把 RAGRetrieval-Augmented Generation - an AI framework that combines information retrieval with language generation to produce more accurate and contextually relevant responses. 的演进速度说清楚了。两年时间,从"检索+拼接"走到 Agentic RAG一种增强的检索增强生成技术,使 AI 智能体能够主动、动态地检索外部知识以完成任务。,这个迭代节奏在工程史上不太常见。不过说实话,我看到不少团队直接把 Agentic 架构堆上生产,结果延迟翻了三倍,收益却没体现出来。你读完这篇可以冷静评估一下,自己到底在哪个阶段。
核心结论
RAG 技术两年内完成三代演进:Naive RAG基础的RAG框架,包含索引、检索、生成三个核心步骤,但面临检索精度低、生成幻觉等挑战。(2023)→ Advanced RAG在Naive RAG基础上引入检索前优化(如数据粒度增强、索引结构优化)和检索后处理(如重排序、提示压缩)的改进框架。(2024)→ Agentic RAG(2025-2026),核心变化是从“单次静态检索”走向“动态多轮检索 + 工具调用 + 自我纠错”。
Naive RAG 的四个核心缺陷是:固定分块破坏语义连贯性、向量相似≠实际相关、Top-K 冗余消耗上下文窗口、无跨文档推理能力,因此无法处理多跳问题。
Advanced RAG 的关键优化有明确数据收益:HyDEA technique that generates hypothetical answers to improve query matching in retrieval systems. 在技术文档检索场景可将召回率提升 15-25%;Anthropic Contextual Retrieval 在分块前用 LLM 补上下文,可将召回失败率降低约 49%,配合 Reranker重排序,对初步检索结果进行二次审阅,结合上下文提高最相关内容权重。 可降低 67%。
Agentic RAG 的核心能力包括:Planner 将复杂问题拆解为子问题、按需调用向量库/BM25/Web/数据库等多工具、通过 Self-RAG在 RAG 流程中设置四个自省检查点(是否需要检索、文档相关、答案有据、答案有用),动态调整策略以减少幻觉。 动态决定是否检索并验证答案是否有文档支撑,适用于多跳推理和多文档复杂分析。
选型需要匹配场景复杂度:简单问答用 Advanced RAG 已足够,复杂多文档分析才需要 Agentic RAG + GraphRAGRAG方法的高级变体,引入图结构数据,将信息表示为实体和关系的互联网络,以提高检索的完整性和准确性。;但直接堆 Agentic 架构可能导致推理延迟增加约 3 倍,收益不一定体现。建议从 Reranker 开始逐步升级,再引入 HyDE、混合检索,最后再上 Agentic 能力。
RAG 2026 全面升级:从 Naive RAG 到 Agentic RAG
摘要:RAG 技术在短短两年内经历了三代演进,从最初简单的"检索+生成"拼接,到模块化优化的 Advanced RAG,再到如今具备多跳推理、工具调用和自我纠错能力的 Agentic RAG。这篇文章把三代架构的核心差异、关键技术节点和 2026 年的最新落地实践完整梳理了一遍。
一、为什么 RAG 还需要"升级"
2023 年 ChatGPT 爆火之后,RAG 成了企业落地大模型最主流的工程方案。但随着应用规模越来越大,场景越来越复杂,早期 Naive RAG 的短板一个个暴露出来:
- 检索召回率低,文档里藏着答案也搜不到
- 单次检索处理不了多跳问题,比如"A 的上级是 B,B 的职责是什么"
- LLM 对检索内容照单全收,幻觉率一直压不下来
- 感知不到上下文意图,换个问法检索结果就完全不同
这些问题倒逼着 RAG 往第二、第三代走。我们挨个看。
二、第一代:Naive RAG(2023 年主流)
架构简介
Naive RAG 是最基础的实现,流程简单到一句话就能说完:
用户 Query → 向量化 → 向量库检索 Top-K → 拼接 Prompt → LLM 生成答案
技术栈(典型配置)
| 组件 | 常用方案 |
|---|---|
| 文档解析 | LangChain DocumentLoader |
| 分块策略 | RecursiveCharacterTextSplitter(512 tokens) |
| Embedding | text-embedding-ada-002 / bge-large-zh |
| 向量库 | FAISS / Chroma |
| 生成 | GPT-3.5-turbo / GPT-4 |
核心缺陷
1. 固定分块破坏语义连贯性
按字符数硬切文档,会把一段完整的论述拦腰截断。检索到的 chunk 往往缺头少尾,模型靠猜补上下文。
2. 语义检索的"最后一公里"问题
向量相似度高和实际相关是两码事。"苹果手机"和"水果商店"在向量空间里可能离得很近,语义上却八竿子打不着。
3. Context Window 浪费
Top-K 召回一堆冗余文档全塞进 Prompt,Token 烧得快,模型注意力也被稀释,答案质量反而下降。
4. 无推理能力
Naive RAG 只会回答单跳问题。遇到"请对比 A 公司和 B 公司的 Q4 财报差异"这种需要跨文档推理的问题,直接束手无策。
三、第二代:Advanced RAG(2024 年成熟)
Advanced RAG 是对 Naive RAG 的系统性优化,在检索前(Pre-Retrieval)、检索中(Retrieval)和检索后(Post-Retrieval)三个阶段分别引入了增强手段。
架构概览
┌─────────────────────────────────────────────────────────┐
│ Advanced RAG 流程 │
│ │
│ Query → [Pre-Retrieval] → 向量库 → [Post-Retrieval] │
│ ↓ ↓ │
│ 查询重写/扩展 Reranker精排 │
│ 假设文档生成 上下文压缩 │
│ 子问题分解 来源验证 │
└─────────────────────────────────────────────────────────┘
关键技术详解
1. 查询重写(Query Rewriting)
用户的问题往往含糊,直接用原话去检索效果很差。用 LLM 把模糊问题转化成更精确的检索语句:
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainFilter
# 查询重写示例
rewrite_prompt = """
你是一个专业的搜索查询优化助手。
将用户问题重写为更利于向量检索的形式,输出 3 个不同角度的查询。
用户问题:{question}
重写后的查询(每行一个):
"""
2. 假设文档嵌入(HyDE)
思路很有意思:先让 LLM 生成一个"假设答案",再用假设答案去检索真实文档。假设答案和真实文档在语义空间里通常比原始 Query 挨得更近。
# HyDE 实现示意
hypothetical_answer = llm.generate(f"请回答:{query}(即使不确定也要尽量回答)")
retrieved_docs = vector_store.similarity_search(hypothetical_answer)
在技术文档检索场景下,这个办法能把召回率平均拉高 15-25%。
3. Reranker 精排
向量检索只是粗筛,精细打分还得靠 Cross-Encoder。这类模型把 Query 和文档拼在一起过一遍深度网络,打分比向量余弦相似度靠谱得多。
from FlagEmbedding import FlagReranker
reranker = FlagReranker('BAAI/bge-reranker-v2-m3', use_fp16=True)
scores = reranker.compute_score([[query, doc] for doc in retrieved_docs])
ranked_docs = sorted(zip(retrieved_docs, scores), key=lambda x: x[1], reverse=True)
4. 混合检索(Hybrid Search)
向量检索擅长抓语义,BM25 擅长抓精确关键词,两者互补。双路召回后,用 Reciprocal Rank Fusion 把排名融合起来:
from langchain.retrievers import BM25Retriever, EnsembleRetriever
bm25_retriever = BM25Retriever.from_documents(docs)
faiss_retriever = vectorstore.as_retriever(search_kwargs={"k": 10})
ensemble_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, faiss_retriever],
weights=[0.4, 0.6] # BM25:向量 = 4:6
)
5. 上下文压缩(Contextual Compression)
用 LLM 从检索结果里再捞一遍,只保留和问题最相关的句子,Prompt 长度能压下来一大截:
from langchain.retrievers.document_compressors import LLMChainExtractor
compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=retriever
)
Advanced RAG 的局限
Advanced RAG 解决了大部分基础问题,但还有两个硬伤:
- 线性单轮检索:检索流程再优化,本质上还是只做一次,多步推理的问题依然没解
- 无自我纠错能力:模型生成错误答案时,系统完全感知不到,不会回头重新检索
四、第三代:Agentic RAG(2025-2026 年主流)
Agentic RAG 把 RAG 和 AI Agent 技术揉在一起,核心理念就一句话:让 LLM 自己决定何时检索、检索什么、怎么验证结果。
架构对比
| 特性 | Naive RAG | Advanced RAG | Agentic RAG |
|---|---|---|---|
| 检索轮次 | 1 次 | 1 次 | 动态多轮 |
| 查询规划 | 无 | 部分 | 完整 |
| 工具调用 | 无 | 无 | 多工具 |
| 自我纠错 | 无 | 无 | 有 |
| 多跳推理 | 无 | 有限 | 有 |
| 适合场景 | 简单问答 | 中等复杂度 | 复杂推理/多文档 |
核心组件
1. 规划器(Planner)
把复杂问题打散成子任务序列。这一步决定了系统的上限,拆得好不好直接关系到最终答案的质量:
planning_prompt = """
你是一个信息检索规划专家。
给定用户问题,将其分解为需要分别检索的子问题。
用户问题:{question}
分析:
1. 这个问题需要哪些独立的信息片段?
2. 各信息片段之间的依赖关系是什么?
3. 最优检索顺序是什么?
输出 JSON 格式的子问题列表:
"""
2. 工具调用层(Tool Use)
Agentic RAG 的工具箱不再局限于向量库,按需组合:
tools = [
Tool(name="vector_search", func=vector_retriever.invoke,
description="语义向量检索,适合找概念相关文档"),
Tool(name="keyword_search", func=bm25_retriever.invoke,
description="关键词检索,适合找精确名词/代码/版本号"),
Tool(name="web_search", func=tavily_search.invoke,
description="实时网络搜索,获取最新信息"),
Tool(name="sql_query", func=db_chain.invoke,
description="结构化数据库查询,获取精确数值"),
Tool(name="calculator", func=calculator.invoke,
description="数学计算工具"),
]
3. 自我反思机制(Self-RAG)
Self-RAG 是 2024 年提出的框架,让 LLM 在生成过程中动态判断每一步是否需要检索:
生成 Token → 预测 [Retrieval] Token → 决定是否检索
↓ ↓
如需检索 → 检索相关文档 → 评分 [Relevant] → 继续生成
↓
最终输出 → 预测 [Supported] Token → 验证答案是否有文档支持
几个特殊 Token 是关键:
[Retrieval]/[No Retrieval]:这一步要不要检索[Relevant]/[Irrelevant]:检索回来的东西相关不相关[Fully supported]/[Partially supported]/[No support]:答案有多少文档支撑
4. 基于 LangGraph 的 Agentic RAG 实现
LangGraph 把整个流程建模成一个状态图,每个节点执行一个动作,边决定状态流转:
from langgraph.graph import StateGraph, END
from typing import TypedDict, List
class AgentState(TypedDict):
question: str
sub_questions: List[str]
retrieved_docs: List[str]
intermediate_answers: List[str]
final_answer: str
iterations: int
def plan_node(state: AgentState):
"""分解问题为子问题"""
sub_questions = planner.invoke(state["question"])
return {"sub_questions": sub_questions}
def retrieve_node(state: AgentState):
"""对每个子问题并行检索"""
docs = []
for sq in state["sub_questions"]:
tool = router.select_tool(sq) # 动态选择检索工具
docs.extend(tool.invoke(sq))
return {"retrieved_docs": docs}
def grade_node(state: AgentState):
"""评估检索质量,决定是否重新检索"""
quality_score = grader.evaluate(state["question"], state["retrieved_docs"])
if quality_score < 0.7 and state["iterations"] < 3:
return {"iterations": state["iterations"] + 1}
return state
def generate_node(state: AgentState):
"""基于检索结果生成最终答案"""
answer = generator.invoke({
"question": state["question"],
"context": state["retrieved_docs"]
})
return {"final_answer": answer}
def hallucination_check(state: AgentState):
"""验证答案是否有文档支撑"""
supported = hallucination_grader.check(
state["final_answer"],
state["retrieved_docs"]
)
return "useful" if supported else "re_generate"
# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("plan", plan_node)
workflow.add_node("retrieve", retrieve_node)
workflow.add_node("grade", grade_node)
workflow.add_node("generate", generate_node)
workflow.set_entry_point("plan")
workflow.add_edge("plan", "retrieve")
workflow.add_edge("retrieve", "grade")
workflow.add_conditional_edges("grade", hallucination_check,
{"useful": END, "re_generate": "retrieve"})
app = workflow.compile()
五、2026 年 Agentic RAG 最新进展
1. 多模态 RAG(Multimodal RAG支持文本、图像、表格等多模态数据的RAG,如ColPali直接编码文档页面图像。)
文本之外,图表、表格、图片也能进检索链路了。ColPali 这个方向值得关注,它直接把 PDF 页面当图像编码,省掉了文档解析这一步:
# ColPali: 直接对 PDF 页面图像做向量检索,无需解析文本
from colpali_engine.models import ColPali, ColPaliProcessor
# 将 PDF 页面转为图像,直接编码为向量
page_embeddings = model.encode_images(pdf_pages)
query_embedding = model.encode_queries([user_query])
2. GraphRAG 知识图谱增强
微软开源的 GraphRAG 走了另一条路:先构建实体关系图,再拿图结构辅助检索。处理"谁和谁有什么关系"这类问题时,效果比纯向量检索好:
# GraphRAG 构建知识图谱
from graphrag.index import run_pipeline
# 提取实体和关系
entities, relations = extractor.extract(documents)
# 构建社区摘要(Leiden 算法)
communities = community_builder.build(entities, relations)
# 查询时结合图结构检索
results = graphrag_search.local_search(query, context_size=5000)
3. Contextual Retrieval(Claude 方案)
Anthropic 的思路更直接:在分块之前,先用 LLM 给每个 chunk 补一段上下文描述。原来的 chunk 缺上下文,补完之后模型就知道这段内容到底在讲谁:
原始 chunk:
"公司的 Q3 净利润为 1.2 亿元,同比增长 35%。"
加入上下文后的 chunk:
"这段内容来自 XX 公司 2025 年 Q3 财报(2025-10-30 发布)。
公司的 Q3 净利润为 1.2 亿元,同比增长 35%。"
这个做法把召回失败率降低了约 49%,配合 Reranker 能降 67%。
六、如何选择适合你的 RAG 方案
┌─────────────────────────────────────────────────────────┐
│ RAG 方案选型决策树 │
│ │
│ 问题类型是什么? │
│ │ │
│ ├── 简单问答(单跳)→ Advanced RAG 已足够 │
│ │ │
│ ├── 多文档对比/综合分析 → Agentic RAG + GraphRAG │
│ │ │
│ ├── 实时信息需求 → Agentic RAG + Web Search Tool │
│ │ │
│ └── 图表/PDF 解析 → Multimodal RAG + ColPali │
└─────────────────────────────────────────────────────────┘
预算参考:
| 方案 | 开发复杂度 | 推理延迟 | 适用规模 |
|---|---|---|---|
| Naive RAG | ⭐ | 低 | PoC / Demo |
| Advanced RAG | ⭐⭐⭐ | 中 | 中小型生产环境 |
| Agentic RAG | ⭐⭐⭐⭐⭐ | 高(多轮) | 企业级复杂场景 |
七、总结
RAG 的演进路径很清晰:Naive RAG → Advanced RAG → Agentic RAG。每一代都是盯着上一代的痛点做文章。
2026 年,Agentic RAG 已经是企业落地 AI 问答系统的主流选择。几个核心能力点:
- 动态多轮检索:根据中间结果决定下一步,不是一条路走到黑
- 工具多样化:向量库、BM25、Web 搜索、数据库按需组合
- 自我纠错:幻觉检测加上自动重新生成,不用人盯着
- 多模态支持:输入不再限于纯文本
如果你的系统还在 Naive 阶段,动手升级可以从 Reranker 开始,再逐步引入 HyDE 和混合检索,最后再考虑用 LangGraph 搭 Agentic 能力。步子迈太大容易扯着。
参考资料
- Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection (ICLR 2024)
- GraphRAG: Unlocking LLM discovery on narrative private data (Microsoft Research)
- Contextual Retrieval (Anthropic, 2025)
- ColPali: Efficient Document Retrieval with Vision Language Models
- LangGraph Documentation: https://langchain-ai.github.io/langgraph/
本文约 3800 字,如有技术勘误欢迎评论区指出。
标签:#RAG #大模型 #LLM #Agentic RAG #LangGraph #向量数据库 #AI应用开发
常见问题(FAQ)
RAG技术经历了哪几代演进?
RAG从2023年到2026年历经三代:第一代Naive RAG基础架构,第二代Advanced RAG的检索优化(查询重写、HyDE、Reranker、混合检索、上下文压缩),第三代Agentic RAG的智能体化(规划、工具调用、自我纠错)。
Advanced RAG中的HyDE是什么?
HyDE即假设文档嵌入,先让LLM生成一个假设答案,再拿假设答案去检索真实文档。由于假设答案与真实文档在语义空间上更接近,相比原Query能显著提升召回率,在技术文档场景下平均提升15-25%。
Agentic RAG与Naive RAG的区别是什么?
Agentic RAG相比Naive RAG,具备智能体能力:能进行多跳推理、调用外部工具、并在生成错误时自我纠错。Naive RAG仅做单次检索拼接,无推理和纠错,智能体RAG能处理复杂跨文档问题,但延迟可能翻三倍。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



