MIT把智能体套件收成invoke,StuLife远距回忆69.9%反超Letta、花费减半到18美元

Harness as a Language: A Minimalist Agent Framework With Maximal Expressivity

Zhening Li, Joshua Liu, Mateja Vukelic, Nicole Shen, Supriya Lall, Amitayush Thakur, Alex Zhang, Omar Khattab, Jonathan Light, Armando Solar-Lezama

cs.AI

2026-09-23

MIT的JAZ把agent循环收成可递归的invoke,不另外挂记忆或自改进套件。StuLife远距回忆69.9%对Letta的61.8%、花费约一半;AppWorld任务完成率74.2%对ACE的69.9%。

这篇在解决什么

现在的语言模型智能体围着 agent loop 转:模型调工具、看输出、再决定下一步。ReAct 把动作交给模型选,CodeAct 把动作升级成 REPL 里的可执行代码,Recursive Language Models 再把子智能体做成默认能力。长程记忆和跨任务自改进却仍被做成套在循环外面的专用套件,MemGPT/Letta 一类管记忆,ACE 一类管提示词演化。

MIT CSAIL 的 Li、Liu、Vukelic 和 Solar-Lezama、Khattab 等人问的是:一个几乎只剩循环本身的最小 harness,能不能把这些专用套件做的事也做了。答案是框架 JAZ,核心原语就一个:invoke。

方法

先把 invoke 定义成语言层的东西。给任意图灵完备语言加一个原语 invoke(...),语义是:把所有命名参数序列化给语言模型,模型当场写出这次调用的函数体并执行。提示词、工具、普通数据在 invoke 里不作区分,都是参数。因为语言里已经有 invoke,模型写的代码可以递归再调 invoke,子智能体是默认能力。函数式的尾递归 invoke 在理论上就是一个闭合的 agent loop;Python 里这么写浪费栈、也破坏前缀缓存,于是 harness 自动补上尾调用并做成 REPL。这个循环有两条硬性质:

框架侧还有动态作用域 scope()(工具自动传给所有子孙 invoke)、一套 hook(预算、校验、窗口告警、轨迹回放)和 Config(llm, repl, protocol)。默认协议把模型原文整段当代码,REPL 输出过长才截断。

长程任务用尾递归委托:窗口快满时,把剩余工作 return invoke(..., prevhistory=旧历史+history),历史按引用传下去,不靠摘要。实验里用内置 ContextWindowWarning 在窗口过线时塞一条用户消息,告诉模型去委托,并给一段代码模板。

跨任务自改进则让顶层 invoke 当元智能体:改子 invoke 的提示词和 skill 函数,跑下一批任务,读返回的 history 和评测,再改输入。提示词只写工作流,不含代码模板。子智能体递归深度封顶为 2。

对照的 CodeAct 和 CodeAct+子智能体是在 JAZ 里用 hook 抠掉「提示和历史是变量」之后的受控消融,因为已有开源实现的提示词和 REPL 有缺陷,官方数字更差。

结果

StuLife 模拟一个大学生一学期的 1284 个有序任务,典型一局 7000–8000 次环境交互、3000–5000 次模型调用。939 个计分任务里 207 个要回忆 50 个任务之前的信息。模型一律 GPT-5.4 nano (high),3 次独立运行。

方法全量通过率远距回忆通过率花费
CodeAct(逐任务、无记忆)52.5%24.8%$4.4
CodeAct+子智能体(JAZ 重实现)60.0%32.0%$13.1
Letta Agent70.9%61.8%$42.1
JAZ invoke72.6%69.9%$18.3

远距回忆上 JAZ 比 Letta 高约 8 个点,花费不到一半。一个期末虚构协议题,正确选项的课在 497 个任务之前。JAZ 当时已递归 70 层,但 prevhistory 里全文还在,搜协议名一拍就召回。CodeAct+子智能体把用户提示手抄进子智能体,抄丢了「这是虚构协议、必须查课」的说明,按真实世界知识答错。Letta 的 conversationsearch 做关键词加向量检索,顶中的是题目本身或名字相近的别的协议,没有精确子串匹配。

AppWorld test-challenge 417 题,求解端 GPT-5.4 nano,元智能体 GPT-5.4,自改进方法跑 6 次。JAZ 任务完成率(TGC)74.2%,场景完成率 51.1%,花费 $20.9。ACE 接到同一套 CodeAct 上是 69.9% / 47.1%,花费 $30.6,其中元智能体就 $17.1。ACE 的 reflector 和 curator 单题成本大约是 JAZ 元智能体的 10 倍,所以 ACE 只在前 42 题(10%)上学习;JAZ 可以在全测试集上学习还更便宜,因为它按批调度、按需读轨迹,而且除了提示词还能改 skill。

为什么重要

这篇把「记忆系统」和「自改进系统」从独立产品降成循环表达力的推论。历史是对象,就可以按引用传递、按程序检索;顶层能改子调用的输入,就可以当元智能体。对正在堆 MemGPT、playbook、skill 库的人,这是一个明确的对照:先问缺的是专用套件,还是模型没法程序化地碰到自己的上下文。

它仍是框架论文,不是新模型。数字绑在 GPT-5.4 家族和两个基准上。但消融是干净的:同一套 JAZ 里关掉「提示和历史是变量」,远距回忆从 69.9% 掉到 32%。多出来的表达力有着落。

局限与存疑

论文没有独立的局限节。几个口子要自己补。所谓 prompt-only 的长程实验,仍然靠 ContextWindowWarning 塞代码模板,不是模型自发发明尾递归委托。按引用保存全文历史,递归 70 层之后对象会膨胀,评测没报内存和延迟。AppWorld 的自改进每题都能看到完整测试反馈,生产里没有这种老师。StuLife 和 AppWorld 都是模拟器,n 只有 3 到 6。官方 CodeAct 数字更差被归因于提示词和 REPL 缺陷,于是对照也在 JAZ 里重写,框架质量本身是一个混杂因素。只测了 GPT-5.4 家族,换模型表达力够不够,还没有。

术语

原文与代码

社区讨论

相关论文

全部论文解读