AI Agent 的设计模式与架构思考
什么是 AI Agent
在讨论设计模式之前,我们先厘清一个基本问题:什么才算是一个 AI Agent,而不仅仅是一次 LLM 调用?
一次普通的 LLM 调用遵循”输入-输出”的静态模式:用户提问,模型回答。而 AI Agent 则拥有一个持续运行的自主循环:
1 | 感知(Perceive)→ 推理(Reason)→ 行动(Act)→ 观察(Observe)→ 回到感知 |
Agent 与普通 LLM 调用的关键区别在于:
| 维度 | LLM 调用 | AI Agent |
|---|---|---|
| 执行模式 | 单次、无状态 | 多轮、有状态 |
| 与环境交互 | 仅文本输入 | 可以调用工具、访问外部数据 |
| 目标导向 | 完成当前问答 | 朝着一个目标持续努力 |
| 自主性 | 低(被动响应) | 高(主动规划并执行) |
| 错误处理 | 输出可能出错即终止 | 检测错误、自我修正、重试 |
这个自主循环是所有 Agent 架构的根本出发点。不同的设计模式,本质上是对这个循环的增强、变体和优化。
核心设计模式
ReAct:推理与行动的交织
ReAct(Reasoning + Acting)是当前使用最广泛的 Agent 模式。它的核心思想是将思考与行动交替进行——不像传统 pipeline 那样先一次性想清楚再执行,而是在执行中不断调整思路。
1 | Thought: 我需要知道北京的天气才能回答这个问题 |
ReAct 的优势在于:
- 可解释性:每一步的 Thought 都暴露了模型的推理过程,便于调试和审计。
- 容错性:错误的中间步骤可以被后续的 Thought 检测并修正。
- 工具友好:Thought-Action-Observation 的三段式结构与工具调用天然契合。
几乎所有现代 Agent 框架(LangChain Agent、LangGraph、AutoGen)都在不同程度上实现了 ReAct 模式。它的主要局限是:当任务需要更前瞻性的规划时,逐步推理的效率较低。
Plan-and-Execute:规划先行
Plan-and-Execute 模式将任务分为两个阶段:
- 规划阶段:Agent 收到任务后,先生成一个完整的执行计划(步骤清单)。
- 执行阶段:Agent 按计划逐步执行,执行过程中可以根据进度更新计划。
1 | 用户:分析新能源汽车市场趋势并撰写报告 |
这种模式特别适合步骤可提前枚举的复杂任务,如研究报告撰写、代码项目开发、多步骤的文档生成。它的核心优势是全局视野——在动手之前先看清全局,避免在细节中迷失方向。
在实际实现中,可以结合 ReAct:规划器生成宏观计划,每个步骤内的执行使用 ReAct 循环。这就是所谓的分层 Agent 架构。
Reflexion:从经验中学习
Reflexion 模式引入了一个自我反思的环节,让 Agent 在执行失败后能够分析原因、改进策略:
1 | 执行失败:工具调用返回错误 |
Reflexion 的核心组件包括:
- Actor:执行任务的 Agent。
- Evaluator:评估执行结果,判断成功或失败。
- Self-Reflection:失败时分析根本原因,产生”经验教训”。
- Memory:将经验存储为长期记忆,供未来的类似场景使用。
这种模式模拟了人类”从错误中学习”的能力,让 Agent 在多次执行中逐步改善表现。
Self-Refine:迭代改进
Self-Refine 与 Reflexion 类似,但侧重点不同:Reflexion 关注的是行为策略的改进(如何更好地调用工具),而 Self-Refine 关注的是输出质量的改进(如何生成更好的内容)。
1 | 初始输出:一个只有基本结构的报告 |
Self-Refine 在内容创作、代码生成、翻译润色等场景中特别有效。它可以用”同一模型既生成又评估”的简单形式实现,也可以引入专门的 Evaluator 模型。
工具使用模式
工具是 Agent 能力的放大器。好的工具设计遵循以下原则:
工具的设计哲学
- 单一职责:每个工具只做一件事,并且做好。与其设计一个”万能数据分析工具”,不如将查询、图表、统计分别独立为工具。
- 自描述接口:工具的函数名、docstring、参数类型注解至关重要——这是模型理解工具能力的唯一途径。写作清晰的道具说明是 prompt engineering 的重要部分。
- 结构化输出:工具返回结构化的、易于被 LLM 理解和引用的结果。JSON 格式优于自然语言描述。
- 幂等性:同一个工具用相同参数调用多次,结果应该一致(或至少安全)。这避免了 Agent 因重试而产生副作用。
推理与行动的交织模式
在工具调用中,常见的执行模式有两种:
顺序工具链:Agent 按固定顺序调用工具——“先查数据,再分析,再生成图表”。适合步骤明确的标准化流程。
动态工具选择:Agent 根据当前状态自主决定下一个工具——“我现在需要查什么才能回答用户的问题?”。这是 Agent 自主性的核心体现。
在实践中,大多数系统混合使用这两种模式:将标准流程编码为可选的”SOP”(标准作业程序),同时允许 Agent 根据实际情况灵活偏离。
记忆模式
记忆是 Agent 区别于无状态脚本的关键能力。三种记忆模式分别服务于不同的时间尺度:
短期记忆(Working Memory)
存储当前任务执行过程中的信息:对话历史、中间计算、工具调用结果。通常实现为简单的消息列表或字典,生命周期与当前任务一致。
长期记忆(Long-term Memory)
跨越多次会话的持久化知识:用户偏好、已完成的项目、学到的经验。通常使用向量数据库(Chroma、Pinecone、Milvus)实现,通过语义搜索检索相关内容:
1 | # 存入长期记忆 |
情景记忆(Episodic Memory)
记录完整的任务执行历程:成功案例、失败教训、决策过程。这是 Reflexion 模式的基础——Agent 通过回顾过去的经历来改善将来的行为。实现上,情景记忆通常存储结构化的事件日志,支持按任务类型、时间范围、结果状态等维度检索。
规划模式
任务分解(Task Decomposition)
将复杂任务分解为子任务,是提升 Agent 成功率的最有效手段之一。两种分解策略:
- 自上而下:先定义顶层目标,逐层分解到可执行的原子步骤。适合结构化任务,如”开发一个用户管理系统”。
- 自下而上:从最具体的需求出发,逐步组合成更大的方案。适合探索性任务,如”分析为什么用户流失率上升”。
层次化规划(Hierarchical Planning)
在复杂任务中,单一层次的规划是不够的:
1 | Level 1(战略层):完成用户管理模块 |
层次化规划让 Agent 能够在不同抽象层次上思考和行动——在战略层做决策时不会被低级细节淹没,在操作层执行时又有清晰的上下文。
多 Agent 协作模式
当单个 Agent 的能力不足以覆盖任务的全部维度时,多 Agent 协作就成为了选择。常见的协作模式包括:
辩论模式(Debate)
多个 Agent 独立生成答案,然后互相评审、质疑,通过多轮”辩论”达成共识或选出最优解。适用于需要严谨推理的场景,如数学证明、法律分析、安全风险评估。
投票模式(Voting)
多个 Agent 独立工作,最终通过多数投票决定输出。适用于容错性要求高的场景——即使个别 Agent 出错,整体结果依然可靠。这是一种简单的集成学习策略。
专长角色(Specialized Roles)
每个 Agent 被赋予一个明确的角色和领域知识:研究员负责收集信息,分析师负责解读数据,写手负责产出文本,审核员负责质量把关。这是目前生产环境中应用最广泛的模式,也是 LangGraph 等框架重点支持的场景。
错误恢复模式
在生产环境中,Agent 不可避免地会出错。可靠的错误恢复策略包括:
- 重试(Retry):最简单的策略。对瞬态错误(API 超时、速率限制)有效。应结合实际采用指数退避,避免对后端系统造成冲击。
- 降级(Fallback):当首选方案失败时,使用次优但可靠的备选方案。例如,精确搜索无结果时,回退到模糊搜索。
- 人工升级(Human Escalation):当 Agent 遇到超出能力边界的问题时,将任务转交给人工处理。LangGraph 的
interrupt机制为此提供了原生支持。 - 自我修正(Self-Correction):Agent 检测到自己的输出不符合预期后,自动触发修正流程——这是 Reflexion 和 Self-Refine 模式的核心。
评估 Agent 架构
选择架构时,需要权衡以下维度:
| 维度 | 需要考虑的问题 |
|---|---|
| 延迟 | 用户的等待容忍度是多少?多 Agent 系统通常更慢。 |
| 可靠性 | 任务的容错要求有多高?投票和辩论模式提高可靠性,但增加成本。 |
| 成本 | 每次推理消耗的 token 数量和模型单价。越是复杂的模式,通常消耗越大。 |
| 可解释性 | 是否需要 audit trail?ReAct 模式天然提供推理链。 |
| 维护性 | 系统的复杂度是否能被团队持续维护? |
实用的决策框架:
- 简单任务(单步查询、翻译、摘要):直接 LLM 调用或简单的 ReAct Agent。
- 中等任务(多步推理、需要工具):ReAct Agent + 基础的记忆系统。
- 复杂任务(多维度分析、长文档生成):Plan-and-Execute + Reflexion。
- 超复杂任务(多领域专家协作):多 Agent 的 Supervisor 模式,配合完善的错误恢复。
结语
AI Agent 的设计模式仍在快速演进中。ReAct、Plan-and-Execute、Reflexion 这些经典模式奠定了 Agent 开发的工程基础,而随着 LangGraph 等新工具的出现,我们正在见证多 Agent 协作、人机协同等更复杂模式的成熟。
不管模式如何演化,核心原则始终不变:保持架构的简单性、确保状态的可追踪性、为失败设计容错机制。一个设计良好的 Agent 系统,不应该试图用复杂的模式掩盖模型本身的不确定性,而应该通过清晰的架构将不确定性限制在可控范围内。