RAG 与 Agent 的深度结合
RAG(检索增强生成)和 Agent 是 LLM 应用的两大核心范式。当两者深度结合时,Agent 不仅能检索知识,还能主动规划检索策略、评估结果质量、动态调整检索方案——实现从"被动检索"到"主动知识探索"的跃迁。
RAG(检索增强生成)和 Agent 是 LLM 应用的两大核心范式。当两者深度结合时,Agent 不仅能检索知识,还能主动规划检索策略、评估结果质量、动态调整检索方案——实现从"被动检索"到"主动知识探索"的跃迁。
建议完成第 04、05 章
从 RAG 到 Agentic RAG、Agentic RAG 架构、多数据源路由
系统协同 · 大模型与智能体协同
文章导航
点击图中节点可定位到对应正文。
引言
RAG(检索增强生成)和 Agent 是 LLM 应用的两大核心范式。当两者深度结合时,Agent 不仅能检索知识,还能主动规划检索策略、评估结果质量、动态调整检索方案——实现从"被动检索"到"主动知识探索"的跃迁。
1. 从 RAG 到 Agentic RAG
1.1 演进路线
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
Level 1: 朴素 RAG
查询 → 检索 → 生成
问题:一次检索,质量不稳定根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
Level 2: 高级 RAG
查询改写 → 检索 → 重排 → 生成
改进:优化检索质量根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
Level 3: 模块化 RAG
查询分析 → 选择检索策略 → 检索 → 后处理 → 生成
改进:根据查询类型选择最优策略1.2 Agentic RAG 的核心优势
| 对比维度 | 传统 RAG | Agentic RAG |
|---|---|---|
| 检索决策 | 每次都检索 | Agent 判断是否需要检索 |
| 查询处理 | 原始查询直接检索 | Agent 分解和改写查询 |
| 检索策略 | 固定策略 | Agent 动态选择策略 |
| 结果评估 | 不评估 | Agent 评估结果充分性 |
| 多源检索 | 单一知识库 | Agent 在多个数据源间路由 |
| 迭代能力 | 一次性 | Agent 可多次迭代检索 |
2. Agentic RAG 架构
2.1 核心架构
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
用户查询
↓
┌──────────────────────┐
│ 查询分析 Agent │
│ - 理解用户意图 │
│ - 判断是否需要检索 │
│ - 分解复杂查询 │
└──────────┬───────────┘
↓
┌──────────────────────┐
│ 检索规划 Agent │
│ - 选择数据源 │
│ - 生成检索查询 │
│ - 确定检索策略 │
└──────────┬───────────┘
↓
┌──────────────────────┐
│ 检索执行 │
│ - 向量检索 │
│ - 关键词检索 │
│ - 结构化查询 │
│ - API 调用 │
└──────────┬───────────┘
↓
┌──────────────────────┐
│ 结果评估 Agent │
│ - 评估充分性 │
│ - 检查一致性 │
│ - 决定是否需要补充 │
└──────────┬───────────┘
┌───┴───┐
充分 ↓ ↓ 不充分
┌──────┐ ┌──────────┐
│ 生成 │ │ 补充检索 │ → 回到检索规划
│ 回答 │ │ (调整策略) │
└──────┘ └──────────┘2.2 代码实现
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
async def answer(self, query: str) -> str:
# Step 1: 查询分析
analysis = await self.analyze_query(query)根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
async def analyze_query(self, query: str) -> dict:
"""分析查询意图和检索需求"""
return await self.llm.generate_structured(f"""
分析以下查询:{query}3. 多数据源路由
3.1 智能路由
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
async def route(self, query: str) -> list:
"""返回应该查询的数据源列表和查询方式"""3.2 多源融合
async def multi_source_retrieval(query: str, router: DataSourceRouter):
"""多数据源并行检索并融合"""
# 获取路由计划
routes = await router.route(query)
# 并行检索
tasks = []
for route in routes:
if route["source"] == "vector_store":
tasks.append(vector_store.search(route["query"], route["top_k"]))
elif route["source"] == "web_search":
tasks.append(web_search.search(route["query"]))
elif route["source"] == "sql_database":
tasks.append(db.execute(route["query"]))
results = await asyncio.gather(*tasks)
# 结果融合和去重
merged = merge_and_deduplicate(results)
# 重排序
reranked = await reranker.rerank(query, merged)
return reranked4. 自适应检索策略
4.1 Corrective RAG(CRAG)
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
用户查询 → 初始检索 → 质量评估
↓
┌───────┼───────┐
高质量 中等质量 低质量
↓ ↓ ↓
直接使用 精化检索 换策略检索
生成回答 再次检索 (如换数据源)4.2 Self-RAG
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
训练模型输出特殊 token:
[Retrieve] → 触发检索
[ISREL:yes] → 检索结果相关
[ISREL:no] → 检索结果不相关
[ISSUP:yes] → 回答有检索结果支持
[ISSUP:no] → 回答缺乏检索支持
[ISUSE:yes] → 回答有用
[ISUSE:no] → 回答无用根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
流程:
用户查询 → 模型判断是否需要检索 → 需要则 [Retrieve] → 检索 → 评估结果 → 生成5. Graph RAG 与 Agent
5.1 知识图谱增强的 RAG
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
传统 RAG:
查询 → 向量相似度 → 返回文档片段
问题:无法理解实体间的关系根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
Graph RAG:
查询 → 知识图谱检索 → 实体关系推理 → 返回结构化知识根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
图谱检索路径:
张三 → 就职于 → A公司
A公司 → 竞争对手 → B公司、C公司、D公司5.2 Graph RAG + Agent
class GraphRAGAgent:
"""知识图谱增强的 RAG Agent"""
async def answer(self, query: str):
# 1. 从查询中提取实体
entities = await self.extract_entities(query)
# 2. 在知识图谱中查找相关实体和关系
graph_results = await self.knowledge_graph.query(entities)
# 3. 同时做向量检索
vector_results = await self.vector_store.search(query)
# 4. Agent 综合两种结果
answer = await self.llm.generate(f"""
用户问题: {query}
知识图谱结果:
{format_graph_results(graph_results)}
文档检索结果:
{format_vector_results(vector_results)}
请综合两种信息源回答问题。
如果两种来源有冲突,请指出并给出你的判断。
""")
return answer6. RAG Agent 的评估与优化
6.1 评估指标
| 指标 | 说明 | 评估方法 |
|---|---|---|
| 检索相关性 | 检索到的内容与查询是否相关 | 人工评分 / 自动评估 |
| 回答忠实度 | 回答是否基于检索结果,不编造 | Faithfulness 评估 |
| 回答完整性 | 是否回答了用户的所有问题 | Coverage 评估 |
| 检索效率 | 是否用最少的检索轮次获得足够信息 | 平均检索轮次 |
| 路由准确率 | 是否选择了正确的数据源 | 路由决策准确率 |
6.2 优化策略
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
1. 查询分解
复杂查询 → 分解为多个简单子查询 → 分别检索 → 合并7. 本章小结
| 维度 | 要点 |
|---|---|
| 演进 | 朴素 RAG → 高级 RAG → 模块化 RAG → Agentic RAG |
| 核心 | Agent 自主决策检索策略、评估结果、迭代优化 |
| 多源 | 向量库 + 网页 + 数据库 + 知识图谱,智能路由 |
| 质量 | CRAG(修正检索)/ Self-RAG(自主决定检索时机) |
| 评估 | 相关性 + 忠实度 + 完整性 + 效率 |
相关章节
- 检索增强生成(RAG) — RAG 的基础原理与流程
- 什么是智能体 — Agent 的基础概念与运行机制
- 记忆系统 — Agent 记忆与检索的关系
延伸阅读
- Edge, D. et al. (2024). "From Local to Global: A Graph RAG Approach to Query-Focused Summarization". arXiv
- Asai, A. et al. (2024). "Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection". ICLR
- Yan, S.Z. et al. (2024). "Corrective Retrieval Augmented Generation". arXiv