两个 API 设置如何让 GPT-5.6 的 ARC-AGI-3 得分提升三倍

2026-07-29 15 预计阅读时间: 1 分钟
来源: openai.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:10 分钟

在 ARC-AGI-3 这类需要连续观察、推理和行动的基准中,模型能力并不是唯一变量。来源材料指出,为 GPT-5.6 开启两个 API 设置后,评测得分提升到原来的三倍,同时执行效率也得到改善:一个设置负责保留跨请求的推理信息,另一个负责在上下文增长时启用压缩。

这个结果提醒我们:评测智能体时,API 调用方式本身就是系统的一部分。模型如果每一步都要重新建立问题表征,或者上下文膨胀到挤占有效信息,再强的推理能力也会被调用链路消耗掉。

保留推理状态:避免每一步都从零开始

ARC-AGI-3 任务通常不是一次请求即可完成。智能体需要读取当前状态、选择动作、观察反馈,再决定下一步。整个过程更接近一个循环:

观察状态 -> 更新假设 -> 选择动作 -> 接收反馈 -> 修正假设

如果每次调用只传入表面的历史消息,模型可能需要反复推导已经得到的结论。例如,它已经发现“红色方块会阻挡移动”,下一轮却不得不从若干条历史记录中重新归纳这条规则。这会增加 token 消耗,也可能导致前后判断不一致。

保留推理信息的设置改变了这一点。后续请求能够延续前一次调用形成的推理状态,使模型把计算预算用于新观察和新决策,而不是重复恢复旧结论。

这里需要区分“保留推理状态”和“要求模型输出完整思维过程”。工程上需要的是可延续的内部状态或服务端推理条目,而不是把冗长的隐式推理全部展示给应用程序。后者既会增加上下文体积,也可能带来安全和可维护性问题。

自动压缩:控制长任务的上下文成本

状态保留解决了重复推导,但长轨迹仍会持续积累内容。几十轮之后,上下文中可能混杂:

  • 已经失效的早期假设;
  • 重复出现的环境描述;
  • 大量低价值动作记录;
  • 当前决策真正需要的规则和目标。

启用压缩后,系统可以在上下文接近阈值时,把冗长历史整理为更紧凑的表示。它的价值不只是减少 token。更短、更聚焦的上下文还能降低噪声,让模型更容易找到当前步骤需要的信息。

压缩也不是无损操作。如果摘要遗漏了位置、计数、失败条件或尚未验证的假设,后续动作可能建立在错误状态上。因此,适合压缩的是叙述性历史和重复观察;目标、约束、关键变量与未决问题则应保留为结构化状态。

可以这样实践:构造支持状态延续与压缩的调用循环

来源摘要没有给出具体 SDK 字段名,下面是一个可运行、便于改造的 Python 示例。示例默认只打印请求,不访问网络;其中 retain_reasoningcompaction 是说明性字段,接入实际 API 时,需要替换为服务商文档中的准确参数。

将以下内容保存为 agent_loop.py,直接运行即可查看三轮请求如何关联:

import json
import os
import urllib.request

API_URL = os.getenv("MODEL_API_URL")
API_KEY = os.getenv("MODEL_API_KEY")


def call_model(observation, previous_response_id=None):
    payload = {
        "model": "gpt-5.6",
        "input": {
            "observation": observation,
            "instruction": "Infer the current rule and return the next action."
        },
        # Illustrative names: replace them with the actual API fields.
        "retain_reasoning": True,
        "compaction": {"mode": "auto"}
    }

    if previous_response_id:
        payload["previous_response_id"] = previous_response_id

    if not API_URL:
        print(json.dumps(payload, indent=2, ensure_ascii=False))
        return {"id": f"dry-run-{observation['step']}"}

    request = urllib.request.Request(
        API_URL,
        data=json.dumps(payload).encode("utf-8"),
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        },
        method="POST"
    )
    with urllib.request.urlopen(request, timeout=60) as response:
        return json.load(response)


def main():
    observations = [
        {"step": 1, "state": "Agent is left of a red block"},
        {"step": 2, "state": "Moving right failed; position unchanged"},
        {"step": 3, "state": "The cell above is empty"}
    ]

    previous_response_id = None
    for observation in observations:
        result = call_model(observation, previous_response_id)
        previous_response_id = result["id"]


if __name__ == "__main__":
    main()

运行命令:

python agent_loop.py

接入真实服务时,可以这样提供地址和密钥:

export MODEL_API_URL="https://api.example.com/v1/responses"
export MODEL_API_KEY="replace-with-your-key"
python agent_loop.py

生产实现还应把任务事实与请求链标识分开保存。previous_response_id 用于延续服务端状态;当前坐标、剩余步数、已确认规则等关键事实则应保存在应用自己的状态对象中。这样即使请求链失效、超时或需要切换模型,任务也能恢复。

评测时不要只比较最终分数

“三倍得分”很醒目,但无法单独说明改进来自哪里。验证这两个设置时,建议至少记录以下指标:

指标 要回答的问题
任务得分 设置是否真的提高了解题能力?
成功率 提升是否集中在少数高分轨迹?
平均请求次数 模型是否用更少步骤完成任务?
输入与输出 token 压缩是否降低了上下文成本?
单任务延迟 状态管理是否引入额外等待?
压缩发生次数 哪些轨迹依赖压缩才能继续?
状态恢复失败率 请求链中断后能否可靠恢复?

可以使用四组对照实验隔离变量:全部关闭、仅保留推理、仅启用压缩、两者同时开启。每组应使用相同任务、相同随机性配置和相同最大步数。否则,分数差异可能来自采样波动或执行预算变化,而不是设置本身。

上线前的边界与检查项

这两个设置更适合多轮、长轨迹、需要持续修正规则的任务。对于一次性分类、短文本抽取等请求,保留状态和压缩可能只会增加系统复杂度。

采用前应确认:

  • API 是否真的跨请求保留推理状态,以及状态保存多久;
  • 压缩由什么阈值触发,是否能观察到触发事件;
  • 数据保留策略是否符合隐私和合规要求;
  • 请求重试后是否会重复动作或创建分叉状态;
  • 关键任务事实是否独立存储,而不是完全依赖模型上下文;
  • 成本、延迟和得分是否在同一批实验中测量。

ARC-AGI-3 上的提升说明,模型评测不能只盯着提示词和模型版本。对于持续行动的智能体,推理状态如何传递、历史如何压缩,会直接影响模型能够使用多少有效计算。把这两项能力纳入调用层设计,往往比继续堆叠历史消息更有效,但它们仍需要通过对照实验、状态审计和故障恢复测试来验证。


相关推荐