LongHorizon-Harness:别再让智能体自己骗自己了——把长任务拆成"管、干、验"三权分立

那个跑了 400 步还在点同一个按钮的智能体

你让 Claude Code 帮你跑一个长任务,比如"审计这个 WebRTC 通话的 simulcast 分层质量"。它打开 Wireshark,发现一个对话框没响应,点 OK,没反应,再点,还是没反应——然后它就那么点了 400 多步,直到预算烧完。

这不是我编的段子,是这篇论文里实打实的案例(WEB_task_16,基线得分 0.59)。做 Agent 的同学对这种画面应该太熟悉了:任务一长,智能体就开始鬼打墙——在同一个坑里反复横跳,自己宣布"完成了"但其实没完成,或者干脆忘了最初的任务是啥。

说实话,过去一年大家解决这个问题的思路基本都是"等更强的模型"。模型上下文更长了、推理更强了,问题自然就好了,对吧?这篇 LongHorizon-Harness 给了一个不太一样的答案:问题可能不在模型,而在框架——我们让智能体一边干活、一边记账、一边给自己打绩效,这三件事本来就不该由同一个上下文来干。

核心摘要

这篇论文把长时域执行重新定义为任务状态管理问题,提出 LongHorizon-Harness 框架:把单次不断膨胀的会话拆成一轮轮 Manage-Execute-Audit 循环,Manager 持有持久任务状态并派活,Executor 在全新上下文里干活,Auditor 以只读权限独立验收。同一个 Qwen 3.7-Plus 模型,换框架不换模型,WeaveBench 通过率从 51.8% 直接干到 80.7%,OSWorld binary completion 翻了三倍。我的判断:这不是底层算法突破,是一套非常扎实的系统工程整合,但它戳中的痛点是真的——"自我报告进度"确实是当前长任务智能体最脆弱的环节。值得做 Agent 工程的人细读。

论文信息

  • 标题:LongHorizon-Harness: Advancing Long-Horizon Agents for Real-World Tasks
  • 作者:Ziyu Ma, Hailang Huang, Shun Zou, Yong Wang, Shidong Yang, Yiming Hu, Fei Wei, XiangXiang Chu
  • arXiv:2608.01964,2026 年 8 月 3 日提交,29 页

📖 为什么长任务会崩:不是模型笨,是记账方式错了

先看一个大背景。METR 的报告显示,高级智能体能完成的任务时域大约每 7 个月翻一倍,最近几代模型已经加速到 4 个月翻一倍。任务越来越长,原本能糊弄过去的设计缺陷就藏不住了。

论文把长时域执行的崩溃归成三个互相纠缠的病:

复合错误与目标漂移——早期一个小错沿着轨迹滚雪球,后面的决策全建立在错误前提上;上下文腐化——交互历史越堆越长,真正相关的信息反而捞不出来,过了某个阈值性能断崖式下跌;任务状态丢失——智能体根本没能力在整个执行过程中维护一份"我到底干到哪了"的准确账本。

这三个病大家多少都有体感。但我觉得论文最尖锐的观察是下面这个——现有框架有两个结构性缺陷:

其一,任务执行和任务状态管理共享同一个不断膨胀的上下文。你想想看,执行历史越长,"现在进行到哪一步"这个状态就越难从历史的垃圾堆里翻出来。其二,执行和验收是耦合的——智能体自己判断"我做完了",这个自我判断被写进状态,再传给后面的决策。错误的自我评估就这么一路传下去。

打个比方——这就好比让施工队自己盖楼、自己记施工日志、自己验收签字。楼盖歪了他会在日志里写"盖歪了"吗?不会的,他会写"基本完成"。

我之前在做内部一个 Agent 项目时踩过一模一样的坑:executor 报"文件已生成",下游拿这个声明当事实用,结果文件名对但内容是空壳。后来我们加了独立的验证步骤才稳住。所以看到这篇论文把这个直觉系统化,我的第一反应是——对,就该这么干。


