单智能体架构
单智能体(Single Agent)是当前最常见也最成熟的 AI Agent 架构模式——一个 Agent 配备 LLM 大脑、记忆系统和工具集,独立完成从理解任务到交付结果的全流程。本章深入剖析单智能体的架构设计、核心组件协作、典型实现方案及局限性。
单智能体(Single Agent)是当前最常见也最成熟的 AI Agent 架构模式——一个 Agent 配备 LLM 大脑、记忆系统和工具集,独立完成从理解任务到交付结果的全流程。本章深入剖析单智能体的架构设计、核心组件协作、典型实现方案及局限性。
理解提示工程与工具调用
单智能体核心架构、核心组件详解、主流单智能体实现
行动系统 · 智能体深度解析
文章导航
- 引言
- 1. 单智能体核心架构
- 1.1 经典三层架构
- 1.2 Agent 运行循环
- 1.3 Agent 状态定义
- 2. 核心组件详解
- 2.1 LLM 大脑
- 2.2 系统提示(System Prompt)
- 2.3 工具注册与管理
- 3. 主流单智能体实现
- 3.1 ReAct Agent
- 3.2 Plan-and-Execute Agent
- 3.3 Reflection Agent
- 4. Agent 框架实现对比
- 4.1 主流框架对比
- 4.2 LangGraph 单智能体实现
- 5. 单智能体的设计模式
- 5.1 常见设计模式
- 5.2 上下文窗口管理
- 6. 单智能体的局限性
- 6.1 核心局限
- 6.2 何时该用单 Agent vs 多 Agent
- 7. 本章小结
- 相关章节
- 延伸阅读
点击图中节点可定位到对应正文。
引言
单智能体(Single Agent)是当前最常见也最成熟的 AI Agent 架构模式——一个 Agent 配备 LLM 大脑、记忆系统和工具集,独立完成从理解任务到交付结果的全流程。本章深入剖析单智能体的架构设计、核心组件协作、典型实现方案及局限性。
1. 单智能体核心架构
1.1 经典三层架构
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌──────────────────────────────────────────────────────────────┐
│ 感知层(Perception) │
│ 接收用户输入、环境反馈、工具返回值、多模态信号 │
└──────────────────────┬───────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ 决策层(Brain / LLM) │
│ 理解意图 → 规划步骤 → 选择工具 → 生成行动 → 反思结果 │
└──────────────────────┬───────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ 执行层(Action) │
│ 调用工具、执行代码、发送消息、操作环境 │
└──────────────────────────────────────────────────────────────┘1.2 Agent 运行循环
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌──────────────┐
│ 用户输入 │
└──────┬───────┘
↓
┌────────────────┐
│ 理解 & 规划 │ ← 记忆系统提供上下文
└────────┬───────┘
↓
┌────────────────┐
┌──否─│ 需要工具? │
│ └────────┬───────┘
│ │ 是
│ ↓
│ ┌────────────────┐
│ │ 选择 & 调用工具 │
│ └────────┬───────┘
│ ↓
│ ┌────────────────┐
│ │ 获取工具结果 │
│ └────────┬───────┘
│ ↓
│ ┌────────────────┐
└────→│ 结果满意? │
└───┬────────┬───┘
是 ↓ ↓ 否
┌──────────┐ ┌────────────┐
│ 输出回答 │ │ 反思 & 重试 │ → 回到规划
└──────────┘ └────────────┘1.3 Agent 状态定义
from dataclasses import dataclass, field
from typing import List, Dict, Any, Optional
@dataclass
class AgentState:
"""Agent 在任一时刻的完整状态"""
task: str # 原始任务描述
messages: List[Dict] = field(default_factory=list) # 对话历史
plan: List[str] = field(default_factory=list) # 当前计划
current_step: int = 0 # 当前执行到第几步
tool_results: List[Dict] = field(default_factory=list) # 工具调用结果
reflections: List[str] = field(default_factory=list) # 反思记录
final_answer: Optional[str] = None # 最终答案
status: str = "running" # running / success / failed
retry_count: int = 0 # 重试次数2. 核心组件详解
2.1 LLM 大脑
LLM 是 Agent 的决策中枢,负责:
| 职能 | 说明 |
|---|---|
| 意图理解 | 解析用户输入,提取真实需求 |
| 任务规划 | 将复杂任务分解为可执行步骤 |
| 工具选择 | 从可用工具中选择最合适的 |
| 参数生成 | 为工具调用生成正确的参数 |
| 结果解读 | 理解工具返回值,判断是否完成任务 |
| 反思修正 | 失败时分析原因,调整策略 |
| 回答生成 | 最终生成面向用户的回答 |
2.2 系统提示(System Prompt)
系统提示是 Agent 的"灵魂",定义了 Agent 的身份和行为准则:
你是一个专业的数据分析助手。
## 身份
- 名称: DataAnalyst
- 专长: SQL 查询、数据可视化、统计分析
- 风格: 严谨、专业,给出结论时附带数据依据
## 可用工具
- query_database: 执行 SQL 查询
- create_chart: 生成数据图表
- run_python: 执行 Python 代码
## 行为准则
1. 先理解用户的分析需求,再选择数据源
2. 查询数据前先确认数据范围和口径
3. 给出结论时,必须附带关键数据支撑
4. 如果数据不足以得出结论,明确告知用户
5. 涉及敏感数据时,进行脱敏处理
## 输出格式
- 数据分析结论使用结构化格式
- 重要数字加粗标注
- 必要时给出可视化建议2.3 工具注册与管理
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
def get_tool_descriptions(self) -> List[Dict]:
"""获取所有工具的描述(传给 LLM)"""
return [
{
"name": tool.name,
"description": tool.description,
"parameters": tool.parameters
}
for tool in self.tools.values()
]根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
def execute(self, name: str, params: Dict) -> Any:
"""执行工具调用"""
if name not in self.tools:
raise ToolNotFoundError(f"未知工具: {name}")
return self.tools[name].execute(**params)3. 主流单智能体实现
3.1 ReAct Agent
最基础的 Agent 模式,Thought → Action → Observation 循环:
def react_agent(task: str, tools: ToolRegistry, max_steps: int = 10):
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": task}
]
for step in range(max_steps):
response = llm.chat(messages, tools=tools.get_tool_descriptions())
if response.has_tool_call():
# 执行工具
for tool_call in response.tool_calls:
result = tools.execute(tool_call.name, tool_call.params)
messages.append({"role": "tool", "content": str(result),
"tool_call_id": tool_call.id})
else:
# LLM 直接给出最终回答
return response.content
return "达到最大步数限制,未能完成任务"3.2 Plan-and-Execute Agent
先规划完整方案再执行,适合步骤明确的复杂任务:
def plan_and_execute(task: str, tools: ToolRegistry):
# 阶段 1: 规划
plan = llm.generate(f"""
任务: {task}
可用工具: {tools.get_tool_names()}
请制定一个详细的执行计划,每步包含:要做什么、用哪个工具。
""")
steps = parse_plan(plan) # 解析为步骤列表
# 阶段 2: 逐步执行
results = []
for i, step in enumerate(steps):
# 每步执行前,考虑之前的结果
context = f"已完成步骤: {results}\n当前步骤: {step}"
action = llm.generate(f"根据上下文执行当前步骤: {context}")
if action.has_tool_call():
result = tools.execute(action.tool_call.name, action.tool_call.params)
results.append({"step": i, "action": action, "result": result})
else:
results.append({"step": i, "action": action, "result": action.content})
# 阶段 3: 汇总结果
final = llm.generate(f"任务: {task}\n执行结果: {results}\n请给出最终回答。")
return final3.3 Reflection Agent
加入自我反思循环,提高输出质量:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
执行流程:
初始回答 → 自我评审 → 发现问题 → 修正 → 再评审 → 满意 → 输出4. Agent 框架实现对比
4.1 主流框架对比
| 框架 | Agent 模式 | 优势 | 劣势 |
|---|---|---|---|
| LangChain Agent | ReAct / 自定义 | 生态丰富,工具多 | 抽象较重,调试复杂 |
| LangGraph | 状态图 | 流程可视化,支持循环 | 学习曲线较陡 |
| AutoGPT | 自主循环 | 高度自主 | 不稳定,容易跑偏 |
| OpenAI Assistants | 内置 Agent | 简单易用 | 封闭生态 |
| Claude Tool Use | 原生工具调用 | 调用精准 | 仅限 Claude 模型 |
| CrewAI | 多 Agent | 角色分工 | 单 Agent 功能较弱 |
4.2 LangGraph 单智能体实现
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
def reason_node(state: AgentState) -> AgentState:
"""推理节点:LLM 决定下一步行动"""
response = llm.chat(state["messages"], tools=tool_descriptions)根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
def tool_node(state: AgentState) -> AgentState:
"""工具执行节点"""
last_message = state["messages"][-1]
results = []
for tool_call in last_message.tool_calls:
result = execute_tool(tool_call)
results.append({"role": "tool", "content": str(result)})
return {**state, "messages": state["messages"] + results,
"next_action": "reason"}5. 单智能体的设计模式
5.1 常见设计模式
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
模式 1: Router(路由器)
用户请求 → 分类 → 路由到不同的处理逻辑
适用: 请求类型多样的场景根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
模式 2: Chain(链式)
A → B → C → 输出
适用: 流程固定、步骤明确的场景根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
模式 3: Loop(循环)
规划 → 执行 → 评估 → (不满意则回到规划)
适用: 需要迭代优化的场景根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
模式 4: Fork-Join(分叉合并)
任务 → 分解为子任务 → 并行执行 → 合并结果
适用: 可并行的独立子任务根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
模式 5: Hierarchical(分层)
高层 Agent 分配任务 → 低层 Agent 执行
适用: 复杂的多层级任务5.2 上下文窗口管理
class ContextManager:
"""管理 Agent 的上下文窗口"""
def __init__(self, max_tokens=8000):
self.max_tokens = max_tokens
self.system_prompt = ""
self.messages = []
self.tool_results = []
def add_message(self, message):
self.messages.append(message)
self._trim_if_needed()
def _trim_if_needed(self):
"""当上下文超过限制时进行裁剪"""
total = count_tokens(self.system_prompt + self.messages + self.tool_results)
if total <= self.max_tokens:
return
# 策略 1: 压缩旧的工具结果
old_results = self.tool_results[:len(self.tool_results)//2]
if old_results:
summary = llm.summarize(old_results)
self.tool_results = [summary] + self.tool_results[len(old_results):]
# 策略 2: 裁剪早期对话
while count_tokens(self.messages) > self.max_tokens * 0.6:
self.messages.pop(0) # 移除最早的消息6. 单智能体的局限性
6.1 核心局限
| 局限 | 说明 | 应对方案 |
|---|---|---|
| 上下文瓶颈 | 单次对话信息量有限 | 外部记忆 + 摘要压缩 |
| 单点失败 | LLM 出错则整个任务失败 | 重试 + 反思 + 降级策略 |
| 专业性不足 | 一个 Agent 难以精通所有领域 | 多 Agent 协作 |
| 并行效率低 | 串行处理多个子任务 | 并行工具调用 / 多 Agent |
| 自我矛盾 | 长对话中前后不一致 | 结构化记忆 + 事实核查 |
6.2 何时该用单 Agent vs 多 Agent
适合单 Agent:
✓ 任务相对单一,领域集中
✓ 步骤之间有强依赖关系
✓ 不需要并行处理
✓ 交互性强,需要持续对话
适合多 Agent:
✓ 任务涉及多个不同领域
✓ 子任务之间相互独立,可并行
✓ 需要多角色协作(如审稿人、作者、编辑)
✓ 单个 Agent 上下文装不下所有信息7. 本章小结
| 维度 | 要点 |
|---|---|
| 核心架构 | 感知 → 决策 → 执行,循环直到完成 |
| 关键组件 | LLM 大脑 + 系统提示 + 工具集 + 记忆 |
| 主流模式 | ReAct / Plan-and-Execute / Reflection |
| 实现框架 | LangGraph 状态图最灵活 |
| 设计模式 | Router / Chain / Loop / Fork-Join |
| 主要局限 | 上下文瓶颈、单点失败、专业性不足 |
相关章节
- 什么是智能体 — 单智能体所依托的核心概念
- 规划与推理 — 单智能体决策的核心机制
- 多智能体系统 — 单智能体的进阶协作形态
- LangChain与LangGraph — 单智能体的主流工程实现
延伸阅读
- LangChain Documentation: "Agents". docs.langchain.com
- Chase, H. (2023). "LangGraph: Building Stateful, Multi-Agent Applications". blog.langchain.dev
- Wang, L. et al. (2024). "A Survey on Large Language Model based Autonomous Agents". Frontiers of Computer Science