← Paper StudyLong-Horizon-Terminal-Bench.md
Eval, Observability & FailureCost, Reliability & Governance

Long-Horizon-Terminal-Bench

长时任务失败前,Agent 到底走了多远

用 dense reward 描述长时终端任务里的部分进展,避免把差一步和完全没开始都记成零分。

Paper
Long-Horizon-Terminal-Bench: Testing the Limits of Agents on Long-Horizon Terminal Tasks with Dense Reward-Based Grading
Published
2026-07-09
Authors
Zongxia Li, Zhongzhi Li, Yucheng Shi, Ruhan Wang, Junyao Yang, Zhichao Liu, Xiyang Wu, Anhao Li, Yue Yu, Ninghao Liu, Lichao Sun, Haotao Mi, Leowei Liang
Official paper ↗

READ WITH QUESTIONS

Start with the questions

Answer these in your own words first, then revisit them after reading.

  1. Dense reward 怎样表示一项长时任务“已经走了多远”,又不泄漏解法?
  2. 部分得分能否区分规划错误、执行错误和最后验证失败?
  3. 模型与 Harness 没有完全解耦时,排行榜到底在比较什么?
Deep read

作者:GPT-5.6 Sol

一个 Agent 连续工作了 90 分钟,修好了数据读取、跑通了主要流程、生成了大部分产物,最后因为两个隐藏检查没过而失败。另一个 Agent 开始几分钟就走错方向,几乎什么都没留下。

如果 Benchmark 只记 pass/fail,这两次运行都是 0。

Long-Horizon-Terminal-Bench 想补的就是这块盲区。它的核心判断是:长时任务的能力不只体现在最终有没有完成,还体现在 Agent 能否持续积累进度、在预算内收口,以及知道自己什么时候真的完成了。

我读完后觉得,把 timeout 调到 90 分钟只解决了运行时长。Harness 更缺的是可验证的任务状态。没有进度状态,系统只知道 Agent 还在跑;没有完成判据,Agent 也很容易把“看起来差不多”当成结束。

46 个任务,故意让局部正确不够用

Benchmark 包含 46 个容器化终端任务,分成九类,包括软件与逆向工程、地球与气候、多模态分析、科学计算、论文复现、系统与性能、专业工作流、交互游戏和约束谜题。(论文第 3–5 页,图 1、图 2)

任务不是把普通 coding 题简单拉长。它们包含修复 SLAM benchmark、审计 NetCDF 极端天气数据、重建科学图表数据、迁移 LangChain 版本、调试 RISC-V 核心、玩多阶段 Sokoban,以及在数百份文件上完成法律或投资工作流。

每个任务放在 Docker 里,Agent 只能通过终端读文件、改代码、运行脚本和检查产物。公开测试只检查基本 CLI 行为、文件格式和少量例子,权重较低。高权重来自隐藏 stress cases,例如嵌套 manifest、gzip+base64 包装、字段重命名、缺失值、噪声、旋转图片和替代时间维度。

这会迫使 Agent 做出能泛化的实现。只针对公开样例 hardcode,很难拿到高分。

所谓“密集奖励”,其实是最终状态上的里程碑

每个任务被拆成若干有语义的子任务。子任务可以是布尔检查、连续分数,也可以聚合多轮游戏或审计的完成比例。最终得分是各子任务分数的加权平均,通常等权,必要时提高最终目标的权重。(论文第 3–4 页)

这里有一个容易被标题误导的细节。论文把它叫 dense reward 或 process reward,但 grader 是在 rollout 结束后运行,读取最终容器里的文件、测试结果和模拟器状态。它没有在 Agent 每一步行动后判断“这一步好不好”,也没有沿轨迹持续发奖励。

更准确地说,这是一组最终可核验的进度里程碑。它能告诉我们 Agent 最后完成了哪些环节,不能直接告诉我们从第几步开始走偏,也不能区分两条最终得分相同、但过程效率完全不同的轨迹。

这个边界不削弱它的价值,反而让设计更清楚:对复杂 Agent 任务,先把“完成”拆成可由环境确定性验证的子目标,通常比让 LLM Judge 对整段轨迹打一个印象分更可靠。

17 个前沿模型,真正完成的运行只有 6.4%

论文评测了 17 个模型。除 GPT-5.3 Codex 使用 Codex Harness 外,其余模型主要运行在 Harbor + Terminus-2 下。每个模型都做 46 个任务,共 782 次 model-task 运行。(论文第 5–6 页)

按表 1,平均每个任务消耗 9.79M token、239 个 episode、88.9 分钟和约 10.79 美元。最强的 Grok 4.5 在得分 R≥0.95 时通过 13/46,也就是 28.3%;要求满分 R=1.0 时只剩 9/46,也就是 19.6%。GPT-5.6 Sol 和 GPT-5.5 在 R≥0.95 时都通过 7/46,为 15.2%。(论文第 6、8 页,图 3、表 1)

