OpenAI 只打开两个 API 设置,GPT-5.6 Sol 在 ARC-AGI-3 的分数从 13.3% 涨到 38.3%

模型没换,换的是跑模型的那套程序:保留私有推理 + 用压缩取代删除,每局输出 token 降到约六分之一。
作者:OpenAI07-30 · 9 分钟⚑ 方法教程
🎧 听播客版0:00 / --:--
0:00 / --:--
研究解读 · 小互解读
一分钟速览
  • OpenAI 复盘了一次自家模型「考砸」的经历:同一个 GPT-5.6 Sol、同一套评测题,只把两个 API 设置打开,ARC-AGI-3 公开题库的分数从 13.3% 涨到 38.3%。
  • 问题出在跑模型的那套程序(业内叫 harness)上:每走完一步,模型写给自己看的私有思考被整段丢掉,下一步只能从零重新理解这个游戏。
  • 第二个问题是上下文塞满就删掉最早的消息,连过去按了哪些键都在被挤出去,模型等于没有「过去」。
  • 修法就两个开关:用 Responses API 把上一次响应的 ID 传回去,推理自动留住;再开 compaction,上下文到了阈值就压成一份浓缩摘要接着跑,不删开头。
  • 省钱比涨分更夸张:最高档下每局输出 token 从 290 万降到 49 万;新程序在「高」档就拿到了旧程序拼到「最高」档的同样分数,token 差约 12 倍。
  • ARC 自己 5 月那篇分析给的是另一套解释,三种「建不起世界模型」的失败模式;而经 ARC Prize 核验过的只有旧程序下的 13.33%(公开题库)和 7.78%(半私有题库)。
⚑ 材料来自 OpenAI 官方博客,讲的是自家模型与自家接口,38.3% 这个成绩是 OpenAI 自己跑出来的。经 ARC Prize 独立核验的成绩只有官方程序下的 13.33% 与 7.78%,读数时可留意这条边界。文末列了本站另外去核的几处出处。
开场

同一个模型,同一套题,分数差了近三倍

OpenAI 发了一篇极其具体的踩坑复盘:同一个 GPT-5.6 Sol、同一套评测题,只把两个 API 设置打开,分数从 13.3% 涨到 38.3%,每局烧掉的输出 token 还降到约六分之一。如果你在用 API 跑任何多步骤的任务,这两个开关的开关状态直接决定成绩和账单。

简单来说,过去看到一个模型跑分低,第一反应是「模型能力不行」;这次给出的答案是「跑模型的那套程序把模型的记忆掐掉了」。这套程序业内叫 harness。他们拿 ARC-AGI-3 这个不给说明书的解谜游戏评测做实验,五个推理强度档位各跑一遍。

不知道 harness 是什么?
AI 自我进化,先改模型外面的外壳:Lilian Weng 讲透 harness 工程
跑模型的这套外部程序,业内叫 harness。它到底管什么、能做到什么程度,那篇讲透了。
13.3 → 38.3%ARC-AGI-3 公开题库分数,最高推理档
290 → 49 万每局输出 token,降到约六分之一
48%人类测试者平均分(OpenAI 按公开对局日志估算)

之所以说「考砸」,是因为 Sol 在别的地方不是这个样子。它解决过图论里悬了几十年的循环双覆盖猜想,打通过宝可梦火红(Pokémon FireRed,纯看画面、不给任何游戏信息),在 Codex 里通关过杀戮尖塔(Slay the Spire),还打完了 Baba Is You 的前几关。沃顿商学院的 Ethan Mollick 放出的一段记录里,它在 Codex 里赢下了《杀戮尖塔 2》的每日随机挑战,而这款游戏在 Sol 的知识截止日之后才发售。

Ethan Mollick 展示 GPT-5.6 Sol 在 Codex 里完成《杀戮尖塔 2》每日随机挑战的记录
Ethan Mollick 展示 GPT-5.6 Sol 在 Codex 里赢下《杀戮尖塔 2》的每日随机挑战。这款游戏发售于 Sol 的知识截止日之后,也就是说它没在训练数据里见过这个游戏。图片来源:OpenAI 博客引用的 Ethan Mollick 帖子。

能打这些游戏,却在 25 局 2D 解谜小游戏上只拿一成多的分。下面这段左右对照的录像是同一款游戏(编号 cd82)、同一个 Sol:左边跑官方程序,右边跑 OpenAI 用 Responses API 重写的程序。这局游戏一共六关,在排行榜上没有任何前沿模型能过第一关;换了程序之后,六关全过。

加速播放的对局录像。左边是官方程序,右边是保留推理并开启压缩的 Responses API 程序,模型同为 GPT-5.6 Sol、最高推理档。两侧各带三个计数器:走了多少步、过了几关、烧了多少输出 token。视频来源:OpenAI。
两个分数别看混:7.78% 和 13.33% 都是官方程序、最高推理档下的成绩,差别只在考的题库不同:7.78% 出自半私有题库,13.33% 出自公开题库,两个数都经过 ARC Prize 核验。本文后面拿来对比的 38.3%,跑的是公开题库,所以对应的基准是 13.33%。
考试规则

这考试不给说明书,分数也不是「做对了几道题」

ARC-AGI-3 是 ARC Prize 做的评测,一共 135 个手工搭出来的小游戏环境,公开放出 25 个 demo,谁都能上 arcprize.org 自己玩。这个评测有一条设定贯穿始终:不给说明书。没有物件列表、没有规则说明、没有目标描述,也没有中间奖励分。

模型每走一步,收到的东西就下面这么点:一张 64×64 的格子图,每格是一个 0 到 15 的颜色编号;加一份能按的键,一共七个。

它看到的
一张 64×64 的格子图,每格是一个 0 到 15 的颜色编号
它能按的
RESET
重开一局
ACTION1
上
ACTION2
下
ACTION3
左
ACTION4
右
ACTION5
确认 / 删除
ACTION6
点某个坐标(x、y 各 0–63)
本站画的示意图。左边格子是随手排的色块示意,不是真实关卡;右边七个键的名称和作用照抄 ARC 开源实现里的定义。每个游戏用得上哪几个键也不告诉模型,得自己试出来。

所以想通关只有一条路:边动手边猜规则,猜错了改。按下一个键,看画面哪里变了,推测这个键管什么,再拿下一步去验证。

那个百分比不是「做对了几道题」

ARC-AGI-3 的分数叫 RHAE(相对人类操作效率),它不数你做对几题,只比你和人走了多少步:拿模型通过每一关的步数,去比第一次玩这个游戏的人通过同一关的步数。而且惩罚是平方级的。

切一下看分数怎么塌:人类通关这一关要 10 步
100251分
和人类一样的步数,这一关拿满分。
只多走了一倍步数,分数就掉到四分之一。惩罚是平方级的:步数翻一倍,分数除以四。
多走十倍,只剩 1 分。所以在这个评测里,走弯路的代价远比直觉中大得多。
三组数字是 ARC 计分文档里给的例子。

还有三条计分细节,不知道就读不懂那些分数:每一关的分数按关卡序号加权,越靠后的关越值钱,开头的教学关几乎不计分;单局最高分被「你打到第几关」卡住,最后一关不通,这局怎么高效也上不了 100%;人类基准取的是同一关多个首次玩家里步数居中偏上的那一位,所以一个普通人自己去考,也拿不到 100%,OpenAI 估出来的人类平均分是 48%。

这一条决定了怎么读后面的数

不改变游戏画面的操作,一步都不计入步数 , 工具调用、思考过程、重试,全都不算。

也就是说,13.3% 涨到 38.3%,衡量的完全是「少走了多少步弯路」,跟「少想了多少」没有关系。输出 token 少烧五分之四,是另一笔账,两笔账各自独立。这次一口气赢了两样。

病根

模型不笨,是它每走一步就被清一次记忆

既然分数只罚弯路,那 Sol 的弯路是怎么来的。OpenAI 去翻了几场对局记录,第一眼的观感和 ARC 一样:这模型看着不太聪明,每一步都琢磨很久,还老在原地打转。往下看才发现,模型本身没毛病,毛病出在这套程序上,两处。

第一处,模型每走完一步,它写给自己看的那段私有推理就被整段丢掉。于是要走下一步时,Sol 得从零重新理解这个游戏。它能看到自己按过哪些键、附带的简短备注,但那些键为什么按、当时已经想通了什么、下一步计划是什么,全没了。

第二处,这套程序用的是滚动截断(rolling truncation):上下文一超过阈值,就把最早的消息扔掉。所以不光过去的想法留不下,连过去按过哪些键的记录也在一点点被挤出窗口。

第一步
私有推理「颜料是倒下去的」
走完这步就丢
ACTION5
第二步
私有推理从零再猜一遍
走完这步就丢
ACTION3
第三步
私有推理从零再猜一遍
走完这步就丢
ACTION6
上下文窗口
左边那格是被挤出去的最早一条动作记录:窗口满了,它就没了。
本站画的示意图。划掉的虚线框是模型写给自己看的推理,走完这一步就被丢弃,所以第二、三步只能从空白重新猜;底下那排是留在上下文窗口里的动作记录,塞满之后从最早的一头开始删。
打个比方

这就像让一个人玩解谜游戏,每按一次键就把他刚才的思考清空一次,只给他留一张「你按过右、右、上」的清单。清单上没写他当时已经想明白了什么。他能看见自己走过的路,却想不起来为什么这么走。于是每一步都得重新推理一遍,还很容易把已经排除过的路再走一次。

这两条在 ARC 的开源实现里能直接看到

ARC 把跑评测用的程序开源在 GitHub 上(ARC-AGI-3-Agents,最新提交 2026 年 5 月 28 日)。本站把它拉下来查了一遍,两点都有实物。

第一,全仓所有调用 OpenAI 的地方都走 chat.completions.create,一共 20 处;responses.create 和 previous_response_id 一处都没有。这一点比「设置没打开」更硬:旧的这套接口在结构上就没法把加密的推理内容带回下一轮。所以推理被丢掉这件事跟漏配某个选项无关:选了这套接口,结果就必然如此。

第二,消息栈确实是先进先出砍掉最早的:

ARC 开源评测程序 · agents/templates/llm_agents.py
def push_message(self, message):
    """Push a message onto stack, store up to MESSAGE_LIMIT with FIFO."""
    self.messages.append(message)
    if len(self.messages) > self.MESSAGE_LIMIT:
        self.messages = self.messages[-self.MESSAGE_LIMIT :]

最后一行就是滚动截断:只留最近 MESSAGE_LIMIT 条,前面的直接不要了。公开模板里这个上限是消息条数(普通版 10 条、推理版 5 条)。

一处对不上,如实标注:OpenAI 描述的截断阈值是「上下文超过 17.5 万字符」,本站在公开仓库里只找到按消息条数计的上限,没找到 17.5 万这个数,也没有指明排行榜实际跑的是哪个版本。所以上面那段代码能证明「机制是滚动截断」,不能证明「阈值就是 17.5 万」。
机制

上下文满了不删最早的,改成压成一份摘要

既然病根是记不住,修法就是两件事:让它记得,以及别用删除来腾地方。

OpenAI 家的模型,训练时的形态本来就是「先写一段私有推理,再输出回复或者调用工具」,而这些推理消息是要留在对话历史里的;历史长到装不下,就压缩一下接着往下跑。ChatGPT 和 Codex 就是这么部署的。为了让实验对齐这套生产环境,他们用 Responses API 把 ARC-AGI-3 的程序重写了一遍。

开关一:保留推理,把上一次响应的 ID 传回去

这个开关叫保留推理(retained reasoning)。用 Responses API 时,把上一次响应的 ID(previous_response_id)带进下一次请求,推理就会跨工具调用、跨轮次自动留住。效果有两个:模型每一步琢磨的时间变短了,因为它不用再从头理解这个游戏;而且它明显更会「学」了,策略能连贯起来,不再每一步各想各的。

开关二:用 compaction 换掉滚动截断

compaction 就是上下文压缩。按 OpenAI 的接口文档,用法是在请求里设 context_management 的 compact_threshold:渲染后的 token 数一越过这个阈值,服务端就跑一次压缩,把之前的状态和推理打包成一个加密的压缩条目,接着往下跑。这个条目是不给人看的黑盒,但它把「继续这段对话需要的东西」带过去了。

两种做法的差别一句话说得清:滚动截断是内存满了就把最早的记录删掉,删了就再也拿不回来;压缩是内存满了就把这些记录写成一份浓缩件,腾空之后接着记。前者真的忘了,后者记成了缩写版。

点着走一遍:同一个上下文窗口,两套程序怎么处理「装不下了」
滚动截断官方程序
175K 上限
删掉了,拿不回来
compaction 压缩Responses API
175K 上限
压缩摘要(加密黑盒)
开局。窗口里只有系统提示和第一帧画面,两边一模一样,都还很空。
走了几十步之后。每一步的画面、动作、推理都往里堆,两边都在往上长。
顶到 17.5 万了。再往里塞就装不下,必须腾地方,两套程序在这里分道扬镳。
左边:把最早的一段直接删掉,腾出空间接着跑,删掉的部分再也拿不回来。右边:把整段内容压成一份加密摘要贴在底部,前面学到的东西跟着摘要一起留下。
又跑了一段之后。左边的洞越来越大,早期的观察和动作陆续消失;右边在摘要之上继续记,早期的判断还在摘要里。这就是同一个模型分数差近三倍的地方。
本站画的示意图,两根柱子代表同一个 17.5 万的上下文窗口。斜纹块是压缩摘要,虚线区是被删掉的部分。

