SpeedRunner:代码化技能学习,推理成本最高降8倍

Better, Faster, Stronger: Programmatic Skill Learning Best Reduces Agent Cost

论文原文 ↗ 论文发布 解读发布 解读:AI前沿分享

SpeedRunner:代码化技能学习,推理成本最高降8倍 论文图示

在多轮交互与长程任务中,让大语言模型智能体(LLM Agent)通过积累“技能”来适应新环境,已经成为扩展其能力边界的核心手段。然而,当前业界无论是使用自然语言 Prompt 沉淀动作范式(如 Anthropic 提出的 Agent Skills),还是尝试自动合成代码工具,绝大多数探索都将注意力倾斜在任务成功率的提升上,几乎完全忽略了推理成本这一决定技术能否真正落地的关键变量。

ArXiv URL:https://arxiv.org/abs/2608.11338v1

约翰斯·霍普金斯大学(Johns Hopkins University)团队近期的研究《Better, Faster, Stronger: Programmatic Skill Learning Best Reduces Agent Cost》直击这一痛点。作者明确指出,技能学习的终极价值不仅在于让模型“学会做什么”,更在于大幅削减智能体在推理阶段反复进行低水平试错与冗长规划所带来的 Token 开销。该研究提出了一种名为 SpeedRunner 的代码化技能归纳框架,通过将轨迹分析本身定义为编码任务,使智能体能够在纯在线(Online)交互中自动提炼、重构高阶可执行代码技能。实验表明,SpeedRunner 在保持极高任务成功率的同时,将智能体的推理 Token 消耗降低到了基线方案的 $1/8$ 到 $1/2$。

为什么自然语言技能难以降低成本?

当智能体被部署到动态环境中时——例如在斯德哥尔摩实际运营的 AI 咖啡厅,菜单更新与顾客的非常规要求每天都在动态累积——一个静态的策略模型很快就会遇到瓶颈。智能体必须在不发生灾难性遗忘的前提下实现终身学习。

当前主流方案倾向于用自然语言记录技能。智能体通过反思历史轨迹,把成功步骤或策略用文字提炼成系统提示词(System Prompt)或上下文检索库。这种模式存在天然的结构性缺陷:

每一次执行相同或相似的任务,底层的 LLM 仍然必须逐 token 地阅读这些自然语言说明,在脑海中重新模拟物理状态的演化,再一步一步输出原子动作。换句话说,智能体并没有减少计算量,它只是得到了更详尽的提示。当任务步数拉长到几十甚至上百步时,长上下文不仅会带来高昂的推理费用,还会显著放大模型退化、幻觉和动作漂移的风险。

将技能形式化为可执行代码(Programmatic Skills)是突破这一瓶颈的有效途径。图灵机运行确定性代码的计算成本远比大模型自回归解码便宜得多。如果智能体能把探索中确认有效的行为序列或决策控制流直接固化为 Python 函数,后续执行时只需要进行一次高层函数调用,具体的循环、条件分支和原子动作序列便全部交给底层执行器。这实际上是将原本由昂贵的神经网络承担的认知负担,卸载给了便宜且确定性极高的代码运行时。

然而,过去的程序化技能生成方案(例如以 Voyager 为代表的探索机制)往往依赖苛刻且不切实际的假设:它们通常要求环境支持状态“回滚”(Rewind)或重置,需要维护庞大的回放缓冲区(Replay Buffer),并且在把函数加入技能库之前要进行多次离线单测与验证。更致命的是,以往的方法通常直接将完整的历史交互轨迹塞给 LLM 请求提炼代码,但在步数动辄上百步的真实长程任务中,轨迹长度很容易塞爆上下文窗口,导致“大海捞针”式的反思彻底失效。

SpeedRunner 的核心机制:轨迹分析的“代码化代理”

SpeedRunner 破除了对环境重放和外部验证器的依赖,其核心判断是:智能体与环境交互留下的历史轨迹中已经包含了足够丰富的信号,真正的难点在于如何从超长、充满噪声的交互历史中有效提炼出复用模式。

