Appearance
Q92 · 规划模式(Planning Pattern)怎样让 Agent 完成长任务?
用户把 A、B、C 三家门店的销售 CSV 发给智能体,说:“做一份 9 月第一周的每日销售周报,列出各店总额和每天的总额。”直接让模型读完三份文件并马上写报告,看起来省事,实际上容易漏掉“日期格式是否一致”“退款行算不算销售”“每店金额能否加回总计”等关键步骤。报告可以写得流畅,数字却是错的。
规划模式的核心是先把目标拆成有依赖、有产出、可验收的步骤,再执行,并根据工具结果调整尚未完成的步骤。计划让系统知道“先检查日期列,再做按天汇总”,而不是在输出末尾补一句“数据已核对”。但计划只是对未来动作的安排;一张漂亮的任务清单并不能证明文件读到了、计算做对了。Anthropic:Building effective agents、Plan-and-Solve 原论文
先把术语和例子中的数据说清楚
| 词或符号 | 白话解释 | 在门店周报中对应什么 |
|---|---|---|
| 目标 | 用户最后想拿到的结果 | 第一周每日销售额、三家店各自销售额与说明 |
| 子任务 | 大目标里能够单独检查的一步 | 检查三个 CSV 的字段 |
| 依赖 | 后一步能做之前,前一步必须先满足的条件 | 没有日期列,就不能按日汇总 |
| 计划 | 子任务、顺序、输入、产出及验收条件的记录 | “检查字段→统一格式→汇总→核验→写报告” |
| 执行器 | 真正调用文件或计算工具完成步骤的程序 | 读取 CSV 并计算每日销售额 |
| 观察结果 | 工具执行后返回的真实数据或报错 | B 店 CSV 缺少 date 列 |
| 重规划 | 新证据让原计划不再可行时,调整后续步骤 | 暂停汇总 B 店,向用户索要带日期的数据 |
| 检查点 | 保存当前进度,以便中断后继续 | A、C 已读且核验,B 待补日期 |
| 验收条件 | 用什么证据判断这一步或全任务完成 | 各店总额之和 = 每日总额之和 |
date | CSV 中的订单日期字段 | 决定收入属于哪一天 |
amount | 每条销售记录金额 | 计算各店及每日总额 |
store_id | 门店标识字段 | 区分 A、B、C 店 |
下面的数字全部是教学用的虚构数据,并约定三份 CSV 已排除退款与重复记录、金额单位均为元,日期使用同一个时区。A 店有 9 月 1 日 100 元、9 月 2 日 20 元;B 店有 9 月 2 日 80 元;C 店有 9 月 3 日 50 元。正确的店总额是 A=120、B=80、C=50;日总额是 9 月 1 日 100、9 月 2 日 100、9 月 3 日 50;两种加法均得 250 元。如果真实数据含退款、跨时区或不同币种,要先明确口径,不能直接沿用这组简化条件。
一张计划怎样和真实执行接上

