Agent 系统的架构选择直接决定其能力边界和可靠性。与软件工程中的设计模式类似,Agent 设计模式是从大量实践中提炼的可复用架构方案。选错模式会导致:过度复杂(调试困难)、能力不足(无法完成任务)、或安全失控(Agent 行为不可预测)。
所有 Agent 系统的基础范式。将推理和行动交织在循环中:
Thought: 分析当前状态,决定下一步
Action: 调用工具执行操作
Observation: 观察工具返回结果
→ 循环直到任务完成
适用场景:中等复杂度的单步/多步任务,工具集有限(5-10 个)。
局限:没有显式的自我验证环节,推理和执行交替进行可能导致”行动偏差累积”。
Claude Code 对 ReAct 的扩展,增加了 Pre-check 和 Self-Critique 环节:
┌─────────────────────────────────┐
│ 1. Pre-check & Compaction │ ← 检查资源压力,必要时压缩
│ 2. Thinking (可选深度思考) │ ← 链式推理
│ 3. Self-Critique (可选自检) │ ← 推理过程自我验证
│ 4. Action (LLM 调用) │ ← 输出工具调用或最终回复
│ 5. Tool Execution │ ← 安全检查 + 执行
│ 6. Post-processing │ ← 决定继续或终止
│ ←── 循环 ──→ │
└─────────────────────────────────┘
关键区别:
适用场景:需要长时间运行的复杂任务,上下文窗口大(100K+ tokens)。
TAOR 的完整实现细节,详见第8章 Claude Code 深度解析。
先生成完整计划,再逐步执行:
需求 → Planner Agent → 结构化计划
↓
Executor Agent → 逐步执行
↓
Verifier → 验证结果
↓
Human Approval → 审批
代表实现:Devin(全自主编程 Agent)。
适用场景:高自主性任务、需要人工审批门控的场景。
局限:计划可能因执行中的意外而失效,需要重新规划(re-planning)机制。
中央调度器根据任务类型分配给专用 Agent:
用户请求 → Router Agent → 分类判断
├── → 代码 Agent
├── → 文档 Agent
└── → 数据分析 Agent
适用场景:多技能覆盖,任务类型多样但彼此独立。
关键设计:Router 的分类准确率决定整个系统的上限。
指挥 Agent 按计划协调执行,Agent 之间有依赖关系:
Orchestrator
├── Step 1: Research Agent → 调研结果
├── Step 2: Analysis Agent (依赖 Step 1) → 分析报告
└── Step 3: Writer Agent (依赖 Step 2) → 最终文档
适用场景:复杂工作流,步骤之间有明确的数据依赖。
多个 Agent 独立完成同一任务,通过投票选最优结果:
同一任务 → Agent A → 结果 A ─┐
→ Agent B → 结果 B ─┼→ 投票/评估 → 最终结果
→ Agent C → 结果 C ─┘
适用场景:需要高可靠性、结果可比较的任务(如代码生成、翻译)。
代价:成本和延迟乘以 Agent 数量。适合”宁可多花钱也不能出错”的场景。
Agent 之间通过辩论推进推理:
Agent A: 我认为答案是 X,因为...
Agent B: 我不同意,Y 更合理,因为...
Agent A: 你说的有道理,但考虑到 Z...
→ 经过多轮辩论达成共识
适用场景:复杂推理、法律分析、策略制定等需要多角度论证的任务。
管理 Agent 分解任务,委派给执行 Agent:
Manager Agent
├── Team Lead A
│ ├── Worker A1
│ └── Worker A2
└── Team Lead B
├── Worker B1
└── Worker B2
适用场景:大规模任务分解、企业级 Agent 系统。
主 Agent 派生一次性子 Agent,子 Agent 拥有独立上下文窗口,执行完毕返回摘要:
主 Agent (1M tokens context)
├── spawn Explore Agent → [独立上下文] → 返回 1-2K token 摘要
├── spawn Plan Agent → [独立上下文] → 返回结构化计划
└── spawn General Agent → [独立上下文] → 返回任务结果
关键收益:
与其他多 Agent 模式的区别:Sub-Agent 是一次性的(spawn → execute → return),不需要复杂的 Agent 通信协议。这是多 Agent 协作中最简单但最实用的模式。
根据任务特征选择合适的设计模式:
你的任务是什么?
│
├── 单一类型任务
│ ├── 简单(1-3 步)→ ReAct
│ ├── 复杂(多步、长时间运行)→ TAOR
│ └── 需要人工审批 → Plan-Then-Execute
│
├── 多类型任务(类型间独立)
│ └── Router + 专用 Agent
│
├── 多步骤工作流(步骤间有依赖)
│ └── Orchestrator
│
├── 高可靠性要求
│ └── Voting(多 Agent 投票)
│
└── 复杂推理 / 多角度论证
└── Debate
通用原则:
并非所有问题都需要 Agent。以下场景使用 Agent 是过度工程化:
| 场景 | 为什么不需要 Agent | 更好的方案 |
|---|---|---|
| 确定性流程(无需判断) | Agent 引入不必要的随机性 | 传统代码 / 工作流引擎 |
| 延迟敏感(<100ms) | Agent 推理至少数百毫秒 | 规则引擎 / 缓存 |
| 简单分类任务 | 杀鸡用牛刀 | 单次 LLM 调用 + 结构化输出 |
| 数据密集型计算 | LLM 不擅长大量数值计算 | 传统 ETL / SQL |
Agent 工程的常见陷阱: