已经决定的事,别再跑第三次老板的办公室
每个开过会的人都见过这样的场面:散会时老板把行动项一条一条念完——"小张写方案,小李跑数据,周五之前给我初稿"——所有人都点头。结果半小时后,小李敲开老板办公室的门:"老板,数据我跑完了,接下来我该干嘛?"再过一小时,小张又来了:"方案写好了,您看下一步呢?"
目录
已经决定的事,别再跑第三次老板的办公室
每个开过会的人都见过这样的场面:散会时老板把行动项一条一条念完——"小张写方案,小李跑数据,周五之前给我初稿"——所有人都点头。结果半小时后,小李敲开老板办公室的门:"老板,数据我跑完了,接下来我该干嘛?"再过一小时,小张又来了:"方案写好了,您看下一步呢?"
老板在第一次会议上已经把后续步骤全部讲清楚了。但没人把那张行动项清单当回事,每个人都跑回来重新请示一遍。请示本身不贵,贵的是老板的时间——每一次重新请示,都要把"这个项目是干什么的、我们进行到哪一步了"从头到尾重新想一遍。
在 Agent 的账单上,这就是真金白银:每一次重新请示都是一次完整的大模型调用,要把上下文重新读一遍、重新算一遍、重新生成一遍。而请示的内容,往往是上一次会议上已经定下来的。这笔冤枉钱在花的时候几乎无感——没有报错,没有失败,任务照常完成——但积少成多,账单厚得让人头皮发麻。
现在的 AI Agent,就是这家公司里那个最焦虑的职场新人。
🏢 这家公司的运转方式
一个 Agent,说人话,就是一个会循环干活的大模型。它的工作方式叫 ReAct 循环:想一想,动一下;看看结果,再想一想,再动一下。"想"这一步由大模型完成,"动"这一步由工具完成——调一个 API、跑一段代码、读一个文件。
这个循环叫做 harness,缰绳。这个词选得很准:大模型是一匹马,有劲儿,但不知道自己该往哪儿跑;harness 是骑手手里的缰绳和路线图,告诉它每一步之后该看哪里、下一步该干什么。
在写代码的 Agent 里,这个循环大概长这样:模型决定"我要写文件 A",工具把文件写好,回执回来——"文件 A 已写入"。然后模型盯着这个回执,开始新一轮的"想一想":文件写好了,接下来该干嘛呢?哦,该跑 make 了。于是它说"跑 make",工具跑完,回执回来——"make 退出码 0"。模型又盯着这个回执想:编译过了,接下来跑 pytest 吧。
发现问题了吗?
从"写文件 A"这个动作被决定的那一刻起,后续的两步——跑 make、跑 pytest——以及它们的全部参数,其实都已经确定了。模型在做第一步的推理时,脑子里早已排好了整个流水线。但 harness 不这么看。harness 规定:每收到一条工具回执,都要重新请大模型推理一次。
就像老板已经说了"写完后跑 make,过了跑 pytest",小李每做完一步还是跑回办公室。而老板每一次都要重新回顾整个项目背景,才能得出和上次一模一样的结论。
🔄 想清楚你在重复什么
把这件事拆开看,Agent 每一步要做的判断可以分成两种。
第一种叫语义决策。这类判断需要真正的思考,是创造性的工作。"这个函数应该怎么实现?""用户这句话到底是什么意思?""下一步该查数据库还是该搜网页?"——这些问题的答案无法从当前状态里直接推出来,必须靠模型的理解力和经验。这类思考,花多少 token 都值。
第二种叫执行就绪。这类判断只需要检查条件,不需要任何创造力。"文件写完了吗?写完了就跑 make。""make 返回 0 吗?是就接着跑 pytest。"——答案就写在刚收到的回执里,要么一个字节一个字节地核对其中的状态,要么按图索骥。让一个一千亿参数的模型来做这件事,就像让总工程师拿着扳手去拧一颗已经标明扭矩的螺丝:不是拧不动,是这个工位配不上这个脑子。
再打个比方。语义决策像下围棋时的读秒长考:局面是新的,对手是活的,这一步落下之前,局面里找不到现成的答案,必须算。执行就绪像照着菜谱做菜:"油温六成热,下蒜末,爆香后下豆角。"——没有一个字需要厨师动脑子,眼睛确认锅里的状态对上号,手照做就行。让大模型做语义决策,是物尽其用;让大模型做执行就绪,是大材小用到了近乎荒诞的程度:每确认一次油温,都要把整本菜谱和满汉全席的做法从头背一遍。
问题的关键在于,现有的 Agent 系统对这两种判断一视同仁。每一次工具反馈回来,系统都不分青红皂白地触发一次完整的大模型推理。语义决策当然需要这次推理,但执行就绪的检查也被塞进了同一个昂贵的调用里。根据论文的观察,很多轮次的"重新推理"产出的结论和上一轮一模一样——上一轮推理时,后续步骤就已经被完全确定了,这一轮只是把已经确定的结论再说一遍。
这就是 Agent 系统里一笔隐性的浪费:重复推理已决事项。它不像错误答案那样显眼,不产生失败,不产生报错,任务照样完成——只是白花了一笔 token。白花到什么程度,后面实验部分的数据会说。
⚖️ 加速的陷阱:替换悖论
直觉上的解法早就有了:给 Agent 修一条"快速路径",简单的情况走快路,复杂的情况走老路。这套思路叫 fast-slow 架构,行业里已有不少实践。
但清华大学和微软亚洲研究院的研究者在论文里指出了一个藏得很深的坑,他们称之为Substitution Paradox——替换悖论。
很多所谓的"优化",只是把快速路径加了上去,却没有把原来的慢速回调真正删掉。系统表面上有了一条快车道,但老路还在那儿,还照常收费。你花了钱修新路,又继续交着老路的过路费,算下来比原来更贵。
省钱的条件其实苛刻得有点扎心:快速路径消除的推理成本,必须大于它新增的成本。而新增成本远不止表面那一点:快速路径本身要被创作出来(得有人、有模型把后续的决策图写出来),要做选择(每一步都要判断"这条路现在能不能走"),还要能恢复(一旦快路走不通,得安全地退回老路)。这三笔钱加起来,必须小于省下的那笔慢推理的钱,优化才算数。
这个账本大多数人不算。他们只盯着"这次调用省了",却不算"为了省这次调用,我多花了几笔别的钱"。论文提出的一套完整记账方法(后面会讲)正是冲着这个盲区来的。
把这笔账摊开算一遍,你会发现优化其实是一道带约束的不等式。设一次慢推理的成本是 C_slow,快速路径走一次的新增成本是 C_create(创作)+ C_select(选择)+ C_recover(恢复),快速路径真正消除的慢推理次数是 n。那么净收益是 n·C_slow 减去那三笔新增成本。大多数 fast-slow 方法的 n 很小——快路只接管了极少数步骤——而三笔新增成本一样不少。省的钱是线性的,花的钱是恒定的,这就是为什么"加了快路反而更贵"不是意外,是常态。真正有效的优化必须把 n 做大(让快路接管尽可能多的步骤),把三笔新增成本做小(创作不能贵、选择不能贵、恢复不能有隐患),两头都做到,不等式才可能成立。HarnessMM 的三个组件恰好对应这三笔成本:EDG 管创作,Typed Selector 管选择,GDR 的回退机制管恢复。后面会看到,它的消融实验就是对着这三项逐项验证的。
📝 小本本:可执行决策图
HarnessMM 的第一步,是让模型在第一次推理时就把话说完整。
具体做法是:当慢推理做出一个决策时,它不只输出当前这一步的动作,而是顺手写下一个可执行决策图(Executable Decision Graphs,简称 EDG)。这张图里有多个未来的动作节点,每个节点记四样东西:动作是什么、字面参数是什么、它的前驱是谁、以及一个公开的守卫条件(guard)。
回到写代码的例子。模型决定"写文件 A"的同时,把整张图写下来:节点一,写文件 A,参数是文件路径和内容;节点二,跑 make,参数是工作目录,前驱是节点一;节点三,跑 pytest,参数是测试目录,前驱是节点二。每个节点还带一个守卫:节点二的守卫是"文件 A 存在",节点三的守卫是"make 返回 0"。
这张图像什么?像老板在布置工作时,不光说"你去做第一步",而是把整张流程图拍在小李桌上:"这三步按顺序来,每做完一步自己核对一下条件,符合就继续,不符合再来找我。"
守卫条件的设计值得多说一句。它是公开状态上的布尔函数——只依赖于工具回执里看得见摸得着的信息,比如"文件存在吗""退出码是 0 吗"。它不偷偷查询模型的内心活动,也不需要额外的模型调用来求值。一个专门的适配器(adapter)在收到回执时顺手就把这些布尔条件算出来了,成本几乎为零。
到这里,"思考"和"执行"被正式分开了:思考发生在写图的那一刻,一次到位;执行变成了之后每一步对着条件打钩的体力活。
✅ 打钩的人:守卫决策复用
有了图,接下来的问题是怎么用。答案是 HarnessMM 的第二个组件:守卫决策复用(Guarded Decision Reuse,简称 GDR)。
每收到一条工具回执,系统对每个节点算一个"合格分"(eligibility),由三个条件相乘:前驱节点是否已经完成、守卫条件是否为真、参数是否闭合(有没有还没绑定取值的变量)。三个条件全过,节点就被激活,直接执行,不请示大模型。
回到会议室。小李写完文件 A,低头看自己小本本上的第二条:"跑 make,前置:文件 A 已写,守卫:文件 A 存在。"文件就在那儿,打钩,执行。make 跑完,退出码 0,再看第三条:"跑 pytest,守卫:make 返回 0。"打钩,执行。全程他没有敲过一次老板办公室的门。
但打钩的人有个铁规矩:拿不准就上报。如果没有任何节点合格——守卫不满足、参数缺值、或者出现了计划外的状况——GDR 毫不犹豫地弃权(abstain),整个系统回退到原始的慢推理,让大模型重新登场。这时候就不是浪费了,因为确实出现了需要语义决策的新情况。老板第一次交代时没预料到的事,才值得跑一趟办公室。
这个弃权机制是整个系统安全性的地基,值得停下来多想想。一条永不弃权的快路是灾难:它会在状态对不上的时候硬执行,把错误一路放大。一条频繁弃权的快路是无效:每次都退回慢推理,等于没有快路。GDR 的守卫设计把"该继续"和"该上报"的边界划在了公开状态上,这不是保守,是把每一次越界的风险都明码标价——只有守卫为真、参数闭合、前驱完成三者同时成立,越界才发生,而这三个条件全部来自回执里可核验的事实。
另外一个细节很见功力:这张图不是用完即弃的。它跨工具转换持续保留,一张图可以服务多个转换。流水线越长,省得越多——这正是后面消融实验里最值钱的一部分。
🔏 无凭无据,凭什么报销
省下来的钱怎么证明是真的省?这不是抬杠,是这套系统里最严肃的一环。
HarnessMM 的第三个组件叫认证回调替换(Certified Callback Substitution,简称 CCS)。每一次通过守卫检查、跳过慢推理直接执行的动作,系统都会生成一张"替换证书"κ_t,上面记着:这张图的内容指纹、被执行的决策编号、前驱的回执、本次执行的精确参数、工具回执,以及——最关键的一条——被绕过的那个慢回调的编号。
这张证书的作用相当于报销单上的每一栏:什么时候、因为哪条决策、省了哪次调用、省下的调用原本要花多少钱。审计时逐一核对:指纹和决策 ID 对不对得上?参数是不是精确的原生执行?对应的那次慢回调是不是真的没发生?
论文给省钱的判定定了一条硬杠杠:每一次替换,至少省掉一次慢调用(N_slow,t^parent − N_slow,t^HarnessMM ≥ 1)。少一次都不算数。
这个设计在学术上很清醒:效率优化领域最容易出的问题就是"宣称省了"。宣称谁都会,证书是防止整个系统退化成"其实老路还在跑、只是账单没给你看"的唯一办法。替换悖论讲的正是这个病,CCS 就是疫苗。
🧭 全场只有一个合格答案时
整个流程里还有一个精巧的小零件:类型化选择器(Typed Selector)。
它的输入是观察到的回执,输出是合格决策的 ID,或者一个明确的 ABSTAIN(弃权)。没有模糊地带。如果整张图里恰好有一个节点合格,它就确定性地产出那个 ID,对应的动作直接执行——这不需要模型,不需要概率,不需要想象力,就是个查表加比对的活儿。
如果合格节点是空集,或者选择器判断现有信息不足,它就输出 ABSTAIN,系统老老实实回退到慢推理。这个"知道什么时候不知道"的能力,和"知道"本身一样重要——一个永远自信的选择器会把系统带进沟里,一个诚实的选择器才能让"回退"这个安全网真正兜住底。
🌱 让缰绳自己进化
上面说的都是一次部署的事。论文还有一个更野心的部分:递归自我改进(Recursive Self-Improvement,简称 RSI)。
注意,改进的对象不是模型本身——模型的权重一个比特都不动。改进的是 harness 的配置:提示词怎么写、上下文怎么管理、最终的收尾规则是什么。换句话说,不教马跑得更快,而是让骑手越来越会骑马。
流程是一个闭环:当前的 harness 运行任务,产生训练反馈;系统根据反馈提出对配置的候选修改;在验证集上挑表现最好的候选;冻结;再上测试集。一圈跑完,harness 的行为就比上一圈更聪明一点。然后带着新配置再跑一圈。
这里有一个容易看漏的设计选择:挑选候选用的是验证集,而最终的成色看的是测试集。中间隔着一道冻结的动作——配置选定之后不许再动,直接用冻结的版本去面对没见过的测试任务。这不是仪式,是防止自我改进退化成自我感动的护栏:如果允许对着最终考题反复调参,那测出来的就不是"改进",而是"应试"。验证集管"往哪个方向调",测试集管"调出来的东西是不是真的"。
这个方法论上很克制:它承认"怎么驾驭模型"这件事里藏着大量没被挖掘的结构,而这些结构不藏在权重里,藏在编排里。RSI 就是把编排本身当成一个可以被搜索、被优化的对象。这也让这套系统的改进曲线有了一个现实的优势——改配置比训模型便宜几个数量级,迭代一圈的周期从周压缩到小时,自我改进这件事才真正跑得动。
📒 一本不掺水的账
把前面所有组件串起来,HarnessMM 的总账是怎么记的?论文给出的完整账本(Complete-Task Accounting)包括:图创作的成本、选择器的输入输出、新增的上下文、剩余的慢调用、回退、以及失败执行。每一分钱的来去都有名目。
这份账本的每一项都值得说两句。图创作的成本是慢推理时额外写图的 token——这是 EDG 的原价,省下的钱里要先把它扣掉。选择器的输入输出是逐轮评估守卫和资格的固定开销,金额不大,但诚实记账必须算上它,不然就是把门卫的工资从公司账上抹去。新增的上下文指决策图本身占用窗口的 token,图越大占得越多,这也是为什么图不是越大越好——图的规模和省的推理之间有个最优平衡点。剩余的慢调用是兜底的真实花费,回退和失败执行则是快路走岔的代价,一笔都不能含糊。
开发成本单独报告,按部署任务数摊销。输入 token 和输出 token 都计入,除以 1000 得到 k 为单位。
这套记账法本身就是论文的一个隐性强项。效率研究里最常见的猫腻是把成本藏起来——只报"平均每次任务"而不报回退的代价,只算推理成本而不算选择器的开销,只算部署后的运行成本而含糊掉开发成本。完整账本不留这种死角:开发成本单独列、摊销规则写明、输入输出分开计。这也是为什么它的实验数据读起来很有底气——数字背后是一本可以审计的账。
📊 数字不会说谎
来看实验。核心指标两条:任务成功率不能掉,token 用量要真的降。
HumanEval(98 道题),用 Codex 模型:成功率保持在 90.82%,token 从每任务 66.72k 降到 47.02k,省了 29.54%,平均每任务产生 18 次证书旁路。这组数字的形态很有代表性:成功率和原来持平,token 降了三成,说明在这条流水线上大约三成的推理轮次属于纯粹的执行就绪——它们被守卫检查干净利落地接管了。换 DeepSeek Harness 效果更猛:成功率从 71.43% 涨到 85.71%,token 从 96.28k 砍到 11.62k,省下 87.93%,共产生 147 次旁路(平均每任务 1.50 次),工具调用次数从 954 次降到 415 次。接近九成的降幅意味着这条流水线上绝大多数的"重新想一想"都是多余的;而成功率不降反升——这不是牺牲质量的抠门,是推理路径理顺之后的水到渠成:想该想的地方,比事事都敷衍地想一遍,想得更准。
MBPP-sanitized(257 道题):DeepSeek 成功率从 90.27% 微涨到 91.83%,token 从 53.98k 降到 10.61k,省 80.35%;Codex 从 91.83% 微降到 90.66%(在可接受范围内),token 从 129.55k 降到 49.22k。
消融实验直接验证了设计直觉:持久保留的 GDR 比只用一次的 EDG 多省 26.91%——图跨转换复用确实是钱;CCS 比保留回调的方案多省 19.52%——把老路真正删掉确实是钱。这两个数字加起来就是对替换悖论最实证的回击。前面那道不等式在这里被逐项验证:创作成本靠一次写图摊薄,选择成本靠守卫求值的确定性压低,恢复成本靠 GDR 的回退兜底,消除的推理次数 n 靠图的持久化做大。四项全部做对,净收益才成立——这恰恰是那些只做了其中一两项的 fast-slow 方法失败的原因。
换一个模型 MiMo-v2.6-pro 再验:DeepSeek Harness 成功率 96.94% 涨到 97.96%,token 从 11.62k 降到 4.40k,省 62.12%;Codex 从 93.88% 涨到 94.90%,token 从 62.60k 降到 10.09k。方法不挑模型。
六个 benchmark(用 Qwen3.5-9B 和 Qwen3.8-27B 测)把场景拉到通用 Agent:ALFWorld(2133 个任务)成功率 66.20%,每任务 31.12k token,对比无技能的基线 42.29% @ 34.05k——成功率高了二十多个点,token 还更少。SearchQA(3395 道题)76.76% @ 0.99k,基线 69.81% @ 1.23k——搜索类任务的 token 本身就低,省的空间有限,但成功率依然高出七个百分点。LiveMath(160 题)29.38% @ 0.83k,基线 19.38% @ 4.10k——成功率拉高十个百分点的同时 token 降到对手的五分之一。AIME(560 题)87.14% @ 5.90k。Terminal-Bench 2 达到 26.03% @ 57.67k,基线是 20.63% @ 178.19k——token 降到对手的三分之一以下,成功率高出一截,这个场景里"多步终端操作"的流水线性质最典型,EDG 的长图优势发挥得最充分。GAIA2(480 个场景)43.96% @ 639.64k。
一句话概括这组数字:在代码和通用 Agent 两类场景、多个模型上,HarnessMM 把 token 砍掉了三到九成,成功率持平或上升。
还值得注意这组数据的另一个侧面:ALFWorld 上无技能基线的成功率只有 42.29%,用上这套 harness 技能后涨到 66.20%——同时 token 还从 34.05k 降到 31.12k。也就是说这套机制不只是"同样的活少花钱",还顺手"同样的钱(甚至更少)干了更漂亮的活"。执行就绪的判断交给廉价的守卫去做之后,大模型的推理预算被集中花在了真正有语义难度的环节上,两头都受益。
🧠 比省钱更深的事
这篇文章真正值得琢磨的,不只是省了多少 token,而是一个认知上的转向。
过去谈 Agent 的效率,默认的杠杆是模型:换更强的模型、蒸馏更小的模型、量化、投机解码。HarnessMM 指出的这条路完全不同:浪费不在模型里,在缰绳里。模型每轮推理的产出里,已经包含了未来好几步的完整决策,但旧的 harness 只消费其中一步,把剩下的全扔了——然后下一步再花钱让模型重新生产一遍。
这是一种"决策的库存积压"。制造决策比执行决策贵几个数量级,而旧的系统让昂贵的决策随产随弃。EDG 干的事情,本质上就是把一次性消费品变成了可复用的存货,还配上了自动化的库存管理(GDR)和防伪审计(CCS)。
这个视角推出去,值得重新审视的就远不止 ReAct 循环。任何"生成—丢弃—重新生成"的架构里,都可能藏着同类的积压。长上下文里被读进又读出的同一段历史、多轮对话里每次都被重新复述的背景、检索增强里被反复召回的同一批文档——它们和"被丢弃的后续决策"是同构的:信息已经存在过,流程却让系统一再为它的存在付费。AI 的浪费考古挖到这里,挖出来的其实不是某个具体 trick,而是一种记账的诚实:先把每一分成本的去向摊开看,再问"这一笔真的非花不可吗"。
当然,这套方法也有它自己的边界。EDG 的前提是慢推理一次就能写出足够完整的后续决策图——在高度交互、每一步都依赖上一步结果的任务里,图会很短,省的空间天然受限。守卫条件建立在公开状态上,这意味着那些"只可意会"的隐晦状态(比如代码的语义正确性,而不仅是编译通过)不在快路的覆盖范围内。GAIA2 每场景 639.64k 的数字也提醒着:越复杂的场景,图之外需要重新请示的语义决策越多。这些不是缺陷,是这套方法诚实的适用范围——它把自己的边界画在了回退机制上,而不是画在营销话术上。
会议室里那张没人看的行动项清单,和 Agent 里被丢弃的后续决策,是同一种东西:已经付过费的判断力,被流程白白清零了。HarnessMM 做的事情,说到底是让已经想清楚的想清楚,算数。
参考文献
Yuhua Jiang, Chang Xu, Feifei Gao (Tsinghua University), Li Zhao (Microsoft Research Asia). *HarnessMM: Recursive Self-Improvement for Harness Token Efficiency*. arXiv:2610.32813, 2026-10-23.
https://arxiv.org/abs/2610.32813
#论文 #arXiv #HarnessMM #Agent #token效率 #小凯