规划与任务分解
复杂任务一步到位很难,拆成小步骤逐个解决就容易得多。规划(Planning)就是让智能体先想清楚"分几步、每步做什么",再动手执行。它是从"单轮问答"走向"自主完成多步任务"的关键能力。
任务分解:把大目标拆成小步骤
分解是规划的基础动作:目标 → 子任务 → 每步的输入输出。例如"写一篇周报"可拆成收集数据、分析亮点、起草正文、排版发送四步,每步都能独立执行与检查。
思维链、ReAct 与规划的关系
- 思维链(CoT):提示模型"一步步思考",是隐式的临时规划,藏在一次回答里;
- ReAct:思考与行动交替进行(想一步 → 调工具 → 看结果 → 再想),规划随行动逐步展开;
- 显式规划:先输出完整计划,再按计划执行,计划可保存、可修改、可审查。
三者的区别:CoT 只在脑子里规划,ReAct 边想边做,显式规划把计划写出来先于执行。
Plan-and-Execute 模式
把"制定计划"与"执行步骤"分成两个阶段,先用规划模型产出计划,再逐条执行:
plan = planner.generate("帮我把一份销售数据整理成汇报材料")
# 计划输出(示例):1.读取CSV 2.计算月度汇总 3.生成图表 4.撰写结论
for step in plan.steps:
result = executor.run(step) # 每步可调用工具
规划器与执行器分离
生产中常把规划器和执行器用不同模型承担:规划器用推理强的模型保证计划质量,执行器用便宜快速的模型逐条落地,成本与质量兼顾。执行器的反馈(失败、缺数据)应能传回给规划器触发再规划。
常见问题与再规划
| 问题 | 表现 | 对策 |
|---|---|---|
| 计划过时 | 执行中情况变化,旧计划失效 | 中断并让规划器基于新情况重新规划 |
| 计划过长 | 步骤太多,中途跑偏 | 分层规划:粗计划先定大阶段,再逐阶段细化 |
| 步骤粒度不当 | 一步过大失败难定位 | 拆到"一步一个可验证结果" |
| 规划与执行脱节 | 执行器不按计划走 | 执行器每步回报状态,规划器检查进度 |
# 再规划片段:执行失败即触发
if step.status == "failed":
plan = planner.replan(original_goal, history, error=step.error)
何时需要规划
规划也有成本(多一次模型调用、更长的响应时间),不必事事规划:
| 任务特征 | 是否规划 |
|---|---|
| 单轮问答、查一次资料 | 直接回答,不规划 |
| 需要调 2~3 个工具 | 走 ReAct 边想边做即可 |
| 多步骤、有依赖、要产出文档 | 显式 Plan-and-Execute |
| 长任务且中途常变化 | 规划 + 分层 + 再规划机制 |
小结
规划的本质是"先想后做":CoT 隐式思考,ReAct 边想边做,Plan-and-Execute 先出计划再执行,适合长任务。规划器与执行器分离可优化成本,而"计划会过时、需要再规划"是必须内置的容错机制。