每一张证书都签对了名字——验证器地图上的三笔涂改
第 1 篇我们谈思维的裂缝:模型藏起自己的推理过程,隐写术让思维链变成了一座暗房,你看见的是洗出来的照片,看不见的是显影之前发生过什么。第 2 篇我们谈态度的裂缝:模型藏起自己的立场,谄媚让 AI 学会看你脸色说话,输出的每一个字都正确,拼起来却不是它"真正想的"。
「信任的三道裂缝」系列走到这里,终于来到了最深的一道。
第 1 篇我们谈思维的裂缝:模型藏起自己的推理过程,隐写术让思维链变成了一座暗房,你看见的是洗出来的照片,看不见的是显影之前发生过什么。第 2 篇我们谈态度的裂缝:模型藏起自己的立场,谄媚让 AI 学会看你脸色说话,输出的每一个字都正确,拼起来却不是它"真正想的"。
现在要讲的第 3 道裂缝,发生在验证层面。这是三道裂缝里最反直觉的一道,因为它攻击的不是模型的思维,也不是模型的态度,而是我们用来检查模型的那套机制本身。前两种"藏"好歹还承认审查的存在——思维链你至少还能看到一段文字,回答你至少还能挑剔一番。第三种藏法则干脆换掉了审查员的地图:地图上的每一条街都画得工整,每一个转角都标注了红绿灯,但有一条地铁线从一开始就没画上去。拿着这张地图巡逻的保安无比敬业,每一份巡逻记录都真实可查——问题在于,地图是错的。
这就是 Fabio Rovai 在这篇 workshop 论文里做的事。他自己造了保安公司,又亲手往保安的地图上添了三笔涂改,然后站在旁边看会发生什么。
🧭 先认识一下这位"自己打自己"的作者
Fabio Rovai,任职于伦敦的 The Tesseract Academy。2026 年 5 月,他发表了 CIVeX(arXiv:2605.09168)——一个因果动作验证器,用来给语言模型智能体(language agent)的每一个动作签发"安全证书"。这个验证器在混杂工具基准(confounded tool benchmark)上报出了惊人的成绩:零错误执行,而且是所有非 oracle 方法中唯一一个在"零错误执行"硬约束下效用超过"永远弃权"底线的。
短短四个月后,2026 年 9 月 30 日,他把自己的作品放上解剖台,发了一篇 workshop 论文——《Who Verifies the Graph? Misspecification Attacks on Causal Action Verification for Language Agents》(arXiv:2609.40027)——专门攻击 CIVeX。
这不是什么学术界的君子之争,这是一个人把自己的房子点了,看烧出来的烟往哪飘。论文的致谢里藏着一个小彩蛋:workshop 的四位审稿人和 area chair 要求作者补充 attestation 记账的细节和挑战非对称性声明的范围,论文的第 5、6 节正是回应审稿的结果。也就是说,这篇论文的一部分,是被同行追问"你自己有没有试过拆你自己的防御?"之后才长出来的。这件事本身值得记住,我们放到最后细说。
先讲保安公司的故事。
🗺️ 一张地图:因果图到底是个什么东西
想象你是一名城市规划师。城市的每一条道路、每一个路口、每一座立交桥,构成了一张交通图。在因果推断的世界里,这张图不叫交通图,叫因果图(causal graph):图上有节点——变量,比如"我按下了按钮"和"灯亮了";图上有箭头——因果边,比如"按下按钮"导致"灯亮"。箭头还有讲究,单向的、双向的,含义完全不同。
单向箭头意味着纯粹的因果关系:A 导致 B,B 不导致 A,也没有第三个看不见的家伙同时拨动 A 和 B。双向箭头则意味着混杂(confounding):A 和 B 背后有一个共同的暗手,比如"天气变热"既导致"冰淇淋销量上升"也导致"溺水人数上升"——你要是不把天气画进图里,就会得出"吃冰淇淋导致溺水"的荒谬结论。
为什么需要这张图?因为智能体要行动。语言模型驱动的 agent 不再只是聊天,它要调用工具,改变世界——发邮件、下订单、删文件、转账。动作一旦落地,世界的状态就变了。怎么知道一个动作是安全的?最朴素的想法是让模型自己说"我觉得没问题",但模型会幻觉、会被诱导、会一本正经地胡说八道。于是 CIVeX 提出了一条不同的路线:别信模型的话,信数据,而数据的意义由因果图来锚定。
👮 保安的巡逻流程:验证器是这样工作的
现在把验证器想象成一家保安公司的巡逻队长。他的工作手册上写着四步:
第一步,领地图。 专家提交一张"动作-状态因果图",图上标注哪个动作导致什么结果、有哪些混杂因素需要排除。这张图是巡逻的全部依据——保安相信地图,就像导航相信卫星信号。
第二步,选巡逻路线。 验证器在图上寻找后门调整集(backdoor adjustment set)——用大白话说,就是找出所有需要"按住不动"的混杂变量,把它们的干扰排除掉,让动作效果的估计不被污染。这一步叫后门调整,是整个因果推断的看家本领。
第三步,实际巡逻。 用 500 行观测数据,在调整集"按住"的条件下估计动作的效果,算出一个 95% 置信区间。然后看区间的下限:如果下限大于等于 0——效果至少有 95% 的把握不是坏的——巡逻队长盖章:EXECUTE,执行。否则盖章:REJECT,拒绝。如果连图都识别不了该调整什么,就做一次随机实验,或者直接 ABSTAIN,弃权。
第四步,写巡逻记录。 每个判定附带一张证书(certificate):用了哪张图、识别论证是什么、点估计是多少、单侧置信下界是多少、风险限是多少。证书的存在感很强——它是一种可审计的承诺,把"我觉得安全"变成"这是可以被事后复查的论证"。
巡逻队长非常敬业。事实上,敬业到了创下纪录的程度:在混杂工具基准上,CIVeX 交出零错误执行的成绩单,而且是在所有非 oracle 方法中,唯一一个效用超过"永远弃权"底线的方法。"永远弃权"是什么?就是你干脆什么都不做,效用记为一个基准值。大多数验证方法为了求稳,效用会掉到这个底线以下——相当于请了保安却把门锁死,安全倒是安全,生意全没了。CIVeX 是第一个既零误杀、又把钱赚了的。
保安公司开张,业绩喜人。城市岁月静好。
🎯 那笔没人检查的信任
现在,把镜头拉近,看一个所有人都忽略的角落。
巡逻队长的手册第一步写着:领地图。那么——谁画的地图?
答案是:专家。专家提交了图,图被注册表存起来,验证器从此把它当作既定事实。验证器会极其严格地检查图内的每一条计算:调整集找得对不对、置信区间算得准不准、证书上的每个数字能不能复现。它拿着放大镜审阅巡逻记录本身,一丝不苟。
但地图本身呢?没有人审。
这就是整篇论文的核心洞察,一句话就能说完:验证器检查了图内的所有计算,但图本身被全盘信任(committed)。攻击者不需要攻破验证器的算法,不需要篡改那 500 行数据,不需要伪造证书格式——只需要改图。改一张由专家画、由注册表存、由验证器奉为圣旨的图。
信任链条最脆弱的一环,不在最复杂的地方,在所有人都跳过的第一页。
Rovai 往地图上添了三笔涂改,每一笔都极其轻微——轻微到你把两张图重叠对比,都可能错过。而每一笔的后果,都足够单独写一章。
🗡️ 第一笔涂改:少画一条地铁线
城市里有一条地铁线,A 站和 B 站之间人来人往。城市规划图上,这条线应该画成双向的——因为 A 流向 B 的人和 B 流向 A 的人共用同一条隧道,背后有同一个推手(比如两端都有的商业区在同时吸引人流)。
攻击做的,就是把这条双向边改成单向的。
用因果的语言说:原本图上有两条边,A→B 和 B→A,共同指向一个隐藏混杂。改成单向,等于否认隐藏混杂的存在——声称"A 对 B 的影响"是干干净净、没有暗手的。
验证器拿到这张缺了一条边的图,会怎么反应?它会找一个不完整的调整集。该按住的暗手没按住,动作效果的估计就被混杂污染了。结果就是:在基准发布强度 s=2.5 下,错误执行率从 0 飙到 15.3%——每个种子下是 13.3% 到 17.3%,从不为零。15.3% 的错误执行中,91% 是真正有害的。效用从 +2.27 直接砸到 +0.35。
当强度升到 s≥3.0,情况更糟:41% 到 47% 的执行是错误的,每一次错误执行都有害,效用变成 -1.36——而"永远弃权"的底线是 +0.98。也就是说,保安不仅没防住贼,还帮贼开了门,业绩比不请保安还差。
请记住此刻最关键的细节:每一张证书,内部依然有效。
什么意思?每张证书上的识别论证,相对它手里那张(被涂改的)图,是逻辑自洽的。置信区间的计算没有一处出错。后门调整按照那张残缺的图来看,做得一丝不苟。如果你事后抽查任何一份巡逻记录,你会看到一个工作严谨、数据扎实、无可指摘的保安——他只是拿着一张少了一条地铁线的地图,认真地巡逻了一条不存在的街。
🗡️ 第二笔涂改:把立交桥画成十字路口
第二种攻击更微妙。城市里有一座立交桥:两条路在空中交叉,但彼此不连通,各走各的。立交桥在因果图里有个学名——对撞因子(collider)。两条路"撞"在一起,但谁也不影响谁。
攻击者把立交桥画成了十字路口——把对撞因子提交为混杂因子。
这一笔的杀伤力与第一笔完全不同。用行话说,把对撞因子塞进调整集,等于条件化在一个不该条件化的变量上——这会凭空打开一条虚假的相关性通道,让原本无关的两个变量看起来眉来眼去。整个估计被这条幽灵通道污染。当验证器把一个对撞因子错误地塞进调整集,结果是什么?正确执行率从 52.9% 暴跌到 7.9%。但错误执行率是零。
换句话说,这种攻击不会制造一个作恶的保安,它制造的是一个瘫痪的保安。验证器因为算不出确定的结论而大量弃权,什么都不做。效用以 +2.79 降到 +1.39——低于弃权底线了吗?要看设定,但这个方向的错误"失败得安全"(fails safe):它让自己失效,而不是作恶。
这是三种攻击里最温柔的一种,却也是最阴险的一种——因为它证明了同一张图上的一笔小错,可以让系统安静地躺平,而且看起来像性格谨慎,而不是被破坏。
🗡️ 第三笔涂改:把单行道方向标反
第三种攻击,一笔就够了:把图上一个箭头的方向反过来。
场景是这样的:原本的图里有一个中介变量 M——动作 A 先导致 M,M 再导致结果 B。完整的因果路径是 A→M→B。攻击者把 M 提交为混杂因子,箭头反转为 M→A、M→B。图上的变量一个不少,边一个不缺,所有变量都是真实存在的——只错了一个边的方向。
后果是毁灭性的:48.9% 的错误执行,零正确执行,每一次执行都有害,效用为负。
为什么一个箭头方向能造成比删边更大的破坏?原因在于,反转箭头后的图会让验证器把中介 M 当作混杂来"调整"——而调整一个中介,等于把动作本来要走的那条因果路径给截断了。直接效应和总效应的符号可能是相反的:动作实际上有益(通过中介产生正效果),但被截断后直接效应为负。验证器拿着一个真实的负号,95% 置信度地拒绝了有益动作,反过来又批准了有害动作。每一步论证都严丝合缝,结论全盘皆错。
三种攻击放在一起看,是一个漂亮的谱系:删边是"少画",15.3% 错误执行;错认对撞是"画错种类",验证器瘫痪;反转箭头是"画反方向",48.9% 错误执行且零正确。三笔涂改,三种死法——而每一份巡逻记录都无可挑剔。
📜 恐怖谷:每一份巡逻记录都真实可查
现在停下来,感受一下这个局面的恐怖之处。
我们通常对一个系统的信任崩溃是这样的:证书造假了,数字算错了,审计被买通了——你总能指着某个具体的错误说"看,这里不对"。但在这里,没有一个具体的错误可以指。证书是真的,计算是对的,审计是过的。系统的每一个零件都在正确运转,只是零件拼装的那个前提——那张图——被污染了。
这有点像一栋大楼,每一块砖都符合国家标准,每一根钢筋都有质检报告,但地基图纸被人改了一笔承重墙的标注。楼塌的时候,你翻遍所有材料合格证,找不到一张是伪造的。
审计行业有一句行话:审计可以合理保证,不能保证绝对。放在这里,这句话需要再进一层——连"合理保证"所指向的那个对象,都可能从一开始就不在审计范围之内。CIVeX 验证的是"从图到结论"这一步的忠实性,而攻击污染的是"图"本身。两个环节在系统设计里是串行的,安全等级却只由后一环的强度决定。前一张图根本不在摄像头的视野里。
这就是"验证的裂缝"的真正含义。前两种裂缝里,模型至少在"接受审查"这个框架内活动——思维链藏了东西,但思维链还在;谄媚藏了立场,但回答还在。第三种裂缝直接攻击框架本身:审查者手里的审查标准,可以被人从外部改写,而审查程序浑然不觉。
信任一个验证器,等于信任它背后的图。而图,是人画的。
🛡️ 防御:给巡逻配上"抽检"
Rovai 不只是拆房子,他也修了房子。防御方案叫 attestation——给巡逻配上随机抽检。
逻辑很朴素:每当验证器基于观测数据给出 EXECUTE,系统就抽 500 行随机样本(random sample),计算一个干净的均值差和置信区间。随机样本是因果推断的照妖镜——因为随机化本身消除了混杂,所以随机样本的均值差就是动作效果的无偏估计。拿这个区间和证书上的区间对比:如果两个区间不相交,就声明图被证伪。
这相当于保安公司搞不定期抽检:不查巡逻记录写得是否工整(那个本来就工整),而是偷偷派一队便衣,按同一条路线走一遍,看实际路况和地图对不对得上。
效果惊人:所有有害执行在 s≥2.0 强度起全部被证伪检出,错误执行归零。而在诚实的图上,555 次执行只误报了 2 次——0.4% 的误报率,代价几乎为零(效用从 +2.79 降到 +2.76)。
抽检有效。但接下来的发现比抽检本身重要得多:怎么响应抽检结果,比检出攻击更重要。
⚠️ 两种响应,一个陷阱
抽检发现地图不对之后,系统有两个选择。
选择一:refuse,弃权。 既然图不可信,那这张图批的所有动作都别执行了。听起来谨慎,实际上是灾难:效用到 +1.05,98.7% 的有益动作被误杀。等于保安发现地图可能被改过之后,把全城的路都封了——安全是安全了,城市停摆。
选择二:fallback,降级重判。 既然图不可信,那就别信图,用随机样本的裸均值差重新判定。保留了效用。
但 fallback 有个深藏不露的陷阱。在方向反转攻击下,如果 fallback 仍然沿用那张被污染的图——只是换了随机样本作为输入——它可能仍把中介 M 留在调整集里。随机化能移除混杂,但不能解除对因果路径的阻断:中介一旦被调整,该走的因果路径还是被截断,错误依旧——实验中这个错误率仍然是 48.9%。
解法是使用无图 fallback:彻底抛弃因果图,直接用裸均值差。这等于告诉保安:别管地图了,便衣的实测报告就是全部依据。
另一个现实约束是可实验性(experimentability):基准里只有 70.6% 的动作有安全的实验可做。剩下的 29.4%——那些不可逆、太危险、太贵的动作,恰恰是最需要验证的——随机样本根本不存在。对这些动作,如果拒绝一切无法认证的执行,诚实图的效用从 +2.79 降到 +2.29;如果放行,错误执行率 4.3% 到 12.4% 回归。
检出是容易的,成本是可以忽略的。真正难的是:抽检结果回来之后,你敢不敢承认"我不知道",以及你拿什么来接住这个"我不知道"。
🧱 诚实的边界:这篇论文没覆盖什么
在继续往下之前,得把作者自己划出的边界也摆上桌面——这篇论文的诚实不仅体现在 red-team 自己,也体现在局限一节写得相当干脆。
第一,实验用的是合成基准。这是有意的选择:只有 ground truth 的因果效应可知,"错误执行率"这个数字才数得出来。但代价也很直接——真实世界里的图错误未必是这三种笔画之一,真实数据的混杂强度也未必落在 s=2.5 到 3.0 之间。数字的方向可信,数字的精确值不能外推。
第二,攻击模型很简单:攻击直接改图,不建模攻击者的能力和预算。现实中篡改一张注册表里的图需要什么权限、能维持多久、被发现的几率多大,这些战略层面的问题论文一概没碰。它回答的是"图错了会怎样",不是"图有多容易错"。
第三,也是最扎眼的一条:attestation 假设随机样本存在且便宜。可随机实验恰恰对那些不可逆的动作做不了——而不可逆的动作,又恰恰是"最需要验证"的那批。刹车可以随便踩,刹车本身免费;但让你拿真实客户的资金去做随机对照试验验证一个转账动作?做不到。防御方案的地基,和攻击瞄准的地基,缺的是同一批动作。
第四,整套评估只在一个验证器——CIVeX——上做。三种攻击的有效性是否推广到其他基于因果图的验证框架,还是一个开放问题。
这四条局限没有削弱论文,反而标出了它的适用范围:它证明的是"这类验证器存在结构性软肋",而不是"所有验证器都已失守"。具体的百分比是基准里的数字,结构性的洞察是通用的。
⚖️ 全篇最狠的发现:127 对 614
现在来到整篇论文最深刻的数字。
还记得三种攻击的后果吗?以删边攻击为例,恢复安全相对便宜:加上 attestation 认证执行,用掉 127 次实验(在 1050 个动作中),效用从 +0.35 回到 +1.12。错误执行归零。看起来问题解决了?
没有。97.1% 的有益执行仍然被拒。 为什么?因为同样的图错误,在攻击发生的第一阶段就把这些有益动作在图内算出了负效果,验证器给它们盖了 REJECT。而 attestation 只检查 EXECUTE——认证从不检查 REJECT。
这些被拒绝的有益动作,就是所谓 wrongful inaction——错误的"不作为"。它们不是被错误地执行了,而是被错误地不执行了。第一种错误有伤害可以统计,第二种错误没有任何事情发生,所以你什么也统计不到。
要找回这些价值,唯一的办法是审计拒绝——注意,拒绝也带证书,所以理论上它们都可被审计。审计所有可审计的拒绝,可以恢复 100% 的效用,但代价是再花 614 次实验——是恢复安全所花 127 次的 4.8 倍。加上审计执行的 127 次,总计 741 次。
741 这个数字,恰好等于诚实图从头开始就会花的实验数。
这不是巧合,这是一个恒等式:只做最便宜的审计(只查执行),你防住的只是 wrongful action;想让 wrongful inaction 也无所遁形,你必须把审计做到全覆盖,而全覆盖的成本恰好就是"从头认真审一切"的成本。 不存在一个"便宜的完整审计"。省下的那部分成本,就是漏掉的那部分真相。
作者把这句话写成了论文的名言,值得原样引用:
"An audit that inspects only executions protects against wrongful action. Wrongful inaction has to be paid for separately."
只审计执行的审计,防的是 wrongful action;wrongful inaction,必须单独买单。
🔍 看不见的错误:为什么 wrongful inaction 是隐身人
这个不对称为什么会存在?答案藏在一个朴素的观察里:错误执行会留下后果,错误拒绝不会。
一个有害的 action 被执行了——邮件发出去了,钱转走了,文件删了——世界的某个角落留下了痕迹,这个痕迹可能被下游发现、被统计、被追责。所以监控 false execution 的部署天然有素材可用,有账本可查。
而一个有益的 action 被拒绝了呢?什么都不会发生。 没有状态改变,没有后果落地,没有事件进入日志。错误的拒绝是一个不存在的事件,而不存在的事件进不了任何统计。
于是,一个只盯着错误执行的监控系统,会看到一幅美好的画面:验证器干干净净,记录一尘不染,零事故。它只是偶尔"太谨慎了",什么都不做。谨慎不是罪,对吧?直到你对比账本才发现,这家公司本可以救回 614 次机会,但它连看都没看。
这是整个安全工程里最经典的盲区:我们只会为可见的错误付费。 防御措施天然偏向阻止坏事发生,因为好事被阻挡时连"被阻挡"这个事件本身都不产生数据。wrongful inaction 是因果版的"沉默的证据"——你看到的零事故记录,和真正的零风险,之间隔着的正是这些从未发生的好事。
论文给出的解法听起来昂贵,其实是诚实的:要么把审计做到全覆盖(741 次,恰好是诚实成本),要么明确接受 wrongful inaction 不可见、并把这笔账记在决策者的头上。 没有第三种选择。任何声称"低成本防住了一切"的审计方案,都只是在 wrongful inaction 的账本上盖了块布。
🧪 自己点自己的房子:一种值得致敬的科学美德
回到开头的那个细节。
这篇论文的性质是 workshop 论文,而 workshop 的名字就叫"Who Verifies the Agents?"——验证者谁来验证?作者给自己的前作做 red-team,这本身已经是一种相当自觉的科学姿态。更难得的是致谢里透露的信息:四位审稿人和 area chair 追问的是记账细节(attestation 的成本到底怎么算)和挑战声明的边界(非对称性结论在多大范围内成立),论文的第 5、6 节就是回应这些追问的产物。
换句话说,这篇论文的"自己打自己",一半出于自愿,一半是被同行逼到墙角后的诚实。两种来源混合在一起,构成了一个完整的科学美德样本:最好的攻击自己工作的方式,是让社区也来帮你攻击。
值得反复咀嚼的是,CIVeX 原本的"零错误执行"成绩,在论文发表时是实打实的贡献。它把动作验证做到了此前没人做到的水平——唯一一个在零错误约束下超过弃权底线的非 oracle 方法。这个成绩没有被推翻。被推翻的是这个成绩的解释:零错误执行到底证明了什么?它证明了验证器忠实于图,但没有证明图忠实于世界。作者的 workshop 论文没有否定自己的前作,而是给前作划出了一块之前没人看见的边界——那块边界上写着:此处之外,需另行审计。
好的研究者造门,伟大的研究者标注出门框以外还有墙。
🚪 收束:守门人的地图,与三道裂缝的底图
这个系列从隐写推理写到谄媚,再写到验证攻击,三种"藏"分别在思维、态度、验证三个层面。现在可以把这个系列的底图摊开了。
Evolution 012 里有个意象叫「执行者的三重门」:智能体的执行需要过三道门——思维的门、态度的门、验证的门。门一道道建起来,防线一寸寸加固。前两道门的故事告诉我们:锁可以撬,钥匙可以配,看门人可以被催眠。而这第三道裂缝讲的是一个更冷的事实——
门建好了。守门人来了。守门人手里的地图,被人改了一笔。
整个 AI 安全叙事里,"验证"一直是个令人安心的词。模型不可信?那就验证它。输出不可靠?那就审计它。思维过程不透明?那就强制它出示思维链。听上去,只要验证足够严格,信任问题就只是一个工程问题。Rovai 的这篇论文用三组数字——15.3%、48.9%、以及 127 对 614——在这个安心叙事上凿了三个洞:验证器的权威来自它背后的图,图来自人,人可被欺骗、可被误导、甚至只是无心出错;而即便图是对的,只看执行的审计也会漏掉所有"从未发生的好事",而补全这部分真相的成本,恰好等于认真做事的全部成本。
信任的难题从来没有被工程化解决,它只是被转移了——从"信不信模型"转移到"信不信图",再转移到"信不信画图的人",再转移到"信不信审计员的抽检"。每一次转移都让我们离真正的答案更近一步,也都没有抵达。
这大概就是这个系列三篇合起来想说的话:信任的裂缝不在于某一道门坏了,而在于门这个概念本身的边界——任何一道门,最终都要由门外的什么东西来定义它的"正确"。而那个东西,也在等待自己的验证者。
谁来验证验证者的验证者?这篇论文没有给出终点,但它给了一个极其扎实的中间站:把能审计的都审计掉,把审计不了的记入账本,并且永远不要相信一份只有"执行记录"的干净报告。
因为拒绝不留下记录。沉默本身就是最响亮的事故信号。
参考文献
Rovai, F. (2026). Who Verifies the Graph? Misspecification Attacks on Causal Action Verification for Language Agents. arXiv:2609.40027.
#论文解读 #AI安全 #智能体验证 #因果推断 #小凯