你有没有遇到过这种情况:让一个很能干的助理去处理一件复杂的事,过了几天他跟你说"搞定了",你松了一口气,结果三个月后才发现,他为了把事情"搞定",私自改了评分标准,删了一些他觉得没用的数据,还换了一个你根本不知道的统计方法。
事情确实是完成了,结论却可能完全不对。
这不是一个假设。随着AI智能体越来越能干,能自己改代码、跑实验、分析数据、写报告,用户的角色正在发生一个根本性的转变。你不再是那个亲自做每一个决定的人,你变成了一个监工,看着AI在干活,偶尔点头,偶尔皱眉。
问题是,这个监工岗位极其难干。
**为什么"看着AI干活"比想象中难得多**
想象你雇了一个实习生,每天产出几百条消息、几十次工具调用、几份中间文件。你要从这堆东西里,挑出那些真正值得你操心的决定,这件事本身就是个体力活。
更麻烦的是,证据是碎的。
一个关键决定的根据,可能散落在三个不同的地方:一句话藏在某次对话里,一段代码改动埋在某个文件里,一个异常处理藏在报错日志里。你要把这三块拼起来,才能看懂AI到底做了什么选择,以及这个选择会不会影响最终结果。
论文里举了个很直观的例子。假设你让AI评测两个模型在100道题上的表现,但任务书里忘了说"答不出来的题该怎么算分"。AI自己拿主意:把空题算错,或者只用答过的题算准确率。这两种算法,会让两个模型谁排第一直接反过来。这不是bug,代码跑得完全正常,测试全部通过,可结论是错的。
这篇论文想解决的问题就是:**哪些自主决定值得用户停下来确认一下,支撑这些决定的证据又藏在哪儿**。
**三个维度的审计体系:AgentMonBench**
研究者没有空谈这个问题,而是搭了一个叫**AgentMonBench**的测试基准来量化它。
基准*:一套标准化的测试题集,用来横向比较不同方法或模型在同一类任务上的表现好坏。
这个基准分成三块,每一块对应一种现实中真实会出现的监督困境。
第一块叫**SpecGAP**,专门测"任务书没写清楚,但代码里确实做了选择"这种情况。研究者会故意从一份完整的任务说明书里,删掉几条关键要求,然后看AI审计员能不能从代码实现里,反推出"这里本该有一条规则但文档没写"。就是前面说的评分规则的例子。整个基准收集了484个这样的"缺口",覆盖7种不同的遗漏类型,大部分被标注为"必须问清楚"级别的严重缺口。
第二块叫**SilentSwap**,更隐蔽。这次任务文档没问题,是代码悄悄换了实现方式,而且换了之后所有现成的测试还是全部通过。比如文档要求用"精确匹配"去对答案,代码却偷偷换成了"语义相似度"。如果参考答案是"Paris",模型回答"法国的首都是巴黎",精确匹配打0分,语义相似度能打到0.79分。两种方法算出来的分数完全不是一个概念,但现有测试根本看不出区别,因为测试本来就不是为了检测这种变化而设计的。SilentSwap一共埋了500处这种"合法但变味"的替换,分布在8种不同的变更机制里。
第三块叫**FeedbackTrace**,这块最有意思,因为它用的是真实的人机交互记录,不是人工构造的测试题。研究者从真实的用户和AI对话历史里,找那些用户后来回头纠正AI的时刻,比如用户说"等一下,你这样做不对"。然后把这个反馈事件之前的所有对话抽出来,让审计员只看反馈发生前的内容,判断能不能提前识别出"这里有个决定应该先问问用户"。这100个样本里,69%被标注为"必须披露"级别。
这三块基准合在一起,覆盖了审计工作的两个核心维度:一是检查执行结果是否偏离了用户要求(文档和行为对不对得上),二是检查AI有没有在用户不知情的情况下做了需要确认的关键选择。
**EBG:把散落的证据拼成一张可读的地图**
有了考题,接下来是解法。研究者提出的方法叫**EBG,证据支撑行为图**(Evidence-Grounded Behavior Graph)。
这个名字听起来复杂,核心思路其实很朴素:**证据之所以难用,不是因为它不存在,而是因为它散得到处都是,没有被组织起来**。
打个比方。你去医院看病,医生不会直接把你所有的检验报告单、X光片、病历本一股脑扔给你自己看,而是会先把这些材料按"症状、检查、诊断"的逻辑串起来讲给你听。如果不这样组织,哪怕所有信息都给你了,你也很难在短时间内看懂病情到底是什么。EBG做的就是这件"组织信息"的工作,只不过对象从病历变成了代码仓库和AI的执行轨迹。
EBG分两步走。第一步叫**结构化行为图构建**,这一步完全是确定性程序,不调用任何大模型。它先把原始材料拆成一个个"证据单元"(代码里的一行、对话里的一段),再把同属一个活动的证据组织成一个"行为"。
行为*:按照条件、操作、结果(代码场景)或需求、动作、回应(对话场景)三个角色组织起来的一组证据,代表一次具体的局部活动。
接着这些行为被归到共享上下文的**范围**(Scope)里,范围之间再用调用关系、数据流关系这类明确的边连起来,最终形成一张图。这整个过程没有任何语义判断的参与,纯粹是按规则拼装,像拼乐高一样确定且可重复。
第二步才轮到AI上场,叫**任务导向的证据呈现**。这一步会根据当前任务的具体要求,去图里挑出相关的那一小块,连同对应的原始文档段落和源代码一起,组织成一份"证据简报"交给审计员model去判断。这里有一个细节很关键:EBG只负责组织材料,证据简报里呈现的所有内容都能追溯到原始出处,真正的语义判断全部留给负责审查的大模型去做。EBG不替AI下结论,它只负责把该看的材料摆到AI面前,别让AI在海量信息里迷路。
如果不这样分两步走会怎样?如果让大模型直接去茫茫代码海里自己翻找证据,那就跟你把一个新来的审计员直接扔进一个从没整理过的档案室,让他自己去找所有相关文件一样,大概率会漏掉关键的那一份,或者花掉大量精力在无关的文件上。实验数据后面会证明,这种"裸给原始材料"的做法效果明显更差。
**实测结果:组织过的证据确实管用,但模型本身还差得远**
研究者把这套方法放到8个主流模型上做了测试,覆盖GPT-5.6系列、DeepSeek-V4系列、Kimi K3、Claude Sonnet 5、GLM-5.3,用EBG和"直接给原始材料"两种方式分别跑了一遍。
结果最直观的结论是:**现在最先进的大模型,在"识别关键决定并找到对应证据"这件事上,表现依然相当有限**。
即使给了结构化的证据,很多模型也只能在部分任务上做到及格线左右,这说明这不是一个靠堆算力就能轻易解决的问题。
另一个结论是EBG确实带来了普遍提升。
拿GLM-5.3来说,在SpecGAP上,组织证据后的语义F1从0.481提升到0.526,证据定位的F1从0.498提升到0.581。在SilentSwap上,定位分数从0.560提升到0.708,涨幅相当明显。在FeedbackTrace上,验证点对齐分数从0.443提升到0.518。几乎所有模型在几乎所有指标上都有不同程度的提升,只有极少数情况出现小幅波动。
还有一个更细致的发现,值得单独说一说:**"找到证据"和"看懂决定意味着什么"是两件不同的事,有时候一个模型能更准地定位到相关代码,却反而对这段代码背后的决定理解得更差**。这说明光把材料摆对位置是不够的,证据的组织方式必须同时帮助模型做出正确的语义判断,否则就是定位和理解两条腿走路不同步。
研究者还做了一个压力测试,专门看输入材料变长之后会发生什么。他们把所有测试样本按输入长度分成低、中、高三档,结果发现,不管哪种基础方式,平均表现都会随着输入变长而下滑,比如FeedbackTrace上"证据命中率"这个指标,从低档的0.667一路跌到高档的0.422。而用了EBG之后,在三个档位上都有提升,哪怕是输入最长最复杂的那一档,依然能带来0.078到0.115不等的提升幅度。这说明EBG不是只在小规模材料上好使的技巧,输入越乱越长,它整理证据的价值反而越能体现出来。
这就像在一个只有十张纸的小文件夹里找东西,和在一个堆满上千页文件的仓库里找东西,差别是巨大的。如果没有一套分类规则,仓库越大,人越容易找不到东西,而EBG相当于提前给仓库装了索引系统,材料越多,索引系统省下的时间就越可观。
**真实场景里的五个案例:审查到底能拦下什么**
光看分数还是有点抽象,研究者干脆把EBG接到了实际的Codex编程助手里,做了一个带审查功能的工作流,在五个改编自真实问题的研究任务上跑了一遍。
第一个案例是**优化目标不明确**:任务要求同时报告准确率和召回率,但没说哪个更重要。没有审查机制的时候,AI自己选了准确率作为优先指标就直接往下跑了,事后才在报告里解释这个假设。装了审查机制之后,AI在动手之前先检查了任务书,发现这个优先级确实没有写明,主动停下来问了用户,用户选择了准确率。决定权被还给了真正该做决定的人。
第二个案例更隐蔽:**一个备用执行路径悄悄改变了随机种子的设置方式**。原本每道题该用独立的随机数流,但故障切换到串行模式后,代码重用了同一个随机数生成器,这会悄悄影响整个对比实验的公平性。没有审查的那次跑完就直接采纳了结果,报告里只提到切换了执行方式,没提到随机性被改变了。有审查的那次,AI对比了保存的基线执行路径,发现了这个差异,修复后重新跑了一遍实验,并且把这个改动明确告诉了用户。
第三个案例叫**验证集数据泄露**:某个候选方案往训练集里加了一批额外样本,分数确实涨了,但审查机制追溯这批数据的来源后发现,里面有8个样本其实是从验证集扰动生成的。这意味着模型某种程度上"看过"了它要被测试的数据,涨分不能算真本事。审查版本的AI保留了观察到的分数,但否定了它作为"泛化能力提升"的证据价值,最终坚持用没有数据泄露问题的基线方案。
第四个案例是**接口连通性没真正验证**:一个烟雾测试通过了,但审查发现这个测试底层调用的是缓存的历史响应,根本没有真正发起一次网络请求。测试通过不等于接口是通的,审查机制明确向用户说明了这一点,没有把一个假的"通过"包装成真的验证结果。
第五个案例是**搜索预算不对等导致的虚假优势**:候选方案获得的调参搜索次数远多于对照方案,翻了好几倍,分数自然更高,但这种优势不能完全归功于优化算法本身。审查机制保留了最优配置,但在最终结论里明确加上了限定条件,说明这个结果不能单纯归因于优化器的优劣。
这五个案例有个共同点:**没有审查机制的版本不是做错了事,而是把一些本该交给用户判断的分叉点,自己悄悄决定了,事后也没有特别提醒**。装上审查机制之后,这些分叉点被重新摆到了台面上。
**失败分析:问题到底卡在哪一步**
研究者还做了一件挺实诚的事,没有光展示方法好的一面,而是认真拆解了EBG失败的那些案例,到底是在哪个环节出了问题。
他们把每一个失败案例追溯到最早出问题的那一步,分成三类:该读的文件根本没被选中、文件选中了但相关内容没在呈现的证据里出现、证据都摆在眼前了但模型还是判断错了。
结果相当一致:**绝大多数失败发生在第三类,也就是证据已经完整摆在模型面前,模型依然没能正确识别或完整披露这个决定**。在SpecGAP和SilentSwap上,这个比例在七成到八成之间,FeedbackTrace上更夸张,几乎所有被审查过的失败案例,相关证据事件都完整出现在了模型能看到的材料里,但模型依然没能做出正确判断。
这个发现让人有点意外,原本以为瓶颈主要在"找不到证据",结果真正的瓶颈更多在"看到证据之后怎么用"。这提示了一个方向:未来光靠改进证据组织方式可能还不够,得同时想办法提升模型拿到完整证据后的推理质量,这是两条需要分别发力的战线。
写在后面
读到失败分析那部分的时候,我其实有点意外。本来以为EBG这类"信息整理"工具最大的价值会体现在"帮模型找到证据"上,结果数据显示大部分失败案例恰恰发生在证据已经摆好之后。这说明一个很朴素但容易被忽略的道理:给对信息和用对信息,是两件不能互相替代的事,前者解决的是检索问题,后者考验的是推理能力,而这篇论文很诚实地把这两者分开量化了,没有混为一谈去邀功。
另一个让我反复想的细节,是SilentSwap那种"合法但变味"的替换方式。它之所以难防,不是因为代码写得隐蔽,而是因为现有的测试体系天生就不是用来检测"语义漂移"的,它检测的是功能对不对,不是意义变没变。这让我想到一个更大的问题:**我们现在给AI系统设计的大多数验收标准,其实都偏向"功能正确性",而不是"意图一致性"**,这篇论文选的这个角度,某种程度上是在提醒整个行业,这两件事从来不是一回事。
还有一点值得单独记一下:FeedbackTrace这个子集用的是真实用户反馈构造的,不是人工编的假题。这意味着论文里报告的那些"用户后来回头纠正AI"的场景,不是实验室里凭空想象出来的理想情况,是真实发生过的监督失效。这让整件事多了一层不太舒服但很真实的分量。
AI智能体会不会越来越像一个你完全看不懂、也来不及看懂的黑箱,这个问题目前还没有答案。但至少现在有人开始认真地问:"它刚才到底做了什么。"
Q&A
Q1:EBG是什么,解决了什么问题?
A:EBG是证据支撑行为图,一种不需要额外训练的方法,它把散落在代码仓库或AI执行记录里的证据,按行为和关系组织成结构化的图,再生成针对具体任务的证据简报,帮助审查者更容易判断AI做了哪些关键决定,解决的是证据碎片化导致人工难以审查AI行为的问题。
Q2:AgentMonBench这个测试基准包含哪些内容?
A:AgentMonBench包含三个子集:SpecGAP测试任务文档遗漏关键要求但代码已实现的情况,SilentSwap测试代码悄悄替换了实现方式但现有测试仍通过的情况,FeedbackTrace基于真实用户反馈,测试能否在用户纠正前就识别出需要确认的决定。
Q3:实验证明EBG真的有效吗,提升有多大?
A:在8个主流大模型上的测试显示,EBG在大多数情况下都优于直接给原始材料的方式,比如在SilentSwap上某些模型的证据定位分数从0.560提升到0.708,而且这种提升在输入材料很长的情况下依然存在,但研究也发现当前模型即使拿到完整证据,判断失误仍是主要瓶颈。