OpenAI 自己画的这张图,是这套机制在真实一轮里的样子:

OpenAI 官方示意图:GPT-5.6 Sol 在长任务里的推理、工具调用、上下文压缩三列流程
OpenAI 官方示意图《GPT-5.6 Sol 怎么在长任务里推理》。第一列从用户提问开始,推理、调用工具、拿到工具结果、再推理,一层层往下堆,堆到底部那条虚线(COMPACTION LIMIT,压缩阈值);第二列顶上贴着一块斜纹的「压缩摘要」,下面继续堆新的推理和工具调用,又堆到阈值;第三列同样以压缩摘要开头,然后是推理,最后给出答案。图片来源:OpenAI。

滚动截断还有一个次要的副作用:它让模型大部分时间都在一个接近装满的上下文窗口里干活,而窗口越满,模型表现会略有下降。压缩把窗口重新腾空,也顺带避开了这一点。

数据

五档推理强度全线上移,同分时 token 差约 12 倍

下面这张图把两套程序的实测结果画在一起:横轴是每局烧掉多少输出 token,纵轴是分数,两条线各五个点,对应低、中、高、超高、最高五个推理强度档位。

0 20% 40% 1M 2M 3M 每局输出 token 人类平均 48%(估算) 保留推理 + 压缩 官方程序 同样 13% 出头,token 差约 12 倍
本站按 OpenAI 官方图上的十个数据点重绘,数值一字未改,中文标注和那条同分连线是本站加的。深红实线是保留推理并开启压缩的程序,橄榄绿虚线是官方程序。

两条线的形状差别一眼能看出来:官方程序那条一路往右爬,token 花到每局 290 万,分数才到 13.3%;新程序那条几乎贴着纵轴直上,最高档每局只花 49 万 token,分数 38.3%。

推理强度官方程序 分数官方 每局 token保留推理+压缩 分数新程序 每局 token
低0.9%58,8093.7%84,316
中1.5%207,1887.3%141,939
高5.2%728,18813.4%243,258
超高7.2%1,285,39325.7%428,540
最高13.3%2,900,99738.3%485,485
数值照抄 OpenAI 官方图。每局 token 乘 25 局正好等于官方图上给的总 token 数,和公开题库 25 局对得上。高亮的两行是下面要对比的那两个点。

五个档位全线上移,这是第一层。OpenAI 自己总结的是:最高档下约 3 倍分数、约六分之一的输出 token。

本站按图上两个点算的第二层读法:新程序在「高」档就拿到 13.4%,跟官方程序一路拼到「最高」档的 13.3% 基本同分。而两边花的 token 是每局 24.3 万对 290 万,相差约 12 倍。也就是说,同样的成绩,可以少烧十来倍的钱。这个对比 OpenAI 没有写,是本站拿表里高亮那两行相除得出的。

回过头看前面那条计分规则,这两笔账就分得清了:RHAE 不把思考步数算进步数,所以分数从 13.3% 涨到 38.3%,说的全是模型少走了多少步弯路:记得住自己的判断,就不会把排除过的路再走一遍。而输出 token 降下来,说的是它不必每一步从头把游戏理解一次。一个改动,两处收益,互不重叠。

OpenAI 还做了一段 4 分 29 秒的动画,跟着 Sol 的 17.5 万上下文窗口走完一串关卡:

按 OpenAI 给这段动画写的说明:中间两列展示的是两套程序对上下文窗口的不同用法;记得住过去之后,Sol 每一步想得更少、推进得更快。他们还补了一句实现细节:这里用的上限是 17.5 万 token 而不是 17.5 万字符,两者相差不大,因为绝大多数文本都是格子图,按他们的分词器接近一比一。视频来源:OpenAI。
另一面

ARC 自己的分析给的是另一套解释

OpenAI 说这次细看是被 ARC 的一篇分析启发的。那篇发在 5 月 1 日,ARC 翻了 160 份对局回放和推理轨迹,得出的结论落在另一个地方:模型建不起对游戏的理解。同一批材料,两边看出来的东西并列在下面。

OpenAI 的落点

糊涂来自这套程序:私有推理每步被丢、老动作被截断挤出去,模型没有「过去」,于是学不会。

证据是换掉这两处之后,同一个模型分数近三倍、token 降到六分之一。

ARC 的落点

