概述
Agentic RAG代表检索增强生成(RAG)系统的根本性范式转变:从静态的”检索→生成”管道演变为自主智能体驱动的动态决策系统。本专题系统梳理Agentic RAG的理论基础、架构模式、评估方法与前沿挑战。
1. 从RAG到Agentic RAG的演进
1.1 RAG技术演进图谱
RAG技术演进阶段:
┌─────────────────────────────────────────────────────────────────────────┐
│ 传统RAG 高级RAG Agentic RAG │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ Naive │ │ Advanced │ │ Multi- │ │
│ │ RAG │ → │ RAG │ → │ Agent │ │
│ │ │ │ │ │ RAG │ │
│ ├─────────┤ ├─────────────┤ ├────────────┤ │
│ │单次检索 │ │ 混合检索 │ │ 动态决策 │ │
│ │固定流程 │ │ 重排序 │ │ 迭代推理 │ │
│ │开环系统 │ │ 迭代优化 │ │ 闭环控制 │ │
│ └─────────┘ └─────────────┘ └────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ 简单 │ │ GraphRAG │ │ Tool- │ │
│ │ 问答 │ │ │ │ augmented │ │
│ │ │ │ 知识图谱 │ │ RAG │ │
│ └─────────┘ └─────────────┘ └────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
1.2 各阶段特征对比
| 特征 | 传统RAG | 高级RAG | Agentic RAG |
|---|---|---|---|
| 检索触发 | 单次固定 | 阈值驱动迭代 | 策略驱动动态 |
| 上下文管理 | 追加式 | 选择性追加 | 读写剪枝 |
| 决策机制 | 无 | 启发式规则 | LLM策略网络 |
| 工具使用 | 无 | 有限工具 | 自主工具编排 |
| 反馈回路 | 无 | 简单重查 | 完整反思循环 |
| 记忆系统 | 无状态 | 短期会话 | 多层次记忆 |
2. Agentic RAG分类体系
2.1 四维分析框架
SoK论文提出从四个维度理解Agentic RAG系统:
┌─────────────────────────────────────────────────────────────────────────┐
│ Agentic RAG 四维分析框架 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 规划机制 │ │ 检索编排 │ │ 记忆范式 │ │
│ │ Planning │ │ Retrieval │ │ Memory │ │
│ │ │ │ Orchestration │ │ Paradigms │ │
│ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │
│ │ · 任务分解 │ │ · 检索时机 │ │ · 工作记忆 │ │
│ │ · 子任务排序 │ │ · 检索源选择 │ │ · 语义记忆 │ │
│ │ · 条件分支 │ │ · 检索粒度 │ │ · 情景记忆 │ │
│ │ · 回溯策略 │ │ · 结果融合 │ │ · 程序记忆 │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 工具调用行为 Tool-Invocation │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ · ReAct风格循环 · 规划驱动的工具链 · 条件触发工具 │ │
│ │ · 多工具并行调用 · 工具选择策略 · 回退机制 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
2.2 规划机制详解
规划能力层次
| 层次 | 能力 | 实现方式 |
|---|---|---|
| L1: 无规划 | 固定流程执行 | 顺序管道 |
| L2: 简单规划 | 预定义分支 | 条件判断 |
| L3: 层级规划 | 任务分解 | 递归规划器 |
| L4: 动态规划 | 自适应重规划 | 在线学习策略 |
| L5: 元认知规划 | 自我监控调整 | 元学习控制器 |
规划算法分类
-
任务分解型: 将复杂查询分解为可执行的子任务
- 例: “分析公司财报” → 收入分析 + 成本分析 + 风险评估
-
链式推理型: 顺序执行推理步骤,保留中间状态
- 例: CoT (Chain-of-Thought) 模式
-
树搜索型: 探索多条推理路径,选择最优
- 例: ReAct、Tree-of-Thoughts
-
规划-执行分离型: 先规划后执行,支持重规划
- 例: Plan-and-Execute模式
2.3 检索编排策略
检索决策矩阵
| 策略 | 触发条件 | 检索源 | 粒度 |
|---|---|---|---|
| 主动检索 | 显式知识缺口检测 | 多源 | 自适应 |
| 被动检索 | 固定位置插入 | 单源 | 固定 |
| 预测检索 | 下一跳预测 | 图谱+向量 | 实体级 |
| 验证检索 | 答案置信度低 | 搜索引擎 | 文档级 |
多粒度检索接口
A-RAG框架提出三层检索接口:
┌─────────────────────────────────────────────────────────────────────────┐
│ A-RAG 多粒度检索接口 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 用户查询: "苹果公司2024年财报分析" │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 工具选择层 (Tool Selection) │ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 关键词检索 │ │ 语义检索 │ │ 知识图谱检索 │ │ │
│ │ │ (BM25) │ │ (Vector) │ │ (Entity) │ │ │
│ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │
│ └──────────┼──────────────────┼─────────────────┼────────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 粒度选择层 (Granularity Selection) │ │
│ │ │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ 文档级 │ │ 段落级 │ │ 实体级 │ │ │
│ │ │ (Document) │ │ (Chunk) │ │ (Entity) │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
3. 核心架构模式
3.1 四种基础设计模式
根据Agentic RAG综述,四种基础模式组合形成复杂系统:
Pattern 1: Reflection (反思)
class ReflectionAgent:
"""反思模式:评估检索质量和生成结果"""
def reflect(self, context, response):
"""
反思机制核心流程
1. 评估当前响应是否满足要求
2. 识别知识缺口或不确定区域
3. 决定是否需要额外检索
"""
quality_score = self.evaluate_quality(context, response)
if quality_score < self.threshold:
gaps = self.identify_gaps(context, response)
return {
"needs_retrieval": True,
"gaps": gaps,
"reflection": self.generate_reflection(gaps)
}
return {"needs_retrieval": False}
def evaluate_quality(self, context, response):
"""评估生成质量"""
# 事实一致性检查
factual_score = self.check_facts(response)
# 完整性检查
completeness_score = self.check_completeness(context, response)
# 置信度评估
confidence_score = self.estimate_confidence(response)
return (factual_score + completeness_score + confidence_score) / 3Pattern 2: Planning (规划)
class PlanningAgent:
"""规划模式:任务分解与执行调度"""
def plan(self, query):
"""
规划流程
1. 理解用户意图
2. 分解为子任务
3. 确定执行顺序
4. 分配工具资源
"""
intent = self.understand_intent(query)
subtasks = self.decompose(intent)
execution_order = self.topological_sort(subtasks)
return {
"intent": intent,
"subtasks": subtasks,
"execution_order": execution_order,
"estimated_steps": len(subtasks)
}
def decompose(self, intent):
"""将意图分解为可执行子任务"""
# 使用LLM进行任务分解
prompt = f"""
将以下任务分解为可执行的子任务:
任务: {intent}
要求:
- 每个子任务应原子化
- 明确子任务之间的依赖关系
- 指定每个子任务需要的工具
"""
return self.llm.generate(prompt)Pattern 3: Tool Use (工具使用)
class ToolUseAgent:
"""工具使用模式:动态工具编排"""
def __init__(self):
self.tool_registry = {
"search": SearchTool(),
"vector_retrieve": VectorRetrievalTool(),
"kg_query": KnowledgeGraphTool(),
"calculate": CalculatorTool(),
"code_execute": CodeExecutionTool()
}
def select_tools(self, task_context):
"""基于任务上下文选择工具"""
# 工具选择策略
tool_scores = {}
for tool_name, tool in self.tool_registry.items():
relevance = tool.estimate_relevance(task_context)
cost = tool.estimate_cost(task_context)
quality = tool.estimate_quality(task_context)
# 多目标优化:平衡相关性、成本和质量
tool_scores[tool_name] = (
0.5 * relevance +
0.3 * quality -
0.2 * cost
)
# 选择得分最高的工具组合
selected = sorted(
tool_scores.items(),
key=lambda x: x[1],
reverse=True
)[:self.max_parallel_tools]
return [t[0] for t in selected]
def execute_tool_chain(self, tools, context):
"""执行工具链"""
results = []
for tool_name in tools:
tool = self.tool_registry[tool_name]
result = tool.execute(context)
results.append(result)
# 基于结果更新上下文
context = self.update_context(context, result)
# 检查是否提前终止
if self.should_terminate(context):
break
return resultsPattern 4: Multi-Agent Collaboration (多智能体协作)
┌─────────────────────────────────────────────────────────────────────────┐
│ 多智能体协作架构 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ │
│ │ 协调器 Agent │ │
│ │ (Coordinator) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌───────────────────────┼───────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 检索 Agent │ │ 生成 Agent │ │ 验证 Agent │ │
│ │ │ │ │ │ │ │
│ │ - 向量检索 │ │ - 草稿生成 │ │ - 事实核查 │ │
│ │ - 图谱检索 │ │ - 答案修订 │ │ - 一致性检查 │ │
│ │ - 混合检索 │ │ - 质量评估 │ │ - 风险识别 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └───────────────────────┼───────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 结果整合 │ │
│ │ │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
3.2 组合模式示例
class FullAgenticRAG:
"""
完整Agentic RAG系统:组合四种基础模式
"""
def __init__(self):
self.planner = PlanningAgent()
self.retriever = RetrievalAgent()
self.generator = GenerationAgent()
self.reflector = ReflectionAgent()
self.tools = ToolUseAgent()
def query(self, user_query):
"""
完整的Agentic RAG流程
"""
# Phase 1: 规划
plan = self.planner.plan(user_query)
# Phase 2: 迭代执行
context = []
for subtask in plan["subtasks"]:
# 工具选择
tools = self.tools.select_tools(subtask)
# 执行检索
retrieved = self.retriever.search(
query=subtask,
tools=tools,
context=context
)
# 生成
generated = self.generator.generate(
context=context + retrieved
)
# 反思
reflection = self.reflector.reflect(
context=context,
response=generated
)
if reflection["needs_retrieval"]:
# 补充检索
additional = self.retriever.search(
query=reflection["gaps"],
context=context
)
context.extend(additional)
# 重新生成
generated = self.generator.generate(context)
context.append({
"subtask": subtask,
"result": generated
})
# Phase 3: 结果整合
final_response = self.integrate(context, plan)
return final_response4. 评估框架
4.1 评估维度
| 维度 | 指标 | 描述 |
|---|---|---|
| 准确性 | EM, F1, RAGAS | 最终答案的正确性 |
| 召回率 | Recall@K | 关键信息被检索的比例 |
| 效率 | 检索次数, Token使用 | 计算资源消耗 |
| 轨迹质量 | 工具使用准确率, 步骤数 | 中间过程质量 |
| 鲁棒性 | 噪声容忍, 对抗攻击 | 系统的健壮性 |
4.2 评估方法分类
层级评估视角
┌─────────────────────────────────────┐
│ 轨迹级评估 (Trajectory) │ ← 完整执行路径评估
├─────────────────────────────────────┤
│ 决策质量 (Decision Quality) │ ← 工具选择、策略决策
├─────────────────────────────────────┤
│ 检索质量 (Retrieval Quality) │ ← 精度、召回、多样性
├─────────────────────────────────────┤
│ 生成质量 (Generation Quality) │ ← 答案准确性、相关性
└─────────────────────────────────────┘
4.3 评估基准
| 基准 | 特点 | 适用场景 |
|---|---|---|
| HotpotQA | 多跳问答 | 迭代检索能力 |
| 2WikiMultiHopQA | 多跳推理 | 跨文档推理 |
| PopQA | 长尾知识 | 知识覆盖 |
| MuSiQue | 组合问题 | 多步推理 |
| Bamboogle | 动态知识 | 最新信息检索 |
5. 开放问题与前沿挑战
5.1 关键挑战
5.1.1 幻觉传播问题
┌─────────────────────────────────────────────────────────────────────────┐
│ 幻觉传播链 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 检索错误 ──→ 生成误信 ──→ 错误输出 ──→ 再次检索错误信息 │
│ │ ↑ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ 问题:迭代过程中错误会累积放大,难以检测和纠正 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
应对策略:
- 置信度感知的检索触发
- 多源交叉验证
- 证据充分性评估
5.1.2 记忆污染攻击
| 攻击类型 | 描述 | 风险 |
|---|---|---|
| Query注入 | 在查询中植入恶意指令 | 知识库被恶意修改 |
| 上下文污染 | 注入虚假信息 | 检索结果被污染 |
| 长期记忆攻击 | 持久化恶意知识 | 持续的错误输出 |
5.1.3 检索-推理对齐
- LLM的推理偏好与检索系统的能力可能不匹配
- 检索结果可能无法支持推理所需的精确信息
- 语义鸿沟:查询意图与实际检索内容的差异
5.2 前沿研究方向
| 方向 | 描述 | 潜力 |
|---|---|---|
| 稳定自适应检索 | 可靠的停止标准和证据充分性指标 | 高 |
| 成本感知编排 | 平衡质量与计算成本 | 高 |
| 形式化轨迹评估 | 数学化的推理质量框架 | 中 |
| 安全监控机制 | 人类在环、治理框架 | 高 |
| 跨模态Agentic RAG | 图像、视频等多模态检索 | 中 |
6. 实践指南
6.1 架构选择决策树
选择Agentic RAG架构?
├── 任务复杂度:单跳问答
│ └── 推荐:传统RAG + 简单反思
│
├── 任务复杂度:多跳推理
│ ├── 数据结构化程度:高
│ │ └── 推荐:GraphRAG + 规划模块
│ └── 数据结构化程度:低
│ └── 推荐:Agentic RAG + 层次化检索
│
├── 任务复杂度:开放式研究
│ ├── 实时性要求:高
│ │ └── 推荐:多Agent协作 + 异步检索
│ └── 实时性要求:低
│ └── 推荐:全量Agentic RAG + 完整反思循环
│
└── 任务复杂度:安全关键场景
└── 推荐:Human-in-the-loop + 验证Agent
6.2 实现建议
- 渐进式实现:从简单模式开始,逐步增加复杂性
- 模块化设计:各组件独立,便于调试和优化
- 可观测性:完整的日志和追踪机制
- 容错机制:优雅降级和错误恢复
- 安全第一:严格的权限控制和审计日志