从 ReAct 到 Plan-and-Execute:AI Agent 长任务执行的架构演进

从 ReAct 到 Plan-and-Execute:AI Agent 长任务执行的架构演进

引言:当单步推理遭遇长任务

在 AI Agent 的架构演进史中,ReAct(Reasoning + Acting)无疑是一座重要的里程碑。它通过将"思考(Thought)"与"行动(Action)"交织循环,让 LLM 首次具备了在工具环境中自主探索的能力。无论是调用搜索引擎、操作数据库,还是与 API 交互,ReAct 都展现出了惊人的即时决策能力。

然而,当 Agent 从简单的"查询天气"迈向"重构后端服务、运行全量测试并提交 PR"这类长程任务时,ReAct 的架构瓶颈开始显现。作为长期深耕 AI Agent 工程落地的架构师,我观察到:单步推理模式在长任务场景下存在系统性的能力边界。这正是 Plan-and-Execute 范式兴起的根本原因。

本文将从 论文理论、工程架构、源码实现 三个层面,系统解析为何必须将规划与执行显式分离,以及这一分离如何在现代 Agent 系统中落地。


一、ReAct 的结构性局限:短视的每一步

ReAct 的核心循环是:观察(Observation)→ 思考(Thought)→ 行动(Action)。问题在于,这里的 Thought 本质上只关注"下一步如何执行",是一种局部的、贪婪的决策机制。

这种设计在短任务中表现优异,但在长任务中会产生两个致命问题:

1. 目标漂移(Goal Drift)

处理长任务时,ReAct 的每一步都在当前上下文窗口内做局部最优决策。就像一个人在迷雾中行走,只看得到脚下的一步路。当任务涉及"重构后端→运行测试→提交 PR"这类多阶段目标时,Agent 很容易在第三步陷入某个具体的测试用例调试,而忘记了最初的重构目标。上下文窗口的有限性使得初始目标被逐渐稀释,最终行动轨迹偏离原始意图。

2. 方向修正能力匮乏

当执行过程中遇到意外(如测试失败、API 变更、权限不足)时,ReAct 缺乏全局视图可供参照。它只能在当前上下文中临时调整下一步行动,这种"头痛医头"的局部修正是低效的。想象一个架构师在重构过程中发现某处设计缺陷------ReAct 会选择在当前文件打补丁,而拥有全局计划的架构师会审视整个模块依赖关系,决定是否回退到更早的阶段重新设计。

本质矛盾:ReAct 将"规划"与"执行"耦合在每一个时间步中,导致规划粒度被压缩为单步,丧失了长程任务的结构性。


二、论文层:Plan-and-Solve Prompting 的理论奠基

这一认知在学术界有明确的理论支撑。ACL 2023 论文《Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models》(arXiv 2305.04091)系统地揭示了"规划先行"的必要性。

问题诊断:Zero-Shot CoT 为何频繁失败?

研究团队发现,Zero-Shot Chain-of-Thought 在数学推理、逻辑推理等任务上,错误主要集中在两类:

  • 计算错误:中间步骤的数值运算出错
  • 步骤遗漏:关键推理步骤被跳过,导致结论不成立

根本原因并非模型计算能力不足,而是模型在尚未厘清全局结构时就开始逐步推理。这本质上与 ReAct 在长任务中的困境同源:缺乏宏观规划指导的微步骤推理,容易陷入局部陷阱。

方法论:显式两阶段提示

Plan-and-Solve 提出将提示词拆分为两个明确的阶段:

第一阶段:规划(Plan)

  • 整理问题条件与目标
  • 列出完整的求解路线图
  • 明确每一步的输入输出依赖

第二阶段:求解(Solve)

  • 严格按照计划逐步执行计算
  • 每一步验证是否符合预期
  • 遭遇偏差时以计划为基准调整

实验结果

该方法在 GSM8K、AQuA 等 5 类推理基准上全面超越 Zero-Shot CoT;其增强版 Plan-and-Solve+ 更是在无需手工示例的情况下,追平了需要精心构造 Few-Shot 示例的 Few-Shot CoT。

