Plan-and-Execute
核对日期:2026-05-09。
1. 定义与边界
Plan-and-Execute 是一种先生成计划、再按步骤执行、必要时重规划的 Agent 控制模式。它可以由一个模型承担 planner 和 executor,也可以拆成独立组件。
它与 Planner-Executor 架构的区别:Plan-and-Execute 是规划控制方法;Planner-Executor 是系统架构实现。两者常一起使用。
2. 为什么重要
直接 ReAct 循环在复杂任务中容易局部推进而缺少全局目标。Plan-and-Execute 通过计划对象把“目标、步骤、依赖、完成标准”显式化,便于审计、恢复和评测。
3. 核心机制
关键循环:
- 规划:生成步骤和完成标准。
- 执行:每次只执行一个可运行步骤。
- 验证:用工具结果、测试、规则或模型评审判断完成。
- 重规划:当环境变化或步骤失败时更新计划。
4. 架构模式
| 模式 | 描述 | 适用 |
|---|---|---|
| Full upfront plan | 先完整计划再执行 | 审批、合规、路径清楚 |
| Rolling plan | 只规划未来几步 | 探索性任务 |
| Plan-execute-verify | 每步增加 verifier | 高质量交付 |
| Plan-execute-replan | 失败或新事实触发重规划 | 工具不稳定、外部信息变化 |
5. 工程实现
def plan_and_execute(goal):
plan = create_plan(goal)
validate_plan(plan)
while not plan.complete:
step = plan.next_ready_step()
result = execute(step)
verdict = verify(step, result)
if verdict.pass_:
plan.mark_done(step.id, result.ref)
elif verdict.recoverable:
plan = replan(plan, step, verdict)
else:
return ask_human_or_fail(plan, verdict)
return synthesize(plan.results)
Verifier 示例:
{
"step_id": "s3",
"pass": false,
"reason": "测试命令失败,缺少依赖 mock",
"recoverable": true,
"suggested_replan": "增加安装依赖或改用现有测试命令"
}
6. 生产实践
- 计划生成后先做静态校验,再执行。
- 每步只开放必要工具,避免 Executor 越界。
- 重规划带上不可重复动作清单。
- 对失败设置分类:工具失败、计划错误、权限不足、目标冲突。
- 用 trace 比较计划步骤和实际工具调用。
7. 常见反模式
- 计划永远不更新,遇到新事实仍按旧路径执行。
- 频繁重规划,导致目标漂移。
- 没有 verifier,Executor 自称完成就继续。
- 最终汇总时忽略失败步骤。
- 把计划写在自然语言段落中,无法程序校验。
8. 评测方法
- Plan Quality:计划是否可执行、完整、简洁。
- Step Success Rate:每步通过 verifier 的比例。
- Replan Precision:是否只在需要时重规划。
- Drift Rate:执行是否偏离原始目标和约束。
- Final Acceptance:最终结果是否满足用户验收。
9. 安全与治理
- 计划变更需要策略检查,高风险变更需审批。
- 工具调用参数应来自当前步骤和已验证 facts。
- 对外部资料的建议不能直接修改 plan control 字段。
- 记录 plan_version,防止审计时无法解释行为。
10. 工程手册补充
10.1 控制流、状态流与版本
Plan-and-Execute 的工程边界是:Plan 负责承诺,Execute 负责履约,Replan 负责带审计地变更承诺。
计划状态建议:
plan_state:
run_id: run_123
active_plan_version: 3
completed_steps: [s1, s2]
blocked_steps:
- id: s3
reason: "missing approval"
artifacts:
supplier_facts: "artifact://facts/v2"
plan_diffs:
- from: 2
to: 3
reason: "sql_read timeout, switch to cached export"
preserved_steps: [s1, s2]
invalidated_steps: [s3]
10.2 回滚与评测
| 事件 | 是否重规划 | 是否回滚 | 处理 |
|---|---|---|---|
| 工具只读失败 | 是 | 否 | 换数据源或缩小步骤 |
| 写操作 preview 失败 | 是 | 否 | 修改参数后重试 |
| commit 部分成功 | 否 | 是/补偿 | 先 reconcile 外部状态 |
| 用户新增目标 | 是 | 否 | 新 plan_version,保留原约束 |
| 安全策略拒绝 | 否 | 否 | 停止并解释审批路径 |
评测维度:
- Plan Quality:计划是否覆盖目标、约束和依赖。
- Execution Fidelity:执行器是否只执行当前步骤。
- Checkpoint Recovery:中断后是否从正确步骤恢复。
- Replan Diff Quality:变更是否最小,是否保留已验证产物。
- Safety Regression:重规划后是否绕过原审批或权限。
上线清单:
- 每次 replan 必须生成 diff,不允许静默覆盖原计划。
- checkpoint 写在步骤完成后和高风险工具前。
- Executor 的工具调用要带
plan_version,防止旧计划继续写入。 - 生产监控看重规划次数、回滚次数、被废弃 artifact、最终成功率和成本。
11. 权威资料
- Plan-and-Solve Prompting: https://arxiv.org/abs/2305.04091
- ReAct paper: https://arxiv.org/abs/2210.03629
- LangGraph plan-and-execute example: https://github.com/langchain-ai/langgraph/blob/main/examples/plan-and-execute/plan-and-execute.ipynb
- LangGraph graph API: https://docs.langchain.com/oss/python/langgraph/graph-api
- OpenAI Agents SDK tracing: https://openai.github.io/openai-agents-python/tracing/