Skip to content

08 · 规划与任务分解

让 Agent 先想清楚再动手

📚 系列导航:这是《Agent 开发进阶》的第 8 篇(共 24 篇)。上一篇你给输出上了契约,地基四件齐活;这一篇进核心能力——多步任务里让 agent 先想清楚再动手,别一头扎进死胡同。下一篇:09 · 记忆系统

单步任务你的 agent 已经很稳了,可一遇上"查资料→整理→写报告→发出去"这种多步活儿就翻车:每一步看着都合理,走到第五步才发现方向从第二步就歪了,前面烧的 token 全打水漂。换了更强的模型也不行。问题不出在能力,出在它压根没有"全局"这个概念。这一篇只干一件事:给 agent 装上规划层——先出计划、边走边验、该改就改,外加一个 todo 列表当工作记忆。

看完这一篇,你会拿到:

  • 一段 plan-then-execute 伪代码,含"每步校验计划有效性"的检查点
  • 三个动态重规划的触发信号,僵尸计划和神经质重规划都防住
  • 一个 todo 列表外置工作记忆的落地方案
  • 一组自己跑出来的有/无规划成功率对比数据

01 贪心式翻车:每步都对,整体全错

无规划的 agent 是贪心游走:每轮只看眼前,挑当下最顺的一步走。就像不看地图开车,每个路口都选看起来最通畅的方向,开进死胡同才发现三个路口之前就该左转。多步任务里这是系统性风险:局部最优连起来不等于全局最优,而 agent 没有回头看的本能。

落地判据:任务超过 3 步、步骤间有依赖、走错的代价不可忽略——满足任意两条,就该上规划层。

💡 一句话总结:贪心不是 bug 是默认行为——多步任务必须先给它一张地图。

02 Plan-then-Execute:先出计划,边走边验

规划与任务分解:Plan然后Execute流程

python
plan = llm(f"任务:{task}\n输出 JSON 计划:steps=[{{id,动作,完成判据,依赖}}]")
for step in plan["steps"]:
    result = execute(step)       # 伪代码,接口以官方文档为准
    verdict = llm(f"计划:{plan}\n{step['id']}步结果:{result}\n"
                  f"计划仍成立吗?答 continue 或 replan")
    if verdict == "replan":
        plan = llm("带上已完成步骤与新信息,重新出计划")

预期效果:每步执行完都有一次"计划还成立吗"的检查点。计划质量看两条:每步有可验证的完成判据吗?依赖顺序对吗?还有粒度纪律:让模型"详细规划"只会得到 30 步纸上谈兵——粒度要匹配执行反馈周期,走三步看一眼。

💡 一句话总结:计划的价值不在"定"而在"验"——每步之后问一句"还成立吗"。

03 动态重规划:三个信号,不多不少

僵尸计划比没计划更危险:环境变了,agent 还在忠实执行第 3 步定下的路线。但每步都重规划也是坑——轮数和成本直接翻倍。触发信号收敛到三个:执行结果偏离预期(完成判据没达成)、新信息出现(发现定计划时不知道的事实)、连续失败 2 次(同一步重试无效)。三个都没出现,就沿计划走,别自作聪明。

💡 一句话总结:重规划要有明确触发信号——僵尸计划危险,神经质重规划昂贵。

04 Todo 列表:外置的工作记忆

长任务里 agent 会"忘了自己做到哪"。解法朴素:把计划落成一个它可读写的 todo 列表(文件或结构化字段),做完一项勾掉,新发现追加。好比手术室的核对清单——不靠医生的记性,靠打勾。一招两得:agent 每轮从列表恢复进度,不怕压缩丢状态;你也随时看得到进度,观测性白送。

💡 一句话总结:todo 列表是最便宜的外置工作记忆——勾掉的是步骤,留下的是可观测的进度。

05 动手:加规划层,跑对比数据

任务:① 挑一个 5 步以上的任务(比如"查三个城市天气→对比→写成出行建议文件");② 用第 04 篇的循环直接跑 10 次(无规划版);③ 加上 02 节的规划层再跑 10 次;④ 逐次记录成功与否、轮数、失败原因。

验收标准:一张对比表——两版的成功率与平均轮数,外加失败归因(走偏/死循环/工具错)。

两种结果都正常:规划版明显更稳,把规划层固化进你的循环模板;两版接近,多半是任务太短——3 步以内规划是纯开销,换更长链条的任务再测,这条"何时不值得规划"的判据同样值钱。

06 小结

你现在应该能:判断任务要不要规划层、写出带校验点的 plan-then-execute、用三个信号控制重规划、给长任务配 todo 列表。

规划管的是"这一次"做对;可下一次会话,agent 又失忆重来。下一篇 09 · 记忆系统,给它装记性。


📎 实战案例

一个报表 agent 无规划裸跑多步任务,贪心游走频繁进死胡同。开发者加了 plan-then-execute——先出带完成判据的计划、每步执行后校验有效性、连续失败 2 次触发重规划——同一批任务成功率显著抬升,失败原因也从"莫名走偏"变成可归因到具体步骤。

踩坑

  • 我的 agent 曾抱着第 3 步定下的僵尸计划硬走到第 7 步——环境早变了,"每步校验计划有效性"从此不省。
  • 我让模型"详细规划",它给了 30 步纸上谈兵,执行到第 4 步全面偏离——粒度匹配反馈周期,走三步看一眼。
  • 我也矫枉过正过:每步必重规划,轮数几乎翻倍、账单跟着翻——重规划只认三个触发信号,不做例行公事。