🏗️ MEA 循环:把盖楼、记账、验收拆给三个人

先给一句话的直觉:别再让一条无限变长的对话从头跑到尾,改成一轮轮"派活—干活—验收"的短循环,跨轮只传递经过验证的状态。

图1:从"单一膨胀会话"到"经审计的状态转移"

图1:论文的总览图。左边是传统模式——一个智能体被不断增长的交互记录淹没,靠"自我报告的进度"判断完成度,最终 drift(漂移)。右边是 LongHorizon-Harness:Manager 拿着任务状态蓝图派活,Executor 在脚手架上干完一轮后上下文直接进垃圾桶,Auditor 拿放大镜独立检查并盖章"Certified",跨轮唯一保留下来的记忆就是任务状态和审计报告。底下还画了三个角色都可以热插拔不同后端(Claude Code、Codex 等)。

这张图把核心思想画得挺清楚的。下面是更工程向的完整架构:

图2:LongHorizon-Harness 完整架构

图2:MEA 循环的技术细节。左侧 Manage 模块:输入是原始任务和历史审计报告 V₁...Vᵢ₋₁,内部做状态读取、依赖判断,输出子任务合约 cᵢ——注意它标注了"never sees environment"和"不能改文件、点 GUI、跑命令"。中间 Execute 模块:GUI Agent(截图/点击/滚动/输入)和 CLI Agent(shell/文件编辑/编码/测试)两类,每轮全新上下文,预算 20 turns / 1800s,轨迹用完即弃。右侧 Audit 模块:只读检查环境,产出报告 Vᵢ,包含完成状态(complete/incomplete/blocked)和完整性状态(clean/suspect/violation)。底部是 AgentAdapter 接口层,同一套后端、不同的角色边界。终止条件写着:status = complete AND integrity = clean。

Manager:只动嘴,不动手

Manager 持有持久任务状态,决定下一步干什么。它能看到原始任务、当前状态、所有累积的审计报告,但没有任何环境接口——不能改文件、不能点按钮、不能跑命令。

每轮的转移写成公式是这样:

\[(S_{i+1}, q_{i+1}, c_{i+1}) = \Phi_{\mathrm{mgr}}(\mathcal{T}, S_i, V_i)\]

工程上怎么理解?Manager 就是一个纯函数式的状态机:吃进去任务 \(\mathcal{T}\)、当前状态 \(S_i\)、上一轮的审计报告 \(V_i\),吐出来新状态、一个动作决策 \(q\)(execute / done / blocked / ask 四选一)和一份子任务合约 \(c\)。它不接触环境,所以它没法"亲眼看到"什么,它对世界的全部认知都必须来自审计报告——这就从机制上逼它只信验证过的事实。

任务状态里的记录分三种:requirement(从原始任务拆出来的目标和约束)、artifact(执行中产出或修改的东西)、fact(后续轮次需要的环境信息)。每条记录标着 completed / pending / blocked / untrusted,而且只有在干净审计证据支持下才能标 completed。子任务合约 \(c_{i+1}\) 则包含即时目标、验收标准、边界约束和相关审计报告引用——相当于给 Executor 发一张带验收单的工作票。

Executor:每轮都是第一天上班

Executor 是唯一被允许真正改动环境的角色:

\[(e_i, o_i) = \Phi_{\mathrm{exec}}(\mathcal{T}, S_i, c_i; e_{i-1})\]

注意这个公式的输入里没有之前轮次的交互轨迹。每次调用都是全新上下文,只拿着合约 \(c_i\)、当前状态 \(S_i\) 和相关报告进场。几十步的操作压缩成一份输出报告 \(o_i\),然后轨迹直接丢弃。

这个设计真的挺反直觉的——扔掉历史轨迹,不怕丢信息吗?作者的回答很干脆:该留下的信息应该已经被 Auditor 验证并写进任务状态了,留在原始轨迹里的全是噪音。上下文腐化这个病,治本的办法就是不给它腐化的机会。

