Agent 规划与任务分解是把目标转化为可执行步骤,并根据执行结果持续调整步骤的机制。规划的价值不在于生成一份看起来完整的清单,而在于帮助 Agent 管理依赖、验证中间结果并在环境变化时重新决策。
为什么需要规划
简单任务可能一次模型调用就能完成;复杂任务通常包含多个依赖步骤,例如先收集资料、再修改文件、运行检查,最后汇总结果。缺少规划时,Agent 更容易遗漏约束、过早结束、重复执行或在错误方向上持续消耗资源。
常见方式
- 反应式执行:每获得一次新观察就决定下一步,不预先生成完整计划;适合步骤少、环境变化快的任务;
- 先计划后执行:先拆分任务,再按顺序执行;适合依赖关系清晰的任务;
- 动态重规划:保留高层目标,但在每个关键结果或错误后更新后续步骤;
- 搜索式规划:同时探索多个候选路径,进行评分、回溯或剪枝;适合解空间复杂但成本也更高的任务;
- 分层规划:先确定阶段性目标,再为当前阶段生成更细步骤,避免一次计划过长。
实际 Agent 经常采用混合方式:先建立简短计划,再以“行动—观察—更新计划”的闭环推进。
好的任务分解
一个可执行步骤应当:
- 只有一个清晰目标,并能映射到具体工具或模型操作;
- 写明所需输入、预期产物和完成条件;
- 显式表达与前后步骤的依赖;
- 把高风险写操作与只读调查分开;
- 在关键边界安排验证,而不是等到最后才检查;
- 控制粒度,既不笼统到无法执行,也不细碎到增加无意义调用。
计划不是事实来源
“计划中写着完成”不代表外部任务真的完成。Harness 应根据工具结果、测试、文件状态或人工审批更新步骤状态。模型提出计划,环境证据决定步骤是否完成。
重规划时机
- 工具返回新事实,使原假设失效;
- 某个步骤失败且重试不能解决;
- 用户补充或修改目标;
- 发现新的依赖、风险或权限要求;
- 已达到时间、步骤数或成本预算;
- 验证结果表明产物仍不满足完成条件。
重规划应保留已验证成果,撤销失效假设,并说明计划为什么改变。
最小状态结构
type PlanStep = {
id: string;
goal: string;
status: "pending" | "in_progress" | "completed" | "blocked";
dependsOn: string[];
completionEvidence?: string;
};
结构化计划便于界面展示、程序校验和恢复执行。对于很短的任务,不必强行生成计划;规划本身也有 Token、延迟和维护成本。