对 Agent 架构的启示 :虽然论文聚焦于数学推理任务,但其核心结论与 Agent 系统设计高度一致------规划与执行是两种本质不同的认知任务,只有显式分开,长任务才能稳定运行、不偏离目标


三、工程层:Orchestrator-Subagents 模式

理论需要转化为可落地的架构。Anthropic 在工程实践中提出的 Orchestrator-Subagents 模式,是 Plan-and-Execute 范式在分布式 Agent 系统中的典型实现。

角色分离:两种认知任务两种实体

Orchestrator(规划者)

  • 职责:接收用户的高层次目标(如"将单体应用拆分为微服务"),将其拆解为若干有依赖关系的子任务,制定完整的执行方案。
  • 约束 :仅负责规划与调度,不直接操作任何工具。它保持对全局上下文的掌控,确保子任务之间的依赖关系、数据流转和一致性约束得到满足。
  • 认知模式:抽象、全局、依赖推理。

Subagent(执行者)

  • 职责:接收 Orchestrator 分配的单一子任务(如"将用户服务模块提取为独立 Docker 容器"),调用具体工具(代码编辑、编译、测试)完成执行。
  • 约束 :只专注当前步骤的输入输出,不参与全局规划。它将执行结果(成功/失败/日志)返回给 Orchestrator。
  • 认知模式:具体、局部、操作导向。

人工审批门(Human-in-the-Loop)

在 Orchestrator 生成完整计划后,系统引入一个关键的控制节点:人工审批

  • 计划必须经过人类确认后方可进入执行阶段
  • 不可逆操作(如代码提交、数据删除、费用支出)的决策权保留在人类手中
  • 审批通过后,Subagents 才能按序启动

这一设计不是简单的"安全兜底",而是对规划质量的外部验证。人类可以通过阅读计划,发现 Orchestrator 是否误解了意图、是否遗漏了关键步骤、是否选择了不合适的工具链。


四、源码层:Claude Code Plan Mode 的实现解析

理论最终要在代码中跑起来。Anthropic 的 Claude Code 在其实现中提供了一个精妙的范例------Plan Mode。通过分析其 queryLoop 的核心逻辑,我们可以看到 Plan-and-Execute 如何在单一事件循环中落地。

架构核心:权限值 + 计划文件

整个系统在一个 while true 循环中运行,但通过两个极简的抽象实现了阶段隔离:

  • 权限值(Mode):控制当前 Agent 处于"规划态"还是"执行态",决定工具调用的可用范围
  • 计划文件(Plan File):持久化的执行蓝图,串联起完整的任务生命周期

阶段一:Plan(规划)

当用户输入复杂任务时,系统调用 EnterPlanMode,此时 Agent 进入只读状态

  • 可以遍历代码库、读取文件、分析依赖关系
  • 所有写操作(文件编辑、命令执行)被禁用,防止在思考阶段就产生副作用
  • 将生成的完整计划写入计划文件(如 PLAN.md),包含步骤列表、每步的工具调用、预期结果和回滚策略

这一阶段对应 Orchestrator 的职责:全局分析,产出结构化计划。

阶段二:用户审批

规划完成后,系统调用 ExitPlanMode,暂停循环,等待用户确认:

  • 用户可审阅计划文件,提出修改意见
  • 若计划有误,可要求重新生成(Re-plan)
  • 确认无误后,用户批准,系统恢复写操作权限

这是人工审批门的源码实现,将不可逆的决策权明确保留在人类手中。

阶段三:Execute(执行)

审批通过后,runTools 启动,Agent 进入执行态:

  • 按计划文件逐条执行,每完成一步更新进度
  • 子任务被派发给具体的工具模块(类比 Subagent)
  • 执行者只关注当前步骤,不重新规划

阶段四:Re-plan(重规划)