SpeedRunner 的解决方式非常直接:不再让大模型用自然语言肉眼去“看”轨迹,而是派出专门的编码智能体(Coding Agent),用写代码、跑脚本的方式去分析轨迹。

Overview of SpeedRunner

整个框架将智能体的学习生命周期解耦为交替进行的“清醒期(Wake Phase)”与“睡眠期(Sleep Phase)”:

在清醒期,执行策略 $\pi_L$(Actor)搭载当前的技能库 $L$ 与环境展开交互,接收任务指令并生成一批轨迹数据 $H$。此时的 Actor 就是一个配备了一系列可调用 Python 函数的 LLM Agent。

在睡眠期,归纳器 $g$(Inducer)启动。Inducer 本质上是一个具备代码执行环境(Code Interpreter)的编码智能体。面对积累的轨迹集合 $H$,Inducer 并不直接做粗暴的上下文总结,而是运行分析脚本对轨迹进行结构化挖掘:统计每个已定义函数的调用频率、成功率与失败返回值分布,定位频繁重试的原子动作序列,以及追踪哪些抽象导致了性能回退。

在上述示例中,Inducer 通过代码分析发现辅助函数 travel_to_resource 频繁返回“not found”,检查后断定其局部搜索能力欠缺,于是在代码库中新增了带作用域限制的探索函数 _bounded_exploration,自动修复了原函数的缺陷。

为了防止技能库无节制膨胀而重新挤爆 Actor 的上下文,SpeedRunner 引入了一套受现代编程语言启发的公有/私有访问控制(Public/Private Access Modifiers)机制。Inducer 在重构技能库时,被要求将底层支撑函数、特定子步骤设为私有(以单下划线开头命名,如 _bounded_exploration)。私有函数允许被其他高级函数调用,但对 Actor 保持不可见;只有具备完整目标解决逻辑的高阶抽象才会被声明为公开函数暴露给 Actor。这种封装保证了 Actor 的 Prompt 上下文尺寸始终处于轻量可控的状态,避免了候选工具过多导致的注意力分散和性能劣化。

多样化具身基准下的全方位检验

为了验证 SpeedRunner 是否能在不同物理规律与动作空间下通用,论文没有选用那些原子动作高度同质化(例如都退化为 shell 命令与文件读写)的代码基准,而是选择了三个机制各异的交互式具身环境:

  1. ScienceWorld:基于小学科学课标构建的文本交互模拟器,包含复杂的物理、化学与生物规则,拥有 10 个任务大类与 25 个带类型的原子动作。研究者选取了难度适中、非开箱即饱和的“电路组装(Electricity,任务3)”与“分类实验(Classification,任务4)”作为测试环境。

  2. BabyAI:部分可观测的 2D 网格世界指令遵循基准,使用 BALROG 文本包装层,智能体只能感知 6 个离散原子动作。测试子任务为 pick_up_seq_go_to,要求智能体严格按照指定时序抓取物品并导航到目标点。

  3. Crafter:基于 Minecraft 生存机制构建的开放世界沙盒基准。智能体需要在程序化生成的地图中收集资源、合成工具并抵御危险,涉及 18 个原子动作与 22 项预设成就,对长程规划和即时反应有着极高要求。

在所有实验中,Actor 与 Inducer 均统一采用 gpt-5.4-mini 模型作为推理底座。每个环境进行 200 轮在线训练,每 10 轮交互触发一次睡眠期技能重构。评测对比了四种不同经验沉淀机制的代表性方法:无技能累积的 ReAct 基线、以自然语言累积经验的方案,以及同为代码化技能生成的典型代表(如 Voyager、ASI 与 OPO)。

成本与性能的帕累托前沿:不仅更省,而且更强

实验数据展现出极具说服力的趋势:在三个截然不同的基准上,SpeedRunner 几乎无一例外地处于性能与成本权衡的最优前沿(Pareto Frontier)。

