CMU AI AGENTS / 长任务怎样拆,计划为什么必须会变 / 第 19 课

模型列出的步骤,为什么有些根本不能执行?

自然语言计划可能省略前置条件;显式状态、动作与转移可帮助检查可执行性,但形式化规划的成本与环境适用范围也要考虑。

完整讲解 · 条件对照 · 理解检查所在单元与学习顺序官方课件全页浏览

本节要解决的事:自然语言里“接着下单”只有四个字,环境里却要求登录、权限、库存和确认同时成立。

写出步骤,不等于存在可执行动作

任务是买三盒红笔。模型列出“查库存→下单→确认成功”,看上去没有明显问题。但当前会话未登录,或者只有查询权限,这条链路到下单就会失败。更隐蔽的情况是查询时库存三盒,执行前被别人买走一盒;计划在生成时可行,执行时已经不可行。

朴素规划把动作名排成句子,省略了动作的进入条件。显式规划则先描述状态:已登录吗,有创建订单权限吗,库存至少三盒吗,用户已确认吗?动作不仅有名字,还包括需要什么,以及执行后改变什么。这样我们可以在真正调用之前发现明显缺口。

官方原课件 · Lecture 5 · PDF 第 13 页经典规划把状态、前提与效果写出来
积木世界的状态谓词与 pick-up 的前置条件、效果,并给出搬动积木的行动序列

先看 pick-up:积木在桌上、上方为空、手为空才允许拿起;拿起之后手里有物体,手不再为空。不是因为计划里写了拿起,就能忽略这些条件。采购例子是在做同样的状态检查。

将下单动作展开成一张契约

设状态包含 logged_in、can_create_order、stock、approved。教学动作 create_order(3) 的前提是登录、权限、批准这三个布尔条件都为真,而且 stock 至少为 3。成功效果是产生订单编号并把库存扣减三盒;失败则必须返回明确错误,不能在状态里假装出现订单。

这只是简化模型。真实系统可能先预留库存,再支付,最后确认;订单创建与扣库存也可能属于不同服务。我们选择简单规则,是为了看清前提和结果,不把它当成所有电商的业务实现。生产系统必须使用真实接口与事务语义。

观察过程 · 改变条件

只少一个前提,下单还能执行吗?

先做预测,再逐步展开。这里是固定规则的教学回放,不是真实模型测评。

教学构造场景 · 按下方规则逐步回放;不调用真实模型,不代表实际成功率。

这一轮的输入

登录=是,创建权限=是,批准=是,库存 5,需要 3。

  1. 1. 检查前提

    身份、权限、批准均满足;5≥3。

  2. 2. 执行动作

    按教学规则创建订单 O-17。

  3. 3. 应用效果

    库存 5−3=2,并记录 O-17。

检查前提

身份、权限、批准均满足;5≥3。

1 / 3
先预测,再核对结果与原因订单存在,剩余 2

动作效果只在执行成功后写入状态。

语言上的合理与物理上的可做不同

机器人计划“拿杯子”很符合目标,但杯子可能够不到。网页计划“点击退款”也符合目标,但用户角色看不到按钮。课件用 affordance 讨论动作在环境中能够成功的可能性:语言模型觉得哪一步合理,与执行技能在当前状态能否完成,需要一起考虑。

官方原课件 · Lecture 5 · PDF 第 22 页计划合理,还要考虑技能是否能完成
SayCan 对子任务结合语言计划概率与技能可行性预测重新评分

右侧把它与经典规划前置条件联系起来。这里的价值函数是成功概率的预测,不是权限批准,也不是真实执行成功的证明。预测能辅助选择,硬性授权仍要由执行边界检查。

比较确定的小型环境和开放网页。前者可以穷举状态与动作规则,找一条满足前提的路径;后者页面、权限和外部事件不断变化,完整建模成本很高,甚至无法知道全部状态。此时可只显式建模关键前提,再通过观察更新,不必为了形式化把世界假装得比实际更确定。

另一种误解是“检查过就不必再检查”。规划时的检查减少无效尝试,执行时的检查处理竞态与最新权限。它们位于不同时间,不能互相替代。对于产生副作用的动作,最终服务端规则才应决定是否允许状态转移。

理解检查

问题一:用户同意购买,是否自动拥有下单权限? 不会。用户意图与系统授权不同;批准满足任务层前提,接口仍可能要求对应身份和权限。两层都需要成立。

问题二:模型预测成功概率很高,能否绕过执行端检查? 不能。概率是对未知结果的估计,授权和库存约束是实际操作边界。再高的预测也不能保证环境状态未变化。

问题三:创建请求失败后,计划能否先把库存写成 2,方便继续? 不能。除非明确标为假设状态用于模拟,否则会把未发生的效果当作事实。真实状态应保持原值或标为未知,并依据返回结果恢复。

下一问

发现未知条件以后,Agent 有三个选择:继续推理、获取新观察、直接行动。下一节比较它们究竟分别能减少哪种不确定性。