执行过程中若遭遇意外(如某步骤工具返回错误、环境发生变化),系统不强行继续,也不局部修修补补:

  • 通过 FileEditTool 修改计划文件
  • 可在当前步骤后插入新步骤、删除不可行步骤、或回退到某一步重新执行
  • 修改后的计划成为新的执行基准,下一步按新计划执行

工程本质:一个权限值控制阶段边界(规划态 ↔ 执行态),一份计划文件串联完整流程。这种设计保持了 ReAct 循环的简洁性,但通过 Mode 切换和文件持久化,显式地引入了全局规划层。


五、三层总结:从认知科学到代码实现

回顾 Plan-and-Execute 的演进路径,我们可以看到一个清晰的知识堆栈:

层级 代表 核心贡献 解决的问题
论文层 Plan-and-Solve Prompting (arXiv 2305.04091) 提供"先规划、再执行"的提示词范式 Zero-Shot CoT 的计算错误与步骤遗漏;从理论上证明规划先行的必要性
工程层 Anthropic Orchestrator-Subagents 将思路转化为可上线的分布式 Agent 架构 长任务的目标漂移与局部修正困境;引入人工审批门保障安全
源码层 Claude Code Plan Mode 以 mode 值 + 计划文件,在单一 while true 中实现完整流程 在单体内核中落地规划-审批-执行-重规划的闭环

核心理念贯穿始终

规划与执行是两种不同的认知任务。规划需要全局抽象能力,执行需要局部操作能力。只有显式分离两者,长任务才能在复杂环境中稳定运行、不偏离目标。


结语:Agent 架构的"慢思考"与"快思考"

诺贝尔经济学奖得主丹尼尔·卡尼曼提出人类思维有两套系统:系统 1(快速、直觉、自动)和系统 2(缓慢、逻辑、刻意)。

ReAct 像是 Agent 的"系统 1"------快速响应环境,适合短平快的工具调用。而 Plan-and-Execute 则是 Agent 的"系统 2"------在遇到重大、复杂、长程任务时,先停下来思考全局,制定战略,再分步战术执行。

作为 Agent 架构师,我们的任务不是抛弃 ReAct,而是明确其适用边界,并在长任务场景中引入 Plan-and-Execute 的显式分层。未来的 Agent 系统,必将是这两种认知模式的有机融合:用 Plan 保障方向正确,用 Execute 保障落地效率,用 Human-in-the-Loop 保障最终决策权。

这不仅是一种工程技巧,更是对智能体认知结构的深层理解。


(本文涉及的论文 arXiv 2305.04091 及 Claude Code 相关实现细节,建议读者结合原文进一步研读。)

相关推荐
韩师傅2 小时前
12GB 小模型路由器(推理篇):INT4、vLLM 与双 QLoRA 切换
pytorch·架构·llm
沪漂阿龙在努力2 小时前
从“对话机器人”到“全能数字员工”:一文彻底搞懂 AI Agent(附大量代码实战)
人工智能
饭后一颗花生米2 小时前
2026 前端实战:AI 驱动下的性能优化与工程化升级
前端·人工智能·性能优化
起个名字总是说已存在2 小时前
解决智能体等部署cl100k_base.tiktoken报错问题
人工智能·python·ai编程
ICscholar2 小时前
推荐系统常用指标NDCG含义及公式
人工智能·深度学习·算法
LitchiCheng2 小时前
一起读《大模型驱动的具身智能:架构、设计与实现》- 注意力机制Attension Mechanism
人工智能·python·开源
张忠琳2 小时前
【vllm】vLLM v1 Worker — 系统级架构深度分析(二)
ai·架构·vllm
YJlio2 小时前
4月14日热点新闻解读:从金融数据到平台治理,一文看懂今天最值得关注的6个信号
java·前端·人工智能·金融·eclipse·电脑·eixv3
薛定猫AI2 小时前
【技术干货】OpenAI Codex 重大更新:从代码补全工具到全流程智能开发平台
运维·人工智能