在 Crafter 这类超长交互周期环境中,传统代码技能生成方法如 ASI 和 Voyager 表现出明显的“臃肿病”。随着训练步数的推进,它们不断累积单次特定场景下生成的脚本片段,导致技能库迅速突破模型的上下文窗口限制,使得后续的睡眠反思彻底失效。相比之下,SpeedRunner 能够自主重构与归纳,使智能体的平均每集输出 Token 消耗呈现断崖式下降。

更具指标意义的是生成函数的抽象层级差异。通过对各个方法最终生成的代码库进行质性对比,研究发现 ASI 和 Voyager 生成的代码大多局限于固定动作序列的硬编码包装(例如单纯把“向前走三步并砍树”封装为一个函数),无法脱离具体环境的偶发状态。而 SpeedRunner 则在代码执行器的辅助下,自主提炼出了诸如 _choose_progress_target(Crafter 环境下的自适应目标决策器)、solve_sequential_mission(BabyAI 序列任务通用求解器)以及 _find_visible_name_candidates(ScienceWorld 实体探测器)等具备复杂分支判断与状态维护的高阶函数。

这些高层抽象使得 Actor 在面对新任务时,往往只需在开头调用一到两次高阶公开技能,就能自动完成原本需要几十轮与环境反复拉扯交互才能走完的流程。这直接解释了为什么 SpeedRunner 能够实现相较于 ASI 达到 2 至 8 倍的 Token 开销压缩,同时成就解锁率与任务成功率不降反升。

技能调用的本质:图结构揭示的代码质量差异

为了从程序工程的角度定量拆解技能库质量,研究者将各个系统最终沉淀的函数库建模为有向调用图 $G=(V, E)$,其中节点 $V$ 代表归纳出的函数,边 $E$ 代表函数间的相互调用关系。评估聚焦于两个维度:

在 Crafter 环境下的调用图结构数据展示了剧烈的方法分化:Voyager 虽然能够达到 5.7 的调用深度,但其图密度仅有极其微弱的 $0.0005$;这表明 Voyager 的技能库本质上是一堆彼此互不相干、各自为政的扁平孤岛,几乎完全不存在相互调用。反观 SpeedRunner,其调用深度进一步延伸到了 $8.7$,图密度则大幅提升到了 $0.149$。在 ScienceWorld 的平均表现上,SpeedRunner 同样保持了 $6.3$ 的调用深度与 $0.138$ 的图密度。

这一量化对比揭示了两种技能学习范式的本质差异:传统方法是在累加(Accumulation)碎片化的特例代码,而 SpeedRunner 是在复用与重构(Reuse and Refactor)通用的软件架构。通过高密度相互调用的分层结构,智能体成功把通用逻辑下沉为底层公共模块,使得高层逻辑愈发精炼。

代码确定性 vs 环境随机性:打破脆性迷思

将技能固化为代码,业内最普遍的担忧在于确定性代码在随机环境中的脆性(External Randomness Gap)。LLM 实时决策的优势在于柔韧性,面对突发情况可以重新思考;而代码一旦写死动作序列,环境一旦出现微小的扰动或随机事件,硬编码的函数是否会全线崩溃?

为了量化评估这一假设,研究团队在 Crafter 环境中设计了受控实验:在保持其他物理规则完全一致的前提下,系统性地调节僵尸(Zombie)的生成频率——从 0x(无僵尸,纯确定性)、1x(标准随机生成)到 2x(高危随机环境)。

实验表明,随着环境随机性的翻倍,所有智能体的绝对成就得分均因生存压力而有所下滑,但 SpeedRunner 相较于基线模型的相对领先优势反而进一步扩大。定性分析追踪发现,当环境噪声加剧时,SpeedRunner 的 Inducer 在分析失败轨迹时能够准确识别出诸如“受到未预期攻击”这类模式化崩溃点,并自动将防御性机制注入到高阶探索函数中(例如在采矿循环中嵌入局部危险检测与自动避障分支)。

