RLM 架构的提出者 Alex L. Zhang 在最新的博客里,分享了他实践 了 Agent Harness 架构的经验。
他用数学框架论证了一件事:一个好的 harness 能让模型把两个看上去完全不同的任务,但能够像资深专家一样将它们看成「同一个」。
Alex L. Zhang 用等价类和同构给了这个直觉一个严格的描述。
《语言模型 Harness 是组合泛化器》
Alex L. Zhang,2026 年
问题
现代 post-training 已经变成了一种蛮力范式:堆更多的环境、更长的训练视野。为什么?因为前沿 Transformer 在组合泛化——将已学到的能力组合起来解决新问题——这一点上依然很弱。
过去几年,我们通过给 Transformer 加 scaffold 来攻克更难的任务——先是思维链,再是工具调用。但泛化本身一直留给了底层的神经网络和它 2017 年的 token 级归纳偏见。这让每个新领域都要求自己的训练数据投入——scaling 的回报递减。
核心论点
更好的泛化应该是 harness 的活。harness 是那个坐在外部世界和神经网络之间的程序——它决定如何把任意长度和复杂度的环境状态编码成一个或多次 LLM 输入,以及如何决定下一步行动。
"harness 的首要职责应该是承载一个更高层次的归纳偏见,能够将不熟悉、复杂的问题,简化成底层神经网络已经熟悉的问题的组合。"
具体来说,一个好的 harness 应该让每一次对底层 Transformer 的调用都处于"局部 in-distribution"——即每次调用处理的 prompt 在模型的训练数据范围内。一个经常被忽略的事实是:一个好的 harness 可以把那些看起来需要 post-training 突破的问题,简化成现有模型的基础能力。
RLM(递归语言模型)
RLM 是一个具体的 harness 实例,它做两件事:
1. 上下文卸载(Context Offloading):把输入特定的上下文作为符号变量传递出去,根模型调用不直接看到它。这样两个结构相似但领域不同的任务,在根模型的上下文窗口里看起来 token 级别一模一样。
2. 程序化子 agent 调用(Programmatic Sub-Agent Calling):中间计算和信息存在 REPL 里,不被塞回主上下文。标准 agent 用工具调用的信息直接回到主上下文,改变了输出分布。RLM 的子调用让主上下文避开任务特定信息。
这让 harness 能够在轨迹空间上诱导等价类:两个共享潜在结构但领域完全不同的任务(比如 BrowseComp-Plus 的信息搜寻和 OOLONG 的 TREC 问题聚合),在根 LM 眼里是同构的——字面意思上的同构,token 级别相同。
实验结果
RL 训练只在短任务上进行,但在以下维度实现泛化:
长度泛化:训练任务 8-32 倍长的 held-out 任务上保持性能。如果 RLM 学会了一个与长度无关的策略,它直接泛化到更长长度。
策略泛化(跨领域):在三个场景下验证——底层策略相同(聚合、搜索过滤、MapReduce),但输入领域完全不同:
• OOLONG:TREC 问题 → spam 检测问题
• OBLIQ-Bench:写作作者识别 → 数学推理模式匹配
• OBLIQ-Bench Descriptive:Twitter 立场检测 → Wildchat 错误查找
结果:同样训练量的提升,RLM harness 的泛化收益大约是裸 Transformer 的 10 倍。
更深层的含义
作者很小心地没有掉进"我们应该都去手工设计 harness 策略"的陷阱。他的真论点不是"handcrafted > learned"。而是:
"Scaling 数据仍然是进步的最大驱动力,但我们将数据输入的那个机器的结构和它的归纳偏见,将决定这个 scaling 的系数。"
Transformer 的设计空间——主要由可微神经元算子组成——缺少某种根本性的东西。但语言作为一个强大的底层基础,已经让我们能在数年间大规模训练。现在,AI 系统的架构不再被限制在简单的可微算子上。我们可以通过 RL 端到端地训练编码了更高层次、更符号化的归纳偏见的系统。
RLM 是这个方向的一个具体路径。通过上下文卸载和程序化子 agent,它做到了 Transformer 做不好的事:把不同但结构化相似的任务,压缩到同一 token 轨迹上,让 RL 在更小的数据上也能泛化。
alexzhang13.github.io