模型建不起对游戏的工作理解。三种失败模式:

  • 局部效果看对了,全局规则没建起来 , 知道按 ACTION3 会让物件旋转,却没能推到「先把桶转到正确朝向,再蘸颜料」。
  • 拿训练数据里的旧游戏硬套 , 把 cd82 当成沙子物理和 Flood-It,把 ls20 当成打砖块。
  • 过了这一关,但没学会这个游戏 , 第一关靠一个错误的理解侥幸通过,到第二关这个错误理解就把它锁死了。

ARC 那篇的收尾是一句对照:Opus 4.7 压缩出了一个自信但错误的理论,GPT-5.5 则是根本压缩不起来。

它们不是因为没观察到东西才失败的,它们失败是因为没法把观察锚定进一个世界模型。

ARC Prize,《Analyzing GPT-5.5 and Opus 4.7 with ARC-AGI-3》,2026-05-01

两套解释并不互相排斥 , 记不住自己上一步的判断,本来就更难攒出一个连贯的世界模型。但它们确实指向两个不同的位置,一个在程序,一个在模型。

还有两条事实值得摆在一起看。第一,ARC 在那篇的注脚里自己写了:默认测试下 GPT-5.5 不返回推理轨迹,所以那篇的定性分析用的是另一套专门设定跑出来的结果,官方分数不来自那个模式。这从 ARC 一侧印证了推理拿不到这个现象确实存在。

第二,ARC 7 月给 GPT-5.6 系列的成绩页上,对 Sol 本身的评价相当正面:它是这一代里唯一能打的模型,能用游戏自己的语汇正确读懂陌生场景,假设被推翻时会重新规划而不是原地乱撞,而且是第一个真正赢下一整局 ARC-AGI-3 公开游戏的模型(编号 ft09,87%)。所以「这模型看着不太聪明」是 OpenAI 看回放时的观感,不是 ARC 对 Sol 的定论。

如果把这套程序换得更彻底,数字还能高得多。

同一个评测,同样不改模型
只换一层外壳:让 Opus 4.8 和 Fable 5 在 ARC-AGI-3 评测中冲到 99%
一套叫 Schema 的程序,让模型把每个游戏的规则写成能跑的程序、验证过了才动手。公开 25 局自评 98.98%,同样未经 ARC Prize 独立核验。
怎么做

换新接口、保留模型的思考、用压缩取代删除

落到自己手上,OpenAI 给 API 开发者的建议就三条,原话只有三行,没有展开。

✅ 跑多步骤任务时该开的三项设置

对应到具体要写哪几个字段,是下面这几个。

出自 OpenAI compaction 文档,字段名照抄不改
previous_response_id
context_management.compact_threshold
store=false
POST /responses/compact

第一个是把上一次响应的 ID 传回去,推理跨工具调用和跨轮次自动保留。第二个是压缩阈值,渲染后的 token 数一越过它,服务端就自动压一次,不用另外调接口。第三个配上之后,服务端压缩也适用于不留存数据的场景。最后一个是独立的压缩端点,完全无状态,自己决定什么时候压:你把完整的上下文发过去,它返回一个压好的新上下文,原样传给下一次请求就行。

他们的收尾主张是:评测很少单独衡量模型,它同时衡量了一堆看不见的选择:API 设置、程序设计、提示词。而且这不是第一次了,以前也遇到过在公开评测上分数低得意外,一查发现评测方用的通用程序把推理消息丢了。

我们希望这些实验能提个醒:评测很少单独衡量模型,它同时衡量的是一整套不那么显眼的选择 , API 设置、程序设计和提示词。

Ilan Bigio、Ted Sanders,OpenAI,2026-07-29

顺着这条往下想一层:Sol 在这个评测上的成绩,从 ARC 核验的 13.33% 到 OpenAI 自测的 38.3%,再到 Schema 自报的 95.35%,模型权重一直没动过。人类基准是 48%。这几个数摆在一起,一个模型「能力有多强」这句话该怎么算,本身就还没有定论。

来源
How enabling two settings tripled our scores on the ARC-AGI-3 benchmarkIlan Bigio、Ted Sanders / OpenAI·openai.com·2026-07-29
本站说明
两段视频与官方三列示意图来自 OpenAI。折线图由本站按官方图上十个数据点重绘,数值未改,中文标注与「同分 token 差约 12 倍」那条连线是本站加的。输入示意图、失忆示意图、两根上下文柱示意图均为本站所画,格子色块与图例文字为示意,非真实关卡。七个按键的名称与作用、以及先进先出截断那段代码,来自本站拉取 ARC 开源评测程序后自查(最新提交 2026-05-28),全仓 20 处 chat.completions、0 处 responses.create 亦为本站统计。7.78% 与 13.33% 出自 ARC 成绩页,38.3% 为 OpenAI 自测。
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。