RAG 2026 全面升级:从 Naive RAG 到 Agentic RAG
RAG 2026 全面升级:从 Naive RAG 到 Agentic RAG
摘要:RAG 技术在短短两年内经历了三代演进——从最初简单的"检索+生成"拼接,到模块化优化的 Advanced RAG,再到如今具备多跳推理、工具调用和自我纠错能力的 Agentic RAG。本文完整梳理三代 RAG 架构的核心差异、关键技术节点以及 2026 年的最新落地实践。
一、为什么 RAG 还需要"升级"
自 2023 年 ChatGPT 爆火以来,RAG(Retrieval-Augmented Generation,检索增强生成)已经成为企业落地大模型最主流的工程方案之一。然而,随着应用规模和场景复杂度的提升,早期 Naive RAG 暴露出越来越多的致命短板:
- 检索召回率低,找不到"隐含"的相关文档
- 单次检索无法处理多跳问题(“A 的上级是 B,B 的职责是什么?”)
- LLM 对检索内容"照单全收",幻觉率居高不下
- 无法感知上下文意图,不同问法导致截然不同的检索结果
这些问题催生了 RAG 技术的第二代和第三代演进。下面我们逐一解析。
二、第一代:Naive RAG(2023 年主流)
架构简介
Naive RAG 是最基础的 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,另一方面让 LLM 注意力分散,答案质量下降。
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 先生成一个"假设答案",再用假设答案去检索真实文档:
# HyDE 实现示意
hypothetical_answer = llm.generate(f"请回答:{query}(即使不确定也要尽量回答)")
retrieved_docs = vector_store.similarity_search(hypothetical_answer)
效果:在技术文档检索场景下,召回率平均提升 15-25%。
3. Reranker 精排
将 Cross-Encoder 模型引入检索后处理,对 Top-K 候选文档进行精细打分:
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 从检索结果中提取最相关的句子,压缩上下文长度:
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 解决了大部分基础问题,但仍有两大瓶颈:
- 线性单轮检索:仍然只做一次检索,无法处理需要多步推理的问题
- 无自我纠错能力:LLM 生成错误答案时,系统无法感知并重新检索
四、第三代: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)
2024 年提出的 Self-RAG 框架让 LLM 在生成过程中动态判断是否需要检索:
生成 Token → 预测 [Retrieval] Token → 决定是否检索
↓ ↓
如需检索 → 检索相关文档 → 评分 [Relevant] → 继续生成
↓
最终输出 → 预测 [Supported] Token → 验证答案是否有文档支持
关键特殊 Token:
[Retrieval]/[No Retrieval]:是否需要检索[Relevant]/[Irrelevant]:检索结果是否相关[Fully supported]/[Partially supported]/[No support]:答案支撑度
4. 基于 LangGraph 的 Agentic RAG 实现
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)
不再局限于文本,支持图表、表格、图片的跨模态检索:
# 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 在 2025 年提出在文档分块前先用 LLM 为每个 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 搜索、数据库按需组合
- 自我纠错:幻觉检测 + 自动重新生成
- 多模态支持:不再受限于纯文本文档
如果你的 RAG 系统还停留在 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应用开发
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)