换言之,代码化技能并不等于无脑的静态动作回放(Action Playback)。当代码本身由逻辑智能体编写并具备分支控制、异常捕获机制时,它不仅能抵御环境噪声,更能将应对噪声的最佳实践固化下来,避免智能体在面对危险时因临时推演不及时而丧命。

分布偏移下的适应性与知识留存

终身学习面临的另一大梦魇是灾难性遗忘。当环境任务分布发生阶跃时,已学会的技能是会退化,还是能继续赋能?

研究者在 ScienceWorld 中进行了任务迁移实验:智能体在前半段交互中面对“任务3:电路实验”,中途任务分布突变切换为“任务4:分类实验”。经过后半段训练后,评估系统不仅要测试智能体在新任务上的掌握速度,更要重新回测其在老任务“任务3”上的表现。

数据展现了不同机制在面对知识留存时的不同代偿成本:

SpeedRunner 成为了所有受试方案中,唯一一个在适应全新分布后、对原任务的推理反而变得更加高效轻巧的系统。这说明通过代码重构实现的功能共享,能够正向反哺不同任务域之间的执行效率。

消融实验:谁是压缩推理成本的功臣?

为了探究 SpeedRunner 各个设计模块对最终效率的具体贡献,作者在 BabyAI 环境下实施了细致的消融分析:

分别剥离“面向目标的归纳 Prompt(Goal-oriented prompt)”、“公有/私有访问隔离(Public/Private split)”以及“代码解释器辅助轨迹分析(Code interpreter)”。

消融结果显示,去掉公有/私有权限隔离会导致 Actor 的 Prompt 暴露过多无用的中间工具,从而引起决策混乱;而如果改用传统的粗粒度文本反思 Prompt,归纳出的代码质量会发生钝化。然而,影响最为剧烈的改动在于剥离代码解释器:一旦让 Inducer 失去在沙盒中运行 Python 脚本分析轨迹的能力、退回到仅凭大模型上下文肉眼浏览原始交互 Log,智能体的推理 Token 成本就会发生爆发式反弹,性能稳定性也显著恶化。

这强有力地印证了文章最初的判断:大模型肉眼阅读长文本轨迹的认知带宽是极其低效的。让 LLM 充当“程序员”,通过编写 AST(抽象语法树)分析工具、调用频率统计脚本去解构行为日志,才是从海量交互噪声中提炼高信噪比技能的正确工程姿态。

对未来智能体架构设计的启示

SpeedRunner 的研究结论为当下的智能体工程提供了几项极具现实意义的认知修正:

将技能定义为 Prompt 还是 Code,本质上是选择将认知负担留在昂贵且缓慢的大模型端,还是转移给廉价且确定性极高的本地运行时。在 Agent 步入长程复杂生产环境的阶段,推理开销将成为核心商业卡点,任何试图通过单纯拼接 System Prompt 增强能力的路线,都会很快撞上成本与上下文退化的天花板。

更为重要的是,该研究证明了纯在线代码进化(Online Code Induction)的可行性。我们不再需要给智能体预留完美的“模拟环境回滚机”或复杂的离线强化学习重放池,只要把过去发生的轨迹当作结构化数据集,让一个懂代码的分析器定期重构技能库,就能以优雅的“白班工作、夜间重构代码”的形态让智能体越用越便宜、越用越稳定。

尽管受限于算力成本,作者未能在 SWE-Bench 等特大尺寸代码基准以及旗舰模型(如 full-size 闭源前沿模型)上进行完全铺开的压测,且测试时技能生成的方差仍然揭示出在线自演化系统固有的波动挑战;但这一探索已经清晰标定出了一条极具吸引力的演化路径:未来的自进化智能体,一定是一个既能执行高阶代码、又能持续为自己重构底层代码库的敏捷工程师。