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 解决了大部分基础问题,但仍有两大瓶颈:

  1. 线性单轮检索:仍然只做一次检索,无法处理需要多步推理的问题
  2. 无自我纠错能力: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 能力。


参考资料


本文约 3800 字,如有技术勘误欢迎评论区指出。

标签:#RAG #大模型 #LLM #Agentic RAG #LangGraph #向量数据库 #AI应用开发

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