Executor 分 GUI 和 CLI 两种能力面,通过 AgentAdapter 接口可以直接套现有后端——Claude Code、Codex CLI、OpenClaw,保留它们各自的工具使用循环。这也是我觉得这套东西工程上最务实的地方:它没有要求你重写 agent,只是在现有 agent 外面包了一层角色边界。

Auditor:拿着放大镜的只读质检员

Auditor 从一个排除执行器内部推理的全新上下文出发,独立验证执行结果:

\[v_i = \Phi_{\mathrm{aud}}(\mathcal{T}, S_i, c_i, o_i; e_i)\]

三条硬约束:只读权限(任何对环境状态的改动都会被记为完整性违规)、独立判断(自己拿环境跟验收标准对比,不听 Executor 的一面之词)、能力分化(GUI Auditor 只做观察性交互,CLI Auditor 只跑非变异性命令)。

审计报告 \(v_i\) 里有三样东西:完成状态(complete / incomplete / blocked)、完整性状态(clean / suspect / violation)、以及支持的任务状态更新——已验证事实、证据、剩余差距。

整个循环的终止条件也值得一说:审计状态满足原始任务、没有可推进的子任务、需要人类输入、或者 25 轮预算耗尽——四者其一即停。


🧪 实验:同一个模型,换个框架能涨多少

实验配置先交代一下:主力模型 Qwen 3.7-Plus,额外用 Claude Opus 4.7 做泛化验证。Executor 每轮 1800 秒超时,Manager/Auditor 各 300 秒,最多 25 轮。三个基准:WeaveBench(114 个 GUI+CLI 混合长任务,8 个领域)、OSWorld 2.0(108 个桌面工作流,人类完成中位时间约 1.6 小时)、Terminal-Bench 2.1(237 个纯命令行任务,每任务跑三次)。

图3:四个基准上的主结果

图3:四联柱状图。左上 WeaveBench:LH-Harness 加持的 Qwen 3.7+ 拿到 80.7,比同模型裸 Claude Code 的 51.8 高出 28.9 个点,也压过 Opus 4.7 裸框架的 41.2。右上 Terminal-Bench 2.1:77.2 vs 基线 69.7。左下 OSWorld 2.0 binary completion:8.3 vs 2.8,三倍。右下 WeaveBench Games 子集:Opus 4.7 加框架 80.9 vs 裸框架 68.0,Qwen 加框架 73.3 vs 裸框架 52.4。

WeaveBench:涨 28.9 个点,弱模型反杀强模型

模型 框架 PassRate↑ Overall↑
Claude Opus 4.7 Claude Code 41.2% 0.532
GPT-5.5 Codex CLI 35.1% 0.499
Qwen 3.7-Plus Claude Code 51.8% 0.702
Qwen 3.7-Plus LongHorizon-Harness 80.7 个百分点 0.835

80.7% 对 41.2%——同一个基准上,Qwen 加框架比 Opus 4.7 裸跑高出将近一倍。这个数字还是很能打的。

分领域看更有意思:

领域 基线 LH-Harness 提升
Desktop 83.3% 88.9% +5.6pp
Document 76.5% 100.0% +23.5pp
Games 29.4% 58.8% +29.4pp
Web 46.7% 73.3% +26.7pp
Data Analysis 53.8% 84.6% +30.8pp
DevOps 66.7% 91.7% +25.0pp
Spatial/3D 16.7% 66.7% +50.0pp
Design 20.0% 80.0% +60.0pp

我的第一反应是去看提升最小的那一行。Desktop 只涨了 5.6 个点,因为基线本来就有 83.3%,天花板近了。而 Design 从 20% 涨到 80%——基线越烂的任务,框架救回来的越多。这个 pattern 和论文自己的解释一致:框架主要在"打捞那些本来会彻底失败的轨迹",拉的是下限,不是上限。

不过得泼一点冷水:Design 和 Spatial/3D 这两个暴涨的领域样本量很小(从百分比反推大概就 5-6 个任务),+50pp、+60pp 这种数字统计噪声不小。大样本的领域(如 Games 17 个任务)涨 29.4 个点,这个更可信。

