04.1 - Agentic RAG
定位: RAG 与 Agent 的结合——让 LLM 自主决策何时检索、检索什么、是否需要多步检索 面试高频度: ⭐⭐⭐⭐ 考查方式: Agent 架构、工具调用、多步推理流程
一、这是什么?为什么需要它?
是什么
Agentic RAG 是将 AI Agent(智能体)的规划/推理/工具调用能力与 RAG 相结合,让系统可以自主决策何时检索、用什么工具检索、是否需要多次检索,而不是固定的"检索一次 -> 生成"流程。
传统 RAG:固定流程
查询 -> 检索 -> 生成(每次都走完整流程)
Agentic RAG:自主决策
查询 -> Agent 分析 -> 决定:
├-- 需要检索 -> 选择检索工具 -> 评估结果 -> 可能再次检索 -> 生成
├-- 直接回答 -> 不需要检索(问候/计算等)
└-- 需要其他工具 -> 调用代码/计算器等为什么需要 Agentic RAG?
传统 RAG 的局限性:
1. 每次都检索:问候也要检索,浪费
2. 只检索一次:复杂问题需要多步推理
3. 无法判断检索质量:检索到垃圾也照用
4. 没有工具思维:只能检索无法计算
Agentic RAG 解决:
1. 按需检索:需要时才检索
2. 多步推理:一次不够可以再查
3. 自我评估:判断检索结果是否够用
4. 工具扩展:检索 + 计算 + 代码执行二、原理拆解
2.1 Agent 的核心能力
Agent = LLM + 规划 + 工具 + 记忆
传统 LLM: 输入 -> 生成输出
Agent: 输入 -> 思考 -> 决策(用工具/直接回答) -> 观察结果 -> 再次思考 -> 最终输出关键能力:
1. 推理/规划:分析问题,拆解为子任务
2. 工具使用:调用检索器、计算器、API
3. 记忆管理:记住之前的检索结果
4. 自我评估:判断当前信息是否足够2.2 Agentic RAG 的三种模式
模式 1:简单 Tool-use Agent
查询:"公司年假政策是什么?"
Agent 决策流程:
Step 1: 分析查询 -> "这是知识性问题,需要检索"
Step 2: 调用检索工具 -> 检索器.invoke("年假政策")
Step 3: 接收结果 -> 文档块
Step 4: 判断信息是否足够 -> "是的,信息完整"
Step 5: 基于检索结果生成回答模式 2:多步推理 Agent
查询:"年假最多的员工能休多少天?"
Agent 决策流程:
Step 1: 分析 -> "需要先了解年假制度,再算最大值"
Step 2: 检索 -> "公司年假制度"
Step 3: 分析结果 -> "找到工龄对应关系,但需要员工工龄数据"
Step 4: 再次检索 -> "员工工龄统计数据"
Step 5: 合并信息 -> "5年以上工龄占比..."
Step 6: 生成回答模式 3:自省 Agent
查询:"公司年假政策是什么?"
Agent 流程:
Step 1: 检索 -> 得到结果 A
Step 2: 自评 -> "结果 A 只说了天数,没提申请流程,可能不完整"
Step 3: 再次检索 -> "年假申请流程"
Step 4: 合并 A 和 B -> 完整回答2.3 Agentic RAG 架构
+------------------------------------------------------------------+
| Agentic RAG 系统架构 |
| |
| +------------------+ |
| | 用户查询 | |
| +--------+---------+ |
| | |
| v |
| +------------------+ |
| | Agent (LLM) | <-- 核心:推理 + 规划 |
| | 思考:该怎么做? | |
| +--------+---------+ |
| | |
| +--------+--------+--------+--------+ |
| | | | | | |
| v v v v v |
| +------+ +------+ +------+ +------+ +------+ |
| |知识库 | |关键词 | |网页 | |计算器 | |其他 | <-- 工具集 |
| |检索 | |检索 | |搜索 | | | |工具 | |
| +------+ +------+ +------+ +------+ +------+ |
| | | | | | |
| +--------+--------+--------+--------+ |
| | |
| v |
| +------------------+ |
| | Agent 评估结果 | <-- 判断是否足够 |
| +--------+---------+ |
| | | |
| 不够 | | 够了 |
| 再查 | v |
| | +------------------+ |
| +--> | 生成最终回答 | |
| +------------------+ |
+------------------------------------------------------------------+三、图解全景
Agentic RAG vs 传统 RAG 决策流程对比
传统 RAG:
用户输入 -> [总是检索] -> [总是生成] -> 输出
无判断、无分支、单次
Agentic RAG:
用户输入 -> [分析]
|
+-------+--------+
| |
需要检索 无需检索
| |
选择工具 直接回答
|
执行检索
|
评估结果
|
+-----+-----+
| |
不够好 够好了
| |
再检索 生成回答
| |
+--> 合并 --+四、实战验证
4.1 LangGraph Agentic RAG 实现
python
# 安装:pip install langgraph langchain
from langgraph.graph import StateGraph, MessageGraph
from typing import TypedDict, List
from langchain_core.messages import HumanMessage, AIMessage
from langchain.tools import tool
class AgentState(TypedDict):
messages: List
documents: List
# 定义检索工具
@tool
def retrieve_knowledge(query: str) -> str:
"""从知识库检索相关信息"""
docs = vectorstore.similarity_search(query, k=3)
return "\n\n".join([doc.page_content for doc in docs])
tools = [retrieve_knowledge]
# 构建 Agent 图
from langgraph.prebuilt import ToolNode
from langgraph.graph import END
def should_continue(state):
"""决定是否继续检索或生成"""
last_message = state["messages"][-1]
if last_message.content == "NEED_MORE_INFO":
return "continue_retrieval"
return "generate"
# 构建 LangGraph
workflow = StateGraph(AgentState)
workflow.add_node("agent", agent_node)
workflow.add_node("retrieve", ToolNode(tools))
workflow.add_node("generate", generate_node)
workflow.set_entry_point("agent")
workflow.add_conditional_edges(
"agent",
should_continue,
{"continue_retrieval": "retrieve", "generate": "generate"}
)
workflow.add_edge("retrieve", "agent")
workflow.add_edge("generate", END)
app = workflow.compile()五、面试视角
| 问题 | 答案要点 |
|---|---|
| Agentic RAG 相比传统 RAG 的核心改进? | Agent 自主决策"是否需要检索"、"用什么工具"、"检索结果是否够用"。传统 RAG 是固定流程,Agentic RAG 是自适应流程 |
| Agentic RAG 的主要挑战? | 1) 决策可能出错(Agent 误判是否需要检索);2) 多步推理增加延迟;3) Agent 可能陷入循环(不断检索不生成);4) 成本增加(多次 LLM 调用) |
| 什么场景适合 Agentic RAG? | 复杂问题(需要多步推理)、混合类型查询(需要判断是否检索)、需要结合多种工具的场景。简单 FAQ 不适合(过度设计) |
| 如何避免 Agent 陷入循环? | 1) 设置最大检索步数限制;2) 设置超时时间;3) 设计明确的终止条件("信息足够"的判断);4) 利用 LangGraph 等框架的状态管理 |
📚 相关链接
- **SelfRAG与CorrectiveRAG** — 自我反思的 RAG 变体
- **RAG系统架构总览** — Modular RAG 作为 Agentic 的基础
- **LangChain实践指南** — LangChain Agent 框架
- <- 返回 **进阶RAG索引**