《预约成功之后,世界偷偷改了答案》:EnvOS 给活在流动世界里的 Agent 做一场带时间戳的审计
论文:EnvOS: Auditing Computer-Use Agents When the World Moves On 作者:Ankush Kadu, Athira Gopal, Niharika Singh, Arpit Jain, Aswanth Krishnan(QpiAI, Bangalore) arX…
目录
《预约成功之后,世界偷偷改了答案》
——EnvOS:给活在流动世界里的 Agent 做一场带时间戳的审计
论文:EnvOS: Auditing Computer-Use Agents When the World Moves On
作者:Ankush Kadu, Athira Gopal, Niharika Singh, Arpit Jain, Aswanth Krishnan(QpiAI, Bangalore)
arXiv:2610.40246 | 已被 NeurIPS 2026 Workshops(AABA4ET & CL4FMAgents)接收
🖼️ 一张照片,还是一段录像?
先想象一个再普通不过的下午。
你在网上预约诊所的复诊。下午两点,挂号页面明晃晃写着:三号诊室,A 栋。你记下了,继续填别的表格。三点整,你点下"确认预约"。
没人告诉你的是:两点半,医院把这场复诊挪到了 B 栋。页面更新过,但没弹窗、没短信、没有任何一条通知追到你面前。
现在问题来了:你预约失败了。这是你的错吗?
如果考官只看"任务结束时的世界状态"——你确实订错了楼,零分。可是慢着:你的每一步都合乎逻辑,你只是拿着一张两小时前的地图,走了一段两小时后的路。错的是路,还是走路的人?
这就是计算机使用 Agent(computer-use agent)今天面临的真实处境。它们操作的不是死板的表单,而是活着的软件:预约会挪窝、条款会修订、记录会更新。而绝大多数评测(eval)仍然假设一件事:世界从 episode 开始那一刻起就冻结了。Agent 跑完,看最终状态打分,收工。
静态评测像什么呢?像凭一张案发现场的照片判案。照片里车停在人行道上——可是红绿灯在那一瞬间变了,前车急刹,路口改了施工围挡……这些"过程"全都不在照片里。照片只会告诉你结果,不会告诉你因果。
EnvOS 这篇论文做的事,说白了就是:把照片换成监控录像。而且不止于此。录像到手之后,他们还给每一帧装上时间戳、封存原始底片、连"判卷人"都一并送上被告席——因为判卷人也可能看错。
🌊 世界在动,错的到底是谁?
把这个问题放进评测史的脉络里看,会清楚它在哪一环上补洞。
Agent 评测大致经历过三次迁徙:第一次,从"答固定题库"迁到长程任务——agent 要在几十步里保持不迷路;第二次,从脚本环境迁到真实软件——表单、日历、数据库,状态和状态之间的依赖都是真的;第三次,也是正在发生的这一次,从冻结的世界迁到流动的世界。前两次迁徙都有人做过了,第三次刚起步就撞上本文讲的这堵墙:世界一旦会动,"对"与"错"就不再是终态快照能回答的问题。
先把这个问题的形状看清楚,因为它比"agent 不够聪明"微妙得多。
当一个 agent 在动态环境里失败,嫌疑人其实有三个:
1. Agent 自己——它看见了新值,但没用。这是真失败; 2. 环境的机关——那次"变更"根本没按剧本触发,或者触发得太早、触发了两次、甚至把无关的记录也误伤了。这时候 agent 是被冤枉的; 3. 评分的裁判——变更正确触发了,信息也送到了,但判卷脚本把对的行为判成错(或者反过来)。
传统的终态打分(terminal pass/fail)根本没有能力区分这三种情况。一个孤零零的"失败"标签背后,是三种完全不同的故事,而它们通向完全不同的结论:该修模型、修 benchmark,还是修评分器。
作者把这个困境拆成两种有效性:
- 干预有效性(intervention validity):环境真的发生了"预定的那次状态迁移"吗?时机对吗?有没有副作用?
- 评估有效性(evaluation validity):agent 真的收到它该收到的信息了吗?判分结果有留档证据支撑吗?
EnvOS 的野心:把"造一个会变的环境"这件事,从手工作坊变成有认证、有证据、可审计的工程流程。
这条路上的先行者已经不少——长程交互评测、时间扰动、演化环境,这两年都陆续有人探过。EnvOS 与它们互补的位置在于:它不只关心环境怎么动,更关心你怎么证明这场动是合法的、以及判出来的失败到底属于谁。前者是体验问题,后者是司法问题。司法问题不解决,体验做得再花,结论也是一纸空文。
🏥 第一桩案件:搬家的诊所
光谈框架太抽象,先看他们搭的两个"案发现场"。
诊所预约任务:agent 要替用户完成一次复诊预约。它的旅程是这样的——先读邮件,弄清用户想约哪天;再翻日历,避开已有安排;然后打开预约门户,看有哪些场次。门户一开始展示的场次地点是 v₀,agent 顺理成章地记下了。等它之后发出某个"符合条件的请求"时,后台的权威记录被悄悄改写为 v₁。没有弹窗,没有公告,但原始页面始终可以回访。
把这条时间线画出来就明白陷阱在哪了:知情发生在两点,变更发生在两点半,提交发生在三点。agent 手里的地图在两点是准确的,到三点就是一张旧地图。它要做的不是"看到新值"——没人给它看——而是意识到"我两小时前看到的那个值,可能不再作数",然后自己走回去查。
关键在于时机:必须先让 agent 看到旧值,之后的某个请求才触发变更。如果变更发生在"看到旧值"之前,那就不存在"过期信息"这回事——agent 看到的本来就是新地图,整个实验的前提就塌了。这个先后顺序,是整个设计合法性的地基。
三个实验条件,名字都带注册编号(这是预注册研究的洁癖):
| 条件 | 复核环节给 agent 看什么 |
|---|---|
| OFF-A | 什么都不多给。原始记录仍在,但没人提醒 |
| CUE-A | 一条"请复核"的提醒 + 原文链接,但不透露新值 |
| LIVE-A | 同样的提醒和链接,并且直接把新地点显示出来 |
结果(Claude Opus 5,16 个实例,48 步动作预算):
- OFF-A:0/16 成功
- CUE-A:2/16 成功
- LIVE-A:15/16 成功
LIVE–CUE 的配对符号检验:16 对里 13 对只有 LIVE 侧成功、0 对反向、3 对平局,p = 0.000244;经整块 Holm 校正后 p = 0.000488;再经过全文 12 项检验的 paper-wide Holm 校正,依然站得住——p = 0.00293。
而一个刺眼的细节是:在 CUE-A 里,16 次轨迹中只有 1 次真的点开了那条"请复核"的链接。提醒发了,链接给了,agent 不去。这不是 agent 叛逆——在它的世界里,那条提醒可能只是又一行无关紧要的文本,和页脚上千万条"服务条款更新"没有区别。
这个 0 → 2 → 15 的阶梯,是整篇论文最有冲击力的一组数字:环境呈现信息的方式,直接决定了"能力"是否存在。
🧾 第二桩案件:午夜修订的保险条款
第二个任务是保险理赔审批。核心公式干净得像小学应用题:
应批金额 = min(索赔金额 − 免赔额,现行赔付上限)
agent 先看到政策页上的旧上限 v₀;某个后续请求触发后,库里那条政策记录被改成 v₁。审批必须按审批时刻有效的政策进行。有个别实例还故意跨过计算门槛——光查出新上限还不够,得真的会算,拿错旧值一算下来正好错得离谱。
这里只有两个条件:OFF-A(审批前不给额外政策信息)和 ON-A(审批前把现行政策记录重新展示一遍——给上限,但不给答案)。
结果出现了戏剧性的模型分化:
- Claude Opus 5:OFF-A 10/10,ON-A 10/10。它不是没看见变更——在 OFF-A 的全部 10 次运行里,它都自己回头查了政策记录,一次不落。它不需要被提醒,它天生多疑。由于满分封顶,这个 block 里"面板有没有用"根本无从检验(预注册的 rescue 门槛未触发,作者也老老实实不下"面板有效"的结论)。
- Claude Sonnet 5:OFF-A 1/10,ON-A 9/10。配对检验 8 对处理侧成功、0 对反向、2 对平局,本地 p = 0.00781——块内显著;但放到全文 12 项检验的 Holm 校正下,p = 0.0781,不再显著。作者在文中把两套推断并排陈列,明确禁止读者混用。
- Gemini 3.1 Pro Preview(后续注册的跟进配置):OFF-A 0/10,ON-A 5/10,p = 0.0625——没有展示出效应。注意这不是"证明了没用",而是"这个配置、在这批实例、这个预算下没检出来"。而且它的调用方式本身就不同:帧直接内联在无状态 REST 请求里、没有工具可用;Claude 系模型则是被要求自己用文件读取工具去看每一帧。模型、供应商、调用器、图像投递通道是绑在一起变的,谁也拆不出单纯的"厂商效应"。
把三家放在一起看,结论不是"谁强谁弱",而是一个更别扭的事实:"agent 有没有发现变化"是模型、任务与界面三者的联合函数,拆不开,也就不能合成一张排行榜。
🧪 案发现场是怎么搭的
在继续讲流程之前,值得看一眼这套"案发现场"本身的工程规格,因为魔鬼全在细节里。
整个前瞻实验跑在一个合成的职场测试床上:14 个容器化的基础设施服务,诊所应用、保险应用、配套的邮件、日历、数据库一应俱全。Agent 通过一个受控的语义浏览器接口干活——每一步拿到的是截图加文本观察,动作走固定的 schema,调用本身是无状态的,只带一张短备忘录和最近几步动作历史。诊所任务给 48 步动作预算,理赔任务给 40 步。条件之间共享同一批实例数据和指令,顺序固定且做了平衡。
作者们很诚实地在文中标注:这不是操作系统级的无限制 computer-use,只是"在声明好的动作与观察契约之内"的计算机使用。这个限定非常重要——它意味着所有结论都附带着一个隐形的适用范围从句:在这套接口、这个预算、这批实例上。任何想把数字直接外推到"Opus 比 Sonnet 强"的读者,都会被作者预先写好的护栏拦住。
匹配条件之间的对比也设计得很克制:同一个生成实例,在每一种实验条件下各跑一遍,只数"不一致的对子"。16 个实例在 OFF/CUE/LIVE 三种条件下各跑一次,哪个实例在哪条臂上翻了车,逐格可查——论文里那张按实例展开的结果图(Figure 3),本质上就是把每个病例的 X 光片贴在墙上,不许任何汇总统计掩盖单个案例的故事。
🧬 把考题送上手术台:EnvOS 的三步流程
好,现在看 EnvOS 本身怎么造出这样一个会变的世界,并且证明它造对了。
核心是一个干净的数学对象——扰动 ρ = (δ, τ, c, g):
- δ:权威状态上的改写算子(哪条记录、变成什么);
- τ:触发条件(在哪个请求边界开火);
- c:披露通道(新值通过什么界面、以什么形式出现);
- g:一次性保险(整个 episode 最多触发一次)。
整个框架分三步:
第一步:构造(Construction)
从现象(phenomenon)出发——"agent 见过的值在它行动之前被取代",这是与应用无关的一类环境变化。再把它落到一个具体应用的可执行扰动上。种子世界 + 扰动 + 披露条件 + 成功不变量 + 评分器,打包成一个"候选评估工件"。
第二步:认证(Certification)——考题先体检,再开考
候选工件要过五道检查,任何一道不过关都不准入场:
1. 干预有效性:变更真的在声明的边界触发了吗?有没有误伤无关记录?"只触发一次"的保险丝灵不灵? 2. 观察一致性:允许的披露和权威状态对得上吗?承诺的通道真的走通了吗? 3. 可行性:得有一条脚本化的参考路线能真正走通任务——而且是在每个冻结的生成实例上单独验,不是验完模板就算数。 4. 行为区分度:故意做一个"有缺陷的脚本策略",工件必须能把它揪出来。揪不出缺陷的考题,不配当考题。 5. 评分器鲁棒性:拿故意损坏的记录、擦边球、合法正例去喂评分器,看它会不会把脏档案当干净、把干净当脏。
检查只有三种结果:通过 / 违规 / 监控错误。"监控错误"——系统自己测不了——绝不算通过。评不了,就不许入场。这条规则看似死板,实则锋利:它堵死了"测不出来就算过"这条最常见的自我安慰通道。
第三步:受控执行 + 基于证据的评估
被认证的实例才能跑模型。执行时:任务实例、动作预算、有效性规则、结局不变量、分析规则全部预先冻结;发布清单(release manifest)对 29 个仓库路径、容器镜像、生成器、调用器、模型标识做 SHA-256 哈希,跑的时候哪怕一个比特漂移,驱动程序直接拒跑。修订?可以,但每一条都带日期公开披露,不许悄悄掺进来。
跑完之后,独立实现的第二套代码从归档证据里重新推导有效性与结局。归档 insufficient 的条款,就老老实实标"未决",不许脑补。
⚖️ 法医的时间戳:先查考场,再判考生
评估一条轨迹时,EnvOS 的顺序是反直觉的,也是全文我最欣赏的一条纪律:
先判定这条 episode 有没有资格进分析,再判定它过没过。
什么叫没资格?——变更根本没触发;承诺给模型的观察没送达;注入器把别的记录误改了。这些情况下 agent 的失败是考场的错,不能记在考生头上。反过来,一条合法但未成功的 episode——包括把 48 步动作预算耗尽的那种——就是失败,不许换题重跑,不许"再给它一次机会"。每个格子只留两个保留名额(provider 掉线之类的故障走单独的登记通道,混不进成绩)。
这套"validity-first counting"由六阶段审计流水线撑着:认证、策略隔离(跑模型的 OS 账号是封禁的、能访问哪些源写死在配置里,还用金丝雀探针去戳有没有越界)、规则冻结、先有效性后计数、独立重推导、定向挑战。
结局判分看的是五个注册不变量:目标状态正确、只有一次提交、无附带损伤、提交后的必要延续动作、最终报告与提交状态一致。每一条都对照动作发生时刻的权威状态——不是任务结束时的快照。
这就是"监控录像"的本体:每一个动作都被钉在它发生的那一帧上,世界的样子也钉在那一帧上。事后任何人——包括多年后带着怀疑回来的审稿人——都可以把底片调出来,逐帧重放,重算当年的判决。
为什么这条顺序值得大书特书?因为评测界有一种积习:失败就是失败,先记账,再找借口。静态 benchmark 时代这种积习危害有限——环境冻结,所有失败确实都归 agent。可世界一旦会动,每一次"宽容地"把考场错误算到 agent 头上,榜单上就多一条冤案;每一次"热心地"把无效 episode 剔除出失败统计,榜单上就多一个水货。两种污染方向相反,毒性相同:都让"模型能力"这个本该精确的物理量,变成评测机关自身误差的函数。先查资格再判对错,是把两种污染同时掐死的唯一阀门。
🔍 连判卷人也上了被告席
故事到这里还差最后一环,也是这篇论文最不寻常的一环:审计评估器自己。
逻辑很直白——如果 EnvOS 声称"我们能分清 agent 的错和环境的错",那它必须也经得起同样的问题:"你凭什么说你的判分是对的?"
于是有了三组"档案挑战"(archive challenge):拿真实 episode 的归档副本,故意改坏其中某份证据,看流水线能不能认出"这不再是干净的记录"。
- 密封挑战:一个独立的模型造了 28 个案例(对它的建造者白盒,但对搭建流水线的 Claude agent 全程保密),评分器 28/28 全部命中预期判决。
- 纯规则挑战——最精彩的一组:一个 GPT-6 对话只拿到规则摘录和档案 schema,看不到任何代码、论文、历史案例或结果,凭空设计了 56 个案例及各自的预期判决。作者照着规则把它们实现出来,再让另一个对话复核保真度,最终 36 个案例入场:10 个干净对照全部被正确接受;26 个损坏案例,一个都没被当成干净放过——24 个被直接揪出,2 个未下判决,0 个漏网。
- 外部挑战:一个 Gemini CLI agent 拿到规则、schema 和 15 份档案副本,自己设计并生成 56 个案例。流水线在 39 个损坏案例中抓住 25 个(理赔 14/20,诊所 11/19);而"简单翻日志"的基线只抓住 4 个。
这项工作为什么必须做,论文写得很克制,但分量很重:既然这些环境是从种子程序化生成的、结局是由"经过审计的自动评分器"从已提交状态里算出来的,它们天然就是 RLVR 的训练场——而每一次评分器误判,都是一个喂给训练过程的毒奖励。挑战结果同时标出了这片训练场的雷区埋在哪。
⚠️ 诚实的边界:作者自己画下的框
这篇论文最"不性感"、但也最值钱的地方,是作者亲手给自己画的边界框:
- 两个 workflow 而已。 前瞻实验只有诊所预约和保险理赔,全部跑在一个合成职场测试床上。这不构成"方法可以移植到任意生产应用"的证据。
- "理解"无法审计。 页面被服务、帧被送达,都可留档;但模型"是否理解并使用了"那个值,任何仪器都测不到。论文把这条写成一条本体论戒律,而不是技术遗憾。
- 独立重推导不是第三方审计。 重推导的代码是同一支团队写的独立实现,能暴露实现之间的分歧,但暴露不了两家共享同一份归档证据时的共同盲区——所以才需要后面那组外部挑战。
- 挑战覆盖有死角。 三组挑战的访问权限、实现方式、能测的错误类型各不相同,漏网之案被如实登记,而不是从报告里消失。附录里甚至保留了一份带日期的勘误(erratum):某个历史 block 的 Newcombe 区间存储有误,改了,写明日期,放在那里任人翻检。
- 探索性现象族不入主结论。 附录 S1 还报告了其它环境现象家族的认证与探索性评估,但作者明确声明:它们不与主实验混合,不构成任何检测率估计。
🧠 费曼式收尾:把一锅浓汤熬回几勺
绕了这么远,值得带走的其实就几句话。
第一,世界是活的,评测必须带时间戳。 终态打分在动态环境里必然双向误判:把环境的错记在 agent 头上,把运气记成能力。EnvOS 的对策不是更聪明地打分,而是把"何时发生了什么"完整留档,让每个动作对照它发生那一刻的世界,而不是任务结束时的世界。
第二,界面即能力,提醒不等于送达。 0/16 → 2/16 → 15/16 不是同一个模型三次考试的分数,而是同一个模型面对三种"世界表达方式"的成绩单。"agent 行不行"这个问题,离了界面没有答案。
第三,先查考场,再判考生。 一条 episode 进不了分析,就不参与计数。这不是包庇 agent,而是不让 benchmark 机关自己的错误污染结论——而且反过来,合法但没做完就是没做完,预算耗尽也是失败,不许撒娇。
第四,审计是递归的。 判卷人也要被审,而且要用盲造案例审。这是通往 scalable oversight 的那条窄路:监督者本身必须处于被监督之下,一路递归到地基。
第五,严肃本身就是一种结果。 预注册、哈希清单、带日期的修订、没数完就放弃推断的 block——这套"笨功夫"让论文里每个数字都经得起翻案。在一个热衷于刷榜的领域,这种笨功夫比任何一个具体分数都稀缺。
第六,审计过的评测,才有资格当训练场。 这是论文埋在结尾的一条线索:因为每个环境都从种子生成、每个结局都由经过挑战检验的自动评分器从已提交状态算出,这套东西天然可以喂给 RLVR。但同一句话反过来说也成立——评分器一旦被信任,它的每个盲区都会变成模型的坏习惯。把评测做成可审计,不只是学术洁癖,是在给即将到来的大规模 agent 训练铺铁轨。
监控录像已经装好。接下来每一次 agent 在流动世界里的失误,我们都有机会回答那个真正重要的问题:
错的到底是谁?
📚 参考文献
- Kadu, A., Gopal, A., Singh, N., Jain, A., & Krishnan, A. (2026). EnvOS: Auditing Computer-Use Agents When the World Moves On — Phenomenon-Based Task Construction, Certification, and Evidence-Based Evaluation. *Accepted at the NeurIPS 2026 Workshops on Agentic AI Benchmarks and Applications for Enterprise Tasks (AABA4ET) and on Continual Learning in the Era of Foundation Models and Embodied Agents (CL4FMAgents).* arXiv:2610.40246.
(文中讨论的现象学框架、扰动形式化 ρ = (δ, τ, c, g)、诊所预约与保险理赔两组前瞻性实验、以及全部评估器挑战细节,均出自该论文及其附录。)
#每日论文 #paperscool #agent审计