LLM 智能体的动作空间通常是写死的:规划层说“把杯子搬过去”,执行层只有“移动、抓取、放下”。 LearnAct 让一个更强的学习者 LLM 把常用动作组合写成 Python 函数,再在失败轨迹上迭代修函数或补使用说明。 每个任务只拿 3 个训练实例,剩下的实例用来测泛化。
论文把瓶颈定位在“能做什么”,而不是“怎么想”。ReAct 是提示框架(Table 1 的 Learnable 为 ✗);Reflexion(ReAct+Reflexion)学的是自然语言层面的策略:下一步该想什么、该怎么改提示。动作空间本身没有变。LearnAct 换了一个作用点:让智能体把若干原子动作封装成新的 Python 函数,再用环境返回的失败信息修改这些函数。
学习循环分两段。ActionCreation 先生成动作函数,并为每个函数写描述和使用示例;ActionLearn 在训练实例上跑出失败轨迹,选出错误案例,让学习者 LLM 改函数或补说明。每轮改 K=4 份候选,逐个在训练集上评估,按 μ = psucc + pstepacc 选最好的一份。
在 GPT-4 上,Robotic Planning 平均成功率 82.8%,比 ReAct+Reflexion 的 66.7% 高 16.1 个百分点,比 Voyager 的 72.1% 高 10.7 个百分点;AlfWorld 平均 72.2%,比 Voyager 的 58.0% 高 14.2 个百分点。
但收益不是无条件的:换成 GPT-3.5 当被测模型,Robotic Planning 平均只剩 23.2%;逐任务看也有反例,GPT-4 的 AlfWorld Look 上 Voyager 反而高 4.1 个百分点。所谓“学习”也主要是改已有函数(86% / 92% 的修改是 Function Updating),动作数量几乎没涨。
先分清两件事:策略学习改的是“怎么选”,动作学习改的是“有哪些可选”。
语言智能体的典型结构是:LLM 生成下一步动作,环境执行后返回观察或错误信息,循环到任务结束。动作集合 A 由开发者预先给定,通常是很底层的原语:move()、pick()、drop()。论文在引言里用调酒举例:如果要做一杯 Old Fashioned,标准做法是 muddle sugar;但环境里只有糖浆,没有方糖。智能体如果能改写动作,就可以把“加糖浆”封装成一个新动作推断(依据:§1 的 Old Fashioned 例子;原文说要调整预设动作以避免反复失败,未直接写“封装”);如果动作空间固定,它只能在原有原语上反复失败(§1)。
论文把固定动作空间带来的问题归成两类(§1):
LLM 的规划是在“把饮料调好”这个抽象层做的,可执行动作却只有“移动到某处、抓住某个瓶子”。中间的抽象层要由模型自己在推理里补齐,步骤一长就更容易断。
原语动作往往有前置条件:手上已经有东西时不能再抓;容器没打开时不能倒。每一步都要模型记住并检查这些条件,错误会沿着长序列累积。
作者的判断是:这些失败不全是“想得不够好”,而是“工具不够用”。如果智能体能从失败经验里造出更贴合任务的动作,规划层需要覆盖的步骤会变短,错误暴露面也会变小。这就是论文标题里的 Action Learning。
论文 §5.4 的原话是:“Action learning outperforms the verbal policy learning... possessing proficient skills is essential for the agent to fully realize its potential.” 它没有否认提示和反思的作用,但认为这些手段主要在规划层加码,不能替代动作空间的扩展推断(依据:§5.4 称 verbal policy 与 prompt 对规划的帮助有限、proficient skills 才让智能体充分发挥;原文未直接断言“不能扩展工具”)。
四条路线放在同一张表里,差别主要在两点:动作是不是代码,以及学习是不是闭环。
论文在 Table 1 里把代表性方法按五个维度摊开。“Closed Loop”指有没有环境反馈驱动的闭环学习;“Action Type”指动作是自然语言还是代码;“Learnable”指动作本身能不能被学习;“Transferable”指学到的动作能否迁移;“Learnable Module”指学习发生在策略层还是动作层。
| 方法 | Closed Loop | Action Type | Learnable | Transferable | Learnable Module |
|---|---|---|---|---|---|
| ReAct | ✔ | Natural language | ✗ | – | – |
| ReAct+Reflexion | ✔ | Natural language | ✔ | ✗ | Policy |
| CodeAsPolicy | ✗ | Code | ✗ | – | – |
| Voyager | ✔ | Code | ✔* | ✔ | Action |
| LearnAct | ✔ | Code | ✔ | ✔ | Action |
* Table 1 脚注:Voyager 使用为 MineDojo 定制的 curriculum learning pipeline 来学习新动作。
两条对照最值得注意。第一条是 ReAct+Reflexion:它有闭环,但学到的产物是自然语言策略,动作类型仍是 Natural language,学习模块写的是 Policy。Reflexion 的反思会改进下一次尝试,却不会沉淀成一个可调用的新动作。第二条是 Voyager:动作类型已经是 Code,学习模块也是 Action,但 Table 1 把它的 Transferable 标成 ✔、Learnable 带 MineDojo 脚注;论文用这张表把“能学代码动作”和“能在不同任务间迁移”分开。
CodeAsPolicy 则是另一头:动作是代码,但没有闭环学习(Closed Loop 为 ✗)。它说明“把动作写成代码”本身不够,代码必须进入“执行—失败—修改”的循环,才会随经验变好。
LearnAct 的位置很清楚:动作类型用代码,学习模块放在动作层,学习过程闭环。它要验证的假设是:把学习对象从提示换成函数,智能体的能力边界会随经验扩张,而不只是把同一套动作用得更好。
核心只有两个动作:先生成动作函数,再按失败轨迹迭代修改;采样是为了过滤掉改坏的那几次。
训练开始时只有原始动作集 A0 和基础指令 π0。学习者 LLM F 先读任务说明,生成一组新的动作函数 A′。这些函数是普通 Python 代码,可以调用 pick()、move() 这类原语,也可以使用条件、循环和断言。论文强调的正是后者:代码让动作能表达“如果手上有东西就先放下”这类逻辑,而不只是固定顺序的宏(§4.1)。
函数生成后,还要生成使用说明 πA′。每份说明包含两件事:函数描述(它做什么、需要什么前置条件)和使用示例(在什么场景下调用、参数怎么填)。这两部分会和原始指令一起拼进被测智能体的提示。论文把这一步拆成两个子步骤:先生成描述,再生成示例(§4.1、Appendix)。
每轮迭代,被测智能体带着当前动作集在 M 个训练实例上执行。论文的选择规则是 SelectErrorCase:从失败结果里挑出一条轨迹,把状态序列 s1:T、动作序列 a1:T 和失败信息交给学习者 LLM。学习者有两条修改路径:
直接改函数体。例如发现“手上已有物体时不能再抓”,就在函数里加一个前置检查。论文观察到绝大多数修改走这条路。
函数逻辑不改,只补使用说明。适合“代码没写错,但调用场景不对”的错误。改完的说明会和函数一起进入下一轮提示。
这两条路径是二选一:§4.1 写 “LLM F is free to choose one of them”,Table 4 里两项占比在每个环境都恰好加和为 1(0.86 + 0.14、0.92 + 0.08)。论文还允许学习过程新增函数,所以动作集可能变大。
论文指出,学习者生成的修改并不总是有效,有些只是“看起来像修复”的表面改动。为了降低单次改写的方差,ActionLearn 会独立采样 K 次,得到 K 组候选动作集和说明。每组都在同一批训练实例上跑一遍,算一个分数:
psucc 是训练实例上的成功率;pstepacc 是成功执行的动作步数占总步数的比例,用来衡量动作是否可执行。两项直接相加,没有权重。原文 Eq. 3 写作 μ = psucc + pstepacc,没有下标 k;页面按 Algorithm 2 的 K 份候选样本加 k 索引。分数最高的那组进入下一轮。K 在实验里取 4(§5.3)。这个选择标准同时看“任务有没有做完”和“动作有没有频繁执行失败”。推断 只看成功率可能选中靠反复试错蒙对的版本;把 step accuracy 加进来,会偏向动作本身更可执行的版本(依据:§4.1 对 pstepacc 的定义;论文未单独消融这一选择标准)。
这套流程不是策略梯度:没有奖励模型,也没有对 LLM 参数做更新。所谓“学习”,是在代码空间里做带执行反馈的搜索,产物是一个新的动作库和一份新的使用说明。理解这一点,才能解释后面“动作数量几乎没变、成功率却上去了”的结果。
这一节把实验设置摊开:训练集有多小、每轮要跑多少次、迭代到第几步停。
| 项目 | 设置 | 出处 |
|---|---|---|
| 被测智能体 | GPT-4 或 GPT-3.5 Turbo | §5.3 |
| 学习者 LLM | 全程 GPT-4,包括 ActionCreation 与 ActionLearn | §5.3 |
| 训练实例 | 每个任务随机选 3 个;其余实例全部作测试 | §5.3 |
| 采样候选数 | K = 4 | §5.3 |
| 温度 | 0.0 | §5.3 |
| 学习迭代 | 正文未给固定 maxiter;Figure 3(右)比较了不同最大步数,并称 2 步即达到最好结果 | §5.5 / Figure 3 |
| 重复次数 | 每个任务重复 3 次,报告平均 | §5.3 |
| In-context 示例 | 所有方法统一给 1 个;CodeAsPolicy 与 Voyager 的代码示例与 LearnAct 相同 | §5.3 |
| Robotic Planning | Gripper / Blockworld / Barman / Tyreworld,共 4 个任务;沿用 AgentBoard 与 LLM+P 的环境实现 | §5.1 |
| AlfWorld | Put / Clean / Heat / Cool / Look / Put 2,共 6 类目标 | §5.1 |
| 基线 | Act、ReAct、Act+Reflexion、ReAct+Reflexion、CodeAsPolicy、Voyager | §5.2 |
每轮的实际开销:Appendix A.1 的 Algorithm 2 先采样 K 份候选,再对每个训练实例、每份候选各跑一次 SolveProblem 做评估。按 K=4、M=3 算,每轮至少 12 次完整的智能体执行(4 × 3)。论文没有报告 token 数、墙钟时间或 API 成本;这一项只能在部署时自己测。
迭代到第几步停:论文没有在正文给出固定的 maxiter 数值,而是用 Figure 3(右)比较不同最大迭代步数的效果。它的结论是 2 步就达到最好结果(§5.5 / Figure 3)。继续加步数不会继续涨,反而会因为对训练案例的过度优化而下降;作者把原因归为“过拟合到具体训练案例、误解任务规则”,并在 Figure 10 给了失败案例。
小样本的代价:每个任务只有 3 个训练实例,任务规则和原始动作空间在训练集与测试集之间保持一致,变的是场景和目标。推断 这个设定把“记忆训练实例”排除在外:如果智能体只是背下 3 个案例,测试集上不会涨(依据:§5.3 训练实例与测试实例不相交)。反过来说,推断 3 个实例也不足以覆盖任务的所有分支;论文每个任务重复三次并报告平均,但没有报告标准差,也未说明重复的目的(§5.3);推断 重复是为了降低单次运行的波动。
LearnAct 没有新网络,流程是 Algorithm 1 的主循环,加上 Appendix A.1 的 Algorithm 2 里的采样与选择。
Algorithm 1 的循环体只有三步:在训练集上执行、选出错误案例、让学习者改写。真正让流程转起来的是环境反馈:失败信息既是“哪里出错”的信号,也是下一轮改写的输入。测试阶段不再更新动作,只把最终动作集 Alast 和使用说明 πA_last 带到未参与学习的实例上。
先看两个环境、两个模型的平均账,再看逐任务反例和消融。
下表把 Table 2 与 Table 3 的平均列合在一起,方便横向比较。— 表示原文 Table 3 中 CodeAsPolicy 在 AlfWorld 没有结果(原文单元格为 “-”)。GPT-3.5 的逐任务未转录,仅保留平均列;逐任务数字见原文 Table 2 / Table 3。
| 方法 | Robotic · GPT-3.5 | Robotic · GPT-4 | AlfWorld · GPT-3.5 | AlfWorld · GPT-4 |
|---|---|---|---|---|
| Act | 4.0 | 60.7 | 24.8 | 48.6 |
| ReAct | 3.9 | 63.3 | 16.2 | 53.7 |
| Act+Reflexion | 3.9 | 57.2 | 27.3 | 48.9 |
| ReAct+Reflexion | 7.6 | 66.7 | 18.6 | 54.7 |
| CodeAsPolicy | 1.7 | 27.9 | — | — |
| Voyager | 11.5 | 72.1 | 18.3 | 58.0 |
| LearnAct | 23.2 | 82.8 | 35.8 | 72.2 |
下面把 Table 2 / Table 3 的 7 个方法做成可切换柱状图。选环境与模型,柱子逐条重画;读数区给出 LearnAct 与当前第二名的差值,Robotic 读数取自 Table 2,AlfWorld 取自 Table 3。青灰柱是基线,陶土红是 LearnAct。AlfWorld 的 CodeAsPolicy 原文没有结果,显示为“—”。
配置 A:AlfWorld · GPT-4。LearnAct = 72.2,次优 Voyager = 58.0,绝对差 = 72.2 − 58.0 = 14.2 个百分点(Table 3)。
配置 B:Robotic Planning · GPT-3.5。LearnAct = 23.2,次优 Voyager = 11.5,绝对差 = 23.2 − 11.5 = 11.7 个百分点(Table 2)。
交互只做表格读数与两个数值的减法,不计算平均、标准差或相对提升;因此不存在 ÷N 与 ÷(N−1) 的口径选择。表中数字逐字来自 Table 2 / Table 3。
| 方法 | Blockworld | Gripper | Barman | Tyreworld | Avg. |
|---|---|---|---|---|---|
| Act | 57.1 | 58.7 | 64.7 | 62.1 | 60.7 |
| ReAct | 71.4 | 45.1 | 70.5 | 66.4 | 63.3 |
| Act+Reflexion | 62.1 | 58.8 | 70.6 | 37.1 | 57.2 |
| ReAct+Reflexion | 72.2 | 57.1 | 74.4 | 63.1 | 66.7 |
| CodeAsPolicy | 23.6 | 41.2 | 17.6 | 29.3 | 27.9 |
| Voyager | 66.4 | 76.5 | 80.5 | 65.0 | 72.1 |
| LearnAct | 73.9 | 82.5 | 87.4 | 87.6 | 82.8 |
| 方法 | Put | Clean | Heat | Cool | Look | Put 2 | Avg. |
|---|---|---|---|---|---|---|---|
| Act | 77.7 | 50.5 | 13.0 | 42.8 | 40.8 | 66.6 | 48.6 |
| ReAct | 73.9 | 61.9 | 30.5 | 46.4 | 59.7 | 49.8 | 53.7 |
| Act+Reflexion | 71.4 | 47.5 | 6.8 | 35.1 | 80.2 | 52.4 | 48.9 |
| ReAct+Reflexion | 61.8 | 54.0 | 39.9 | 62.9 | 57.6 | 52.3 | 54.7 |
| CodeAsPolicy | — | — | — | — | — | — | — |
| Voyager | 84.1 | 60.8 | 27.9 | 49.7 | 68.6 | 57.1 | 58.0 |
| LearnAct | 85.6 | 76.2 | 53.2 | 72.0 | 64.5 | 81.5 | 72.2 |
平均账:GPT-4 的 Robotic Planning 上,LearnAct 比 ReAct+Reflexion 高 16.1 个百分点(82.8 − 66.7),比 Voyager 高 10.7 个百分点(82.8 − 72.1)。AlfWorld 上比 Voyager 高 14.2 个百分点(72.2 − 58.0)。GPT-3.5 的 Robotic Planning 上,LearnAct 的 23.2% 比 Voyager 的 11.5% 高 11.7 个百分点;AlfWorld 上 35.8% 比第二名 Act+Reflexion 的 27.3% 高 8.5 个百分点。
反例 1 · 不是每个子任务都赢。GPT-4 的 AlfWorld Look 上,Voyager 68.6% 高于 LearnAct 的 64.5%,差 4.1 个百分点;Act+Reflexion 的 80.2% 比 LearnAct 的 64.5% 高 15.7 个百分点。GPT-3.5 上差距更大:AlfWorld Look 的 Act 48.1% 对 LearnAct 24.1%(差 24.0 个百分点),Put 2 的 ReAct+Reflexion 39.3% 对 16.9%(差 22.4 个百分点);Robotic Blockworld 上 Voyager 18.6% 高于 LearnAct 的 10.0%,差 8.6 个百分点。平均值领先成立,但逐任务并非每一项都领先。
反例 2 · 收益高度依赖被测模型。同一个 LearnAct,在 Robotic Planning 上 GPT-4 比 GPT-3.5 高 59.6 个百分点(82.8 − 23.2),AlfWorld 上高 36.4 个百分点(72.2 − 35.8)。这个模型差与 ReAct+Reflexion 基本持平:LearnAct 的 59.6 / 36.4 对 ReAct+Reflexion 的 59.1(66.7 − 7.6)和 36.1(54.7 − 18.6);Voyager 的对应差值更大,60.6(72.1 − 11.5)和 39.7(58.0 − 18.3);Act 的 56.7(60.7 − 4.0)和 23.8(48.6 − 24.8)更小。真正成立的是绝对水平:GPT-3.5 下 LearnAct 只剩 23.2% / 35.8%,虽然仍是同表最高,但远低于 GPT-4 的 82.8% / 72.2%。
摘要里的 32% 是什么口径:论文摘要写 “by 32% in AlfWorld compared to ReAct+Reflexion”,未注明模型与口径。这里的 32% 推断 是 GPT-4 上的相对提升(依据:摘要未注明模型与口径;由 Table 3 GPT-4 列复算,(72.2 − 54.7) / 54.7 = 32.0%);绝对差是 17.5 个百分点(72.2 − 54.7)。GPT-3.5 上这两个数是原始成功率:LearnAct 35.8%、ReAct+Reflexion 18.6%,绝对差 17.2 个百分点、相对提升 92.5%;不能把 GPT-4 的 32% 套到 GPT-3.5 上。
Table 6 拆动作说明的两个组成部分,Table 7 拆学习流程的三个部件。下表的 Δ 列是“该行 − 完整模型”,负值表示去掉该项后变差。
| 配置 | Robotic | Δ | AlfWorld | Δ | 出处 |
|---|---|---|---|---|---|
| LearnAct | 82.8 | — | 72.2 | — | Table 6 / 7 |
| w.o. description | 78.5 | −4.3 | 72.4 | +0.2 | Table 6 |
| w.o. usage example | 77.4 | −5.4 | 65.4 | −6.8 | Table 6 |
| sampling only | 73.4 | −9.4 | 60.2 | −12.0 | Table 7 |
| w.o. updating function | 75.3 | −7.5 | 62.0 | −10.2 | Table 7 |
| w.o. writing notes | 80.8 | −2.0 | 71.5 | −0.7 | Table 7 |
| w.o. sampling | 73.2 | −9.6 | 62.4 | −9.8 | Table 7 |
三个结论可以直接从表里读出来。第一,采样很重要:去掉采样(每轮只生成一份候选)在 Robotic 掉 9.6 个百分点、在 AlfWorld 掉 9.8 个百分点。只采样、不做 ActionLearn(sampling only)也掉很多,Robotic 9.4、AlfWorld 12.0 个百分点;AlfWorld 上比去掉采样掉得更多(12.0 vs 9.8),Robotic 两者接近(9.4 vs 9.6)。采样本身不产生学习,它只是给学习提供可比较的候选。
第二,改函数比写说明重要:去掉 Function Updating,Robotic 掉 7.5、AlfWorld 掉 10.2 个百分点;去掉 Note Writing 只掉 2.0 和 0.7 个百分点。Table 4 的比例与此一致:Function Updating 占 86% / 92%,Note Writing 占 14% / 8%。
第三,动作描述的作用因环境而异:去掉 description(动作描述)后,Robotic 掉 4.3 个百分点,AlfWorld 基本不变(72.4 对 72.2,高 0.2,非方向性)。原文只报告三次重复的平均,没有给标准差,0.2 这个差不宜当成方向性结论;§5.6 把 Robotic 的下降归因于该环境动作前置条件多,描述对正确使用更关键。
Function Updating:Robotic 86%、AlfWorld 92%;Note Writing:14%、8%。两个环境平均 89%((86 + 92) / 2)的修改在改函数;原文 §5.5 的表述是 “about 90%”,89% 是页面按 Table 4 两列算的。原文未标注这批比例的模型与运行次数。
Robotic Planning 从 3.75 增到 3.83(+0.08);AlfWorld 从 3.44 增到 3.50(+0.06)。推断 成功率的主要来源是修改已有函数,而不是大量新增工具(依据:Table 4 的修改类型占比与 Table 5 的动作数量变化)。原文未标注这批动作数量的模型与运行次数。
这些限制决定了 LearnAct 适合什么场景,以及什么时候不该用。
实验里所有 ActionCreation 与 ActionLearn 都由 GPT-4 完成,论文没有做“换成更弱学习者”的消融;A.6.2 只说这出于 “necessity for substantial model capacity”,没有给弱学习者的对照结果。被测模型换成 GPT-3.5 后,Robotic 平均只剩 23.2%——这是被测模型能力的证据,不是学习者消融。推断 框架的收益至少部分取决于被测模型能否正确调用新函数(依据:Table 2 / Table 3 的模型间差值;论文未单独验证这一机制)。
Figure 3(右)显示 2 步达到最好结果,继续增加步数会下降;作者把原因解释为对训练案例的过度优化和对任务规则的误解,并在 Figure 10 给了失败案例。训练集只有 3 个实例;推断 这会让上述过拟合风险更值得注意(依据:§5.3 每任务 3 个训练实例,§5.5 把退化归因于对训练案例过度优化;论文未做实例数对照)。
Robotic Planning 与 AlfWorld 都是文本化、离散状态的模拟环境。真实机器人面对连续控制、传感器噪声和执行器误差;论文没有做 sim-to-real 实验。
成本没有对账。每轮至少 12 次完整执行(4 份候选 × 3 个训练实例),而论文没有报告 token、墙钟或 API 成本。与只做推理的 ReAct 相比,LearnAct 多出了训练阶段的执行与改写开销;这个开销是否值得,取决于任务重复次数和部署规模。
技能库管理没有涉及。Table 5 的动作数量只从 3.75 增到 3.83、3.44 增到 3.50,规模很小。论文没有讨论当动作达到几十、上百个之后如何索引、检索、组合和淘汰;也没有讨论不同任务学到的函数如何共享。这意味着它目前更像“每个任务现场造几个工具”,还不是一个可维护的技能库推断(依据:Table 5 的动作数量只有 3.44–3.83 个;原文未讨论大规模动作库的索引、检索、组合与淘汰)。
什么时候别用:如果动作空间由外部 API 固定、代码执行有安全风险、或者没有更强的学习者模型可用,LearnAct 的前提就不成立。如果任务只需要一次性推理、没有可重复的训练实例,闭环学习也缺少输入。反过来,在动作原语稳定、任务类型重复、允许执行代码并读取失败信息的场景里,它的方法最直接:把失败轨迹变成函数修改,再把修改后的函数留在动作库里。