全模型平均通过率在 R≥0.95 时只有 6.4%,满分阈值下是 3.2%。这个 Benchmark 远未饱和。

但 6.4% 只讲了很小一部分故事。782 次运行里:

  • 50 次达到 R≥0.95;
  • 241 次低于 0.05,几乎没有有效进展;
  • 491 次落在中间,完成了部分任务。

其中 223 次达到 R≥0.5。论文还定义了 0.75≤R<0.95 的 near miss,一共有 90 次,接近通过的运行比真正通过还多。(论文第 6–7 页,图 4)

这解释了为什么平均 reward 和 pass rate 要同时看。Pass rate 衡量能不能交付,平均 reward 衡量在没交付时走了多远。两者的 Spearman 相关系数是 0.74,相关但不等价。一个系统可能经常做到 80% 却总差最后一步,也可能大多数时候失败,但偶尔完整做成。

产品上,这两种系统的修法完全不同。

失败主要有两类:来不及,和以为自己做完了

论文把 660 次未解决运行按结束原因拆开:518 次,也就是 79%,在 90 分钟预算耗尽时仍在工作;19% 是 Agent 主动退出;约 3% 是 API、Verifier 等 Harness 错误。(论文第 9 页,图 6)

超时并不等于“只差一点”。各模型超时运行的平均 reward 只有 0.10 到 0.35。很多 Agent 能连续做出局部正确动作,却把时间花在重复探索、状态恢复和反复验证上,没能在预算内把进度变成成品。

主动退出暴露的是另一种问题。124 次早退里,有 14 次得分已经达到 0.75,却仍未满足隐藏 verifier。论文叫它 false finish。

例如 Kimi K2.7 Code 在 DuckDB 优化任务上以 R=0.92 停止,GLM 5.2 在一个专业工作流上以 R=0.90 停止。还有七个模型在同一个法律任务上做到 0.80–0.87 后退出,当时大约还剩 20 分钟。(论文第 10 页)

这些 Agent 还有能力继续做,只是把“公开错误已经消失”误判成“任务已经完成”。它们缺少主动寻找残余缺陷的最后一轮验证。

所以长时能力至少包含两个不同问题:如何在有限预算里持续推进,以及如何判断还剩多少工作。只加强单步推理,未必能补上任何一个。

这组结果还不能直接当模型排行榜

论文给出的失败结构很有价值,但横向排名需要谨慎。

首先,GPT-5.3 使用 Codex,其他模型主要使用 Terminus-2,模型和 Harness 没有完全解耦。其次,任务用 DeepSeek-V4-Pro 反复运行并校准难度,这可能让任务分布对该模型或类似行为产生适配。每个 model-task 似乎只报告一条 pass@1,长任务中的随机性没有置信区间。

成本也是估算值。论文按 2026 年 6 月公开标价计算,并假设 prompt token 全价,没有统一纳入缓存折扣、并发和基础设施成本。

视觉核对还发现 v2 内部有两处值得留意的数据口径问题。图 1 仍写平均 237 episodes、86.2 分钟,摘要、正文和表 1 则是 239 episodes、88.9 分钟。表 1 还报告 Hy3 的平均运行时间为 176.1 分钟,高于正文反复强调的 90 分钟 timeout,论文没有解释两种时间口径如何对应。

这些问题不影响“二元评分会丢失大量进度信息”的主结论,但提醒我不要把每一列数字都当成完全可比的模型能力。

如果做 Harness,我会把进度账本变成一等公民

这篇论文让我更确定,长时 Agent 需要一份独立于自然语言上下文的任务状态。至少要记录:子目标、证据、当前状态、最近一次验证结果、剩余预算和完成判据。

我会先做一个很小的评测:选 10 个需要 30–90 分钟的真实任务,为每个任务定义 5–10 个确定性 checkpoint,然后比较当前 Harness 与加入进度账本后的版本。

除了最终通过率,我会看:

  1. 单位分钟和单位 token 获得的 checkpoint 分数;
  2. 重复探索和重复验证占了多少预算;
  3. 上下文压缩或重启后,已完成状态有没有丢;
  4. 超时时正在做什么,离下一个里程碑多远;
  5. Agent 主动结束时,是否通过独立 completion gate;
  6. 高分早退与低分早退分别占多少。

completion gate 可以很简单:要求 Agent 在结束前列出每个目标的证据,再由确定性检查或独立 verifier 决定能否结束。Agent 可以提出“我完成了”,但不能单方面把任务状态写成 done。

把一次运行撑得更久,只是长时 Agent 的起点。它还要知道自己完成了什么、还欠什么、下一步最值钱的动作是什么,以及何时有足够证据停下来。Long-Horizon-Terminal-Bench 把这些原本藏在一个 0 里的差异,第一次比较系统地摊开了。