图上四个主动作从左到右;“B 店缺日期”是执行或字段检查时发现的阻碍,橙色箭头返回计划。它表示改尚未完成的后续步骤,不表示模型能凭空补出 B 店的日期,也不表示先前读到的 A、C 店数据作废。
一份可执行的计划至少回答四个问题:每一步输入是什么、完成后留下什么、下一步依赖什么、怎么知道结果正确。对这份周报,可写成:
| 步骤 | 输入 | 留下的产出 | 通过条件 |
|---|---|---|---|
| 1. 检查数据 | A/B/C 三份 CSV 和用户口径 | 字段清单、日期范围、异常列表 | 每份都有可解析的 date、amount、store_id,且是第一周数据 |
| 2. 标准化与汇总 | 通过第 1 步的记录 | 按店、按日两张汇总表 | 日期、金额格式统一;退款和重复口径明确 |
| 3. 核对数字 | 两张汇总表与原始记录 | 核验记录 | 120 + 80 + 50 = 100 + 100 + 50 = 250 |
| 4. 写报告 | 汇总表、核验记录、来源说明 | 可打开的周报文件 | 每个数字能追回数据与计算,未知项已标明 |
这个表比“先分析,后总结”更有用:它把“分析”拆成可观察的工作,也指出日期字段是前置条件。若第 1 步不通过,不应让 Agent 继续生成完整的每日周报。
正常执行时,计划需要逐步被证据填满
在正常路径里,执行器逐份读取 CSV。它返回真实字段名和样例行;控制程序把通过验证的字段映射存入任务状态。模型可以建议“用 date 分组求和”,但金额计算由代码或数据库完成,并返回具体值。Agent 随后核对两种汇总总额都等于 250;报告里写明数据范围、计入规则和每店、每日数字,附上所用输入文件与计算结果。
要保存的是“计划项 → 工具结果 → 验证状态”的对应关系。例如计划项“检查 B 店 CSV”不能仅标成 done,还需要记录“字段 date 存在、共有 1 条记录、金额 80 元、检查时间”。这样下次任务中断后恢复,系统知道哪些步骤有证据,哪些只是原本打算做。若保存的只有一段“我已经检查过所有文件”的模型摘要,人无法判断是否真的检查过。
Plan-and-Solve 的原始论文在提示词推理任务中研究先制定计划再解题,以减少漏步骤;工程里的 Agent 还多了外部工具、文件状态、权限和失败恢复。因此可以借用“先拆解、后执行”的直觉,但不能把论文结果直接解释成“给生产 Agent 加一张计划表就会提高成功率”。生产效果仍要在自己的任务集上评测。Plan-and-Solve 原论文
B 店缺日期时,为什么不能硬着头皮照原计划走
假设工具读到 B 店 CSV 只有 amount=80 和 store_id=B,没有 date。这时有两个事实:80 元金额可能属于第一周,也可能不是;即使确定属于第一周,也不知道归在具体哪一天。Agent 不应随手把它放到 9 月 2 日,或借用文件修改时间当销售日期。因为这会把计划中的假设冒充成数据事实。
正确做法是更新任务状态:A、C 店已确认的金额共 100 + 20 + 50 = 170 元;B 店 80 元的日期未核实;完整周报无法验收。随后重规划:优先查用户是否另有含日期的原始订单文件;若没有,向用户请求 B 店导出带日期的记录;若用户允许先交阶段稿,则只交“已核实的 A、C 部分”和明确的 B 店缺口,不把 170 元写成三店总额。
如果工具报的是“文件打不开”,处理又不同:先判断格式或权限问题,尝试允许的转换或请求重新上传;不能擅自假定它缺 date。规划模式要求根据具体观察修正计划,而不是每个错误都给模型一句“请重新规划”。Anthropic 也强调 Agent 在执行中应取得环境的真实反馈,并可在阻碍处暂停向人求助。Anthropic:Building effective agents
初始计划、滚动计划与重规划有什么区别
简单任务可以一次列出完整步骤,随后逐项执行;长任务里的资料不确定性很大,适合先定高层目标和最近几步。可以把计划分成两层:高层里程碑固定住“取得可核验周报”,下一步动作随观察变化。例如先确认字段,只有字段通过才安排汇总;若 B 店缺日期,高层目标不变,但最近一步变成“索要 B 店原始数据”。
重规划不能无限制。触发条件可以由程序或核验器明确列出:所需字段缺失、工具连续失败、用户改变要求、当前方案超出时间/费用上限、计划假设被新证据推翻。每次重规划记录“旧计划为什么失效”“新计划改了哪一步”,避免同一个失败在多轮里反复出现。若必要数据始终拿不到,应把状态标成等待用户或未完成,而不是把重规划当作拖延的理由。
**计划不是授权。**就算计划里写了“把周报发给所有门店”,用户只要求生成周报,系统不能自动给外部邮箱群发。计划通过验收只是内容正确的一环,涉及发邮件、改数据库、发布文件等写操作时,仍要由权限策略和审批决定能否执行。控制程序也应限制最大步骤数、总耗时和费用,不让模型因追求“计划全部打勾”而越过成本边界。
它与 ReAct、工具调用、反射的关系
“规划模式”回答的是先决定整体要走哪些路、每步怎样验收。ReAct 更强调在局部交替做“当前判断→动作→观察”,可以作为某个计划项的执行方法;工具调用是让系统接入外部能力的接口;反射/评估优化用于检查草稿或结果并据反馈修改。它们可以组合,而不是互斥标签。
在周报例子里,规划器列“先检查字段,再汇总”;执行某一步时,Agent 可动态选择文件读取工具,看到 B 店缺日期后修改计划;报告初稿生成后,核验器可发现店总额和日总额不一致,再要求修正。无论组合什么模式,工具提供事实、程序约束动作、验收条件决定结束,不能让模型一边生成数字、一边自称数字已验证。
也不是每份 CSV 周报都需要一个开放式 Agent。如果三家门店每天都有相同格式、规则固定,写一个确定性的 ETL 程序或固定工作流通常更容易维护。规划模式更适合任务步骤可能改变、资料位置不固定或需要在多个工具间组织工作的时候。Anthropic 的实践建议从简单方案起步,复杂度增加要靠测得的任务收益来支持。Anthropic:Building effective agents
怎么评测一份计划有没有帮到任务
只看“计划写得完整”容易失真。可以准备一组任务,覆盖字段完整、B 店缺日期、金额格式错、退款混在销售中、用户中途改口径、文件权限不足等情况;同一环境下比较“直接执行”和“先计划后执行”的最终结果。核心指标是合格周报率、错误数字率、遗漏关键步骤率、合理暂停率、人工接手次数、总耗时与成本。计划生成本身消耗模型调用;如果它只增加格式漂亮的清单,却没有改善质量,就不值得引入。
轨迹分析可以回答更具体的问题:是否在读文件前就猜测字段?是否在 B 店缺日期后仍写完整周报?是否多次重复读同一个文件?重规划是否真的改变了动作?OpenAI 的 Agent 评测文档把完整轨迹中的模型调用、工具调用和护栏动作作为调试与评测对象;对规划模式尤其应把“计划版本”与“执行证据”一起记录。OpenAI:Evaluate agent workflows
面试时可以这样回答
规划模式是先把开放目标拆成有依赖、产出和验收条件的子任务,再执行,并根据工具观察结果重规划。比如做三家门店销售周报,我会先查字段和业务口径,再清洗汇总、核对“按店加总”和“按天加总”是否一致,最后写报告。若 B 店缺日期,原计划里的按日汇总就不成立,应暂停完整报告、记录已核实部分并索要数据,不能让模型猜一个日期。计划只是待验证的安排,工具结果和验收条件才说明任务有没有完成。实现上保存计划版本、每步证据、停止与权限规则;用含缺字段、工具失败和口径变化的任务集验证它是否比固定流程更值得使用。
如果追问“为什么不总是先生成很长的完整计划”,答:任务越开放,越多前提要等工具结果才能确定,过细的早期计划容易过期;保留高层目标,近期步骤具体,遇到新事实再调整。若追问“计划中的某一步显示完成,是否就能交付”,答:还要检查它留下了什么可复核的工具结果,以及最终报告是否满足用户要求。