OSWorld 2.0:三倍提升,但绝对值仍然难看

模型 框架 Binary↑ Partial↑
Claude Opus 4.8 Batched actions 20.6% 54.8%
Qwen 3.7-Plus Single action 2.8% 21.5%
Qwen 3.7-Plus LongHorizon-Harness 8.3 个百分点 35.2 个百分点
Claude Opus 4.7 Single action 20.6% 55.8%
Claude Opus 4.7 LongHorizon-Harness 35.3 个百分点 66.9 个百分点

"翻三倍"听起来很唬人,但说实话,2.8% 到 8.3% 的绝对水平依然很惨——OSWorld 的 binary completion 本身就是业界公认的地狱难度,最强的 Opus 4.7 加框架也就 35.3%。GUI 长任务离"可用"还差得远。

有意思的是 Partial 分数:Qwen 从 21.5% 涨到 35.2%。很多任务没完全做成,但做对了更多步骤。这也呼应前面的判断——框架在打捞下限。

Terminal-Bench 2.1:挤进排行榜第一梯队

模型 框架 平均分
Qwen 3.7-Plus Claude Code(基线) 69.7%
Qwen 3.7-Plus LongHorizon-Harness 77.2 个百分点
GPT-5.6 Luna LongHorizon-Harness (Codex) 83.1 个百分点

图4:Terminal-Bench 2.1 排行榜

图4:Terminal-Bench 官方排行榜截图。LH-Harness + Codex(GPT-5.6 Luna, max)拿到 83.1,与 Codex 裸跑 GPT-5.5 xhigh 的 83.1 并列,仅次于 Claude Code (Fable 5) 的 83.8。LH-Harness + Claude Code(Qwen 3.7-Plus)的 77.2 排在第十名左右,比同模型裸 Claude Code 的 69.7 高了 7.5 个点。

这张排行榜值得多看一眼。Qwen 3.7-Plus 裸跑只有 69.7%,在榜上属于中下游;套上框架后 77.2%,直接超过了 Codex 裸跑 GPT-5.6 Luna 的 75.7% 和 mini-SWE-agent 的 76.2%。框架把二线模型送进了第一梯队的尾巴。

不过我也注意到一个细节:榜上带星号的条目是官方跑的,LH-Harness 的条目没带星号——说明是作者自己复现的评测。分数大概率没问题,但严谨起见,这个区分读者应该知情。

按任务类别拆开看:框架不是万能药

Terminal-Bench 的分类数据我觉得比总分更有信息量:

类别 任务数 基线 LH-Harness 变化
system-administration 27 59.3% 88.9% +29.6pp
games 3 0.0% 33.3% +33.3pp
data-processing 12 75.0% 91.7% +16.7pp
scientific-computing 24 37.5% 54.2% +16.7pp
software-engineering 78 70.5% 83.3% +12.8pp
debugging 15 93.3% 100.0% +6.7pp
security 24 83.3% 87.5% +4.2pp
data-science 24 79.2% 66.7% 降 12.5pp
mathematics 12 91.7% 75.0% 降 16.7pp

看到最后两行没有?data-science 掉了 12.5 个点,mathematics 掉了 16.7 个点。框架不是白赚的。

作者的解释我基本买账:math 和 data-science 这类任务,性能瓶颈在模型的单次推理能力本身,不在状态管理。你给它加 25 轮的 Manager-Auditor 开销,等于在一个本来一步就能想明白的问题上强行套流程,反而引入了干扰——Manager 的派活可能把一个连贯的推理链切碎。这其实给工程落地划了一条很重要的边界:状态管理框架只在"失败主要来自状态丢失"的任务上有效,对"失败主要来自能力不足"的任务是负资产。

按难度拆开看则符合预期:Easy 从 83.3% 到 100%,Hard 从 53.3% 到 65.6%(涨 12.2 个点),Medium 只涨 4.2 个点。难点任务才是这套框架的主战场。


