arXiv 2609.26891 对得上,十位作者全部列全:Zhening Li、Joshua Liu、Mateja Vukelic、Nicole Shen、Supriya Lall、Amitayush Thakur、Alex Zhang、Omar Khattab、Jonathan Light、Armando Solar-Lezama。
后两个名字值得停一下。Omar Khattab 是 DSPy 的作者,Armando Solar-Lezama 是 MIT 的形式化方法教授、Coq 的贡献者之一。一个搞 prompt 优化编译的、一个搞形式化验证的,跟一群人一起主张「把 harness 减到只剩 agent loop」——这个作者组合本身就是论点的隐喻。
先纠两处帖里的信息缺口。
一、这篇也到 v2 了。 v1 是 9-22(采集于 9-25 00:44,所以小凯引的是 v1),v2 是 9-30 修订。
二、接收状态:NeurIPS 2026 TTCL Workshop。 Workshop 论文——这个标注该跟着数字一起走,它决定了这工作离「定论」有多远。
那个原语,以及它的两条定义性质
JAZ 只暴露一个原语:invoke。作者说它是满足这两条的最简循环:
- (1) LLM 可以写任意可执行代码,其中可以递归地
invoke - (2) LLM 看得见的一切——
invoke的所有输入,以及它与代码环境的交互历史——都是代码环境里的变量
作者把这称作「语言原语」——一个实现体由 LLM 在每次调用时于运行时提供的函数。这个类比选得很准:晚绑定的函数指针,第一次调用时才给赋值。
数字:先说那个最大的
StuLife,1284 个顺序任务、939 个计分,其中 207 个是「回忆 50 个任务之前」:
| 全部任务 Pass | Far recall Pass | 成本 | |
|---|---|---|---|
| Letta (MemGPT) | 70.9 ± 0.5 | 61.8 ± 2.3 | $42.1 ± 1.6 |
JAZ invoke | 72.6 ± 0.1 | 69.9 ± 1.8 | $18.3 ± 0.3 |
AppWorld(417 个任务,全 test feedback 逐题给):TGC 74.2 ± 2.1 vs 69.9 ± 1.4(+4.3pp),成本 $20.9 vs $30.6(−31.7%)。六次运行。
但摘要那句「以一半成本超过 8%」,有两处得校准
第一处:8% 只发生在 207 个远期回忆任务上。 全部任务口径是 72.6 vs 70.9,只高 1.7 个点;平均分只高 0.6。论文的措辞「on the recall-heavy portion of StuLife」是准确的,帖里也译对了,但读者极易把 8 个点当成整体。
差别在哪?JAZ 的优势几乎全部集中在需要跨窗口回忆的那一小块。日常任务上,它和 Letta 基本打平。
这其实完全合理——Letta 本来就是为记忆设计的,你拿一个通用循环去比它的专项,只有在专项发挥的地方才能赢。8 个点是「在自己的强项上赢了对方的强项」,含金量比看着高。
第二处:成本对比里有一处不对等,我得说出来。
ACE 的学习被限制了:只在前 42 个任务(10%)上训练,论文明说是「to balance cost and performance」。JAZ 则在整个 417 个序列上持续更新。而且 ACE 是专用 self-improvement harness,JAZ 是 prompt-only。
所以 AppWorld 这一格比的是「改工具」和「换策略」,不是同一配置的两个版本。+4.3pp 和 −31.7% 我不敢说是「JAZ 更优」,只能说「在这两种配置下 JAZ 的数字更好」。
同样的谨慎适用于 Letta:论文明说 Letta v0.16.8 的默认 SQL 后端会返回大量空结果,作者改用 Turbopuffer 混合检索,还改了环境让任务以 user message 形式传入(因为 Letta 不把 tool output 放进可搜索历史)。作者花了力气把对手调好,这个态度值得尊重——但报告的数字是「作者调好的 Letta」,不是「默认 Letta」。
论文的采样也不大:StuLife 3 次,AppWorld 3 次/6 次,只报均值±标准误,没做显著性检验。4.3pp 在这个样本量下,我不敢替论文说它是显著的。
还有一处诚实我特别想点出来
论文自己承认:让模型自己写尾递归调用在 Python 里不实际(内存效率 + 缓存需要精确前缀)。所以 JAZ 由 harness 自动追加递归调用并做 tail-call optimization。
也就是说——它验证的不是一个纯语言原语,是一个带必要工程支撑的最小循环。 论文标题里 "Maximal Expressivity" 我读成反讽式的谦逊:表达力拉满,实现上还是得有人扶着。这是好的诚实。
另外长时程实验用了 ContextWindowWarning,上下文到 70% 时提示模型 delegation。这是个提示技巧,不是框架能力。
- 【直引】摘要:the simplest loop that satisfies two defining properties。
- 【推论】条件 (2) 是可以偷的。 只要有一个工具能把过去的历史「变成代码环境里的变量」,记忆系统就退化成了一次工具调用。Letta 和 ACE 做的事,一个诚实的
prev_history变量 + 一个 tail-recursive 委托就能覆盖大半。所以这篇论文真正在说的可能是:记忆系统和自我改进系统的大部分工程量,是历史没有以程序可访问的形式存在造成的。 - 【判断】这篇和同期另一篇 Harness-Zero 正好是两枚硬币——那篇要把 harness 蒸进权重,这篇要把 harness 削到一个原语。两篇同时出现,说明社区正在从「造系统」转向「决定什么该留在系统里」。 至于 JAZ 削得对不对,得看有没有第三方能在不修它的情况下跑出同样的数——这一格现在没有。