💰 天下没有免费的验收:成本账单

聊完成效,得聊聊账单。这部分论文给得挺坦诚,我觉得比主结果更有决策价值。

图5:成本-性能前沿

图5:两张散点图,横轴都是每任务输出 token 数。左图 OSWorld binary completion:LH-Harness(蓝色五角星,Qwen 3.7-Plus)大约烧 100K token 拿到 8.3%,对比之下 GPT-5.5 用约 50K 就拿到 13%,Claude 系沿着右上方的效率前沿排布。右图 Score 维度:LH-Harness 同样偏离效率前沿——同样的 token 预算,强模型裸跑拿的分更高。

这张图其实挺扎心的。LH-Harness + Qwen 的组合不在成本-性能前沿上——它用 3.6 倍的 token(28.9K → 104K/任务)换来了三倍的 binary completion,但这个性价比打不过直接换强模型。

但故事还有另一面,也是我觉得全文最有意思的一个发现:

模型组合 Token 消耗变化
Opus + 框架 16.5M → 11.1M(省了约三分之一
Qwen + 框架 10.7M → 34.3M(涨了 3 倍多)

强模型套框架反而 token。原因想通了其实很顺:强模型一两轮就能把子任务合约做干净,审计一次过,不用反复重规划;弱模型每轮都留下一堆 gap,Manager 就得不停地派活、审计、返工,轮次越滚越多。

所以这套框架的成本结构是"惩罚弱者、奖励强者"的。它不是一个让弱模型变便宜的方案,而是一个让强模型变稳(甚至更省)的方案。这个结论对选型太关键了——如果你因为成本原因用不起 Opus 才选 Qwen,那套上 LH-Harness 可能反而把你的 token 账单炸上天。

再看计算量在三个角色间怎么分布:

图6:跨角色的计算分布

图6:三个基准上 Manager / Executor / Auditor 的 token 占比,以及和基线的总量对比。WeaveBench:Manager 3%、Executor 78%、Auditor 19%,总量 27.4M vs 基线 12.0M。OSWorld:2% / 73% / 25%,104K vs 28.9K。Terminal-Bench:8% / 54% / 38%,3.5M vs 4.6M——注意这个基准上框架反而比基线省 token。

Manager 的开销出奇地低(不到 10%),这说明"做计划"这件事根本不需要多少算力。真正吃 token 的是 Auditor(19%-38%)——独立验证不便宜。而 Terminal-Bench 上框架总 token 反而比基线低,又一次验证了"任务越吃状态管理,框架越划算"的规律。


🔬 案例研究:框架到底救回了什么

数字之外,论文给了几个轨迹级的案例,我觉得这是全文最能建立直觉的部分。

案例一:400 步鬼打墙 vs 证据驱动恢复

图7:WebRTC 审计任务的轨迹对比

图7:上半部分是基线(得分 0.59):Wireshark 的 "Decode As" 对话框无响应,智能体反复点 OK 按钮,400 多步后预算耗尽——失败从未被外化记录,任务原地空转。下半部分是 LH-Harness(得分 0.92):渲染三层码率曲线、悬停采集 fps=0 的掉层证据、每张截图对应报告里一条可验证命题,最后加载 21018 个包做交叉验证。

基线的死法很典型:局部失败(对话框卡死)被注意到了,但只存在于执行上下文里,从来没有变成一个"状态对象"。上下文一长,这个失败信息被淹没,智能体又回到了同一个对话框。

LH-Harness 的差别在于:第一轮没搞定,Auditor 报告里就写下了"缺少 f-layer 掉帧证据"这个 gap,Manager 下一轮直接从 gap 派生新子任务——换个路径去收集证据。失败被物化成了状态,就不会被遗忘。

案例二:先取证,再修复

图8:Calc VLOOKUP 修复任务

图8:基线(得分 0.45)急着修公式,直接改 XML,把"修复前"的取证现场破坏了——前后状态对不上,证据链断了。LH-Harness(得分 0.87)先锁定修复前的截图证据,再修复,再逐单元格验证 VLOOKUP 公式,最后由 verifier 审查完整 9 张截图序列,确认时间一致的证据链。

这个案例戳中的是另一个微妙问题:有些任务要求的不只是"结果对",还有"过程合规"。基线直接上手修,结果确实修好了,但任务要求的取证流程没走完,得分照样腰斩。Manager 把"先取证"写成了子任务的依赖关系,顺序就不会乱。

案例三:CLI 环境下的 6 轮攻坚

图9:Terminal-Bench SQLite gcov 插桩任务

图9:Terminal-Bench 上一个编译 SQLite 并启用 gcov 插桩的任务。左边基线(reward=0):一整条raw命令流水,中途 PATH 设置错了没人发现,三个验证测试挂了一个。右边 LH-Harness(reward=1):6 轮 MEA 循环,每轮的合约、阻塞项、审计报告都显式记录,中途审计发现 "cannot access /app/sqlite: No such file or directory" 这类问题后逐轮修正,最终三个测试全绿。

基线在这里的死因特别隐蔽:命令流中间有一步 PATH 设错了,后面的步骤在错误前提下继续跑,没人回头检查。这就是复合错误的教科书样本。而右边每一轮审计都在问"合约里的验收标准现在满足了吗",错误活不过一轮。


🤔 我的判断:一套值钱的工程框架,但别当成能力突破

聊完数据和案例,说说我的整体看法。

最值钱的地方:把"自我报告进度"这个隐性依赖给干掉了。当前主流 agent 框架(包括 Claude Code 这种生产级工具)的完成度判断基本都是 executor 自说自话。这篇论文用角色隔离 + 只读审计 + 状态物化三板斧,把进度判断变成了一个需要外部证据支撑的显式对象。这不是什么高深的算法,但它直指长任务智能体最脆弱的那根肋骨。WeaveBench 上 28.9 个点的提升、Games 子集上弱模型反杀强模型,都说明这个痛点是真实的、大的。

要泼的冷水:一是成本。弱模型套框架 token 涨 3 倍,而且不在成本-性能前沿上——很多时候直接换强模型更划算。二是适用边界比论文标题暗示的要窄,math、data-science 这类吃单次推理能力的任务上框架是负收益,掉了 12-17 个点。三是小样本领域的暴涨数字(+50pp、+60pp)看看就好,别当结论。四是 Terminal-Bench 的分数是作者自测的,缺官方星标背书。

跟前人工作的位置:Manager-Worker 的多智能体划分并不新鲜,AutoGen、MetaGPT 那一波早就玩过。这篇的增量不在"分工",在于两点——Auditor 的只读独立验证(以前的多智能体框架里 verifier 通常能看到 executor 的推理过程,容易被带偏),以及"轨迹丢弃、状态永存"这个激进的信息架构。说实话这块我也不是特别确定它跟最新的 Reflexion 类自我反思方法的边界在哪——论文里对这类工作的对比不够充分,算是个小遗憾。可能我的理解有偏差,但我倾向于认为:自我反思是在同一个上下文里打补丁,而这篇是直接把上下文本身当成耗材,这是范式层面的区别。

工程启发,如果你在做长任务 Agent:

如果你发现智能体在长任务里"自己骗自己"——别急着换模型,先检查进度判断是不是自我报告的。加一个独立的只读 verifier,成本大约占总 token 的 20%-40%,但可能救回一大批死掉的轨迹。

如果你的任务以 math、单次推理为主——别套重型状态框架,它带来的切碎效应可能让你掉 10 个点以上。

如果你在选型——记住那个反直觉结论:状态管理框架是强模型的放大器,不是弱模型的救命稻草。强模型套它更稳还可能更省,弱模型套它账单先炸。

还有一个更本质的问题这篇没回答:Manager 自己也是个 LLM,它对审计报告的理解出错怎么办?谁来审计 Manager?论文没说,我猜是下一轮再说。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我