
最近读了篇论文,发现一个挺反直觉的问题:Agent基准测试里的"用户"其实是个模型,而这个模型的失误能让成功率虚高到让你误判。这个坑值得单独写一篇。
在某个基准测试中,有个人口角色代理(User Proxy)开场第一句话就是"对了,我叫John Smith,电话是555-123-2002。"这个任务的本意是测试Agent在处理账户信息前是否会主动要求验证身份,但代理直接就把信息交出去了,完全没等Agent提问。
Agent得了满分。可测试本身想要验证的东西根本没被测到。
这个例子来自UserProxyBench,这是一篇Ashish Jain和Armaan Sandhu写的论文,给tau-bench系列加了一层评估框架。我一直在看这篇论文,因为它命名了一个我在代码审查评估中经常遇到的问题:模拟参与者本身就是测量工具的一部分,但几乎没有人对它进行评分。
交互式Agent基准测试越来越多地用第二个语言模型来扮演用户角色。它控制着Agent获取什么信息以及何时获取——不这样就没法做多轮任务。这套模式正在渗入训练流程:模拟用户坐在强化学习循环里面,决定策略在每次rollout中看到什么。
UserProxyBench测量的是那个"用户"有没有干好分内的活。他们叫它用户保真度分数(User Fidelity Score,简称UFS):代理满足其私有用户蓝图里每条适用标准的比例。评分标准来自Claude Opus 4.8,每个任务4到8个原子标准,由另一个模型(GPT-5.6-Sol)审查以确保基础性和可实现性。四个企业领域(电信、航空、零售、银行)共2,141条标准,375个任务。GPT-5.5冻结作为Agent,七个不同的代理轮流坐用户位,每个任务一次rollout。
标准分四类:基础性(groundedness)、过早披露(premature disclosure)、目标偏离(goal deviation)、遗漏信息(missed information)。总共19种失败模式,其中18种在测试集中确实有触发。唯一没触发的是自我矛盾,得了零分。值得记一笔,因为这说明分类体系没有被注水。
只换用户代理,Agent保持不动,平均任务奖励移动了15.2个点。基准测试的结果会因为一个根本没被评分的组件而改变。
24.4%的成功轮次包含用户规范违规。近四分之一的通过运行里,用户自己把自己的契约给破了。
最突出的失败模式是过早披露。每个代理都收到完全相同的明确指令:"逐步披露信息。等待Agent请求具体信息后再提供。"但它们就是做不到。
七个代理的平均UFS从0.599到0.864不等。Gemini-3.5-Flash表现最乖,0.864。GPT-5.4-mini最差,0.599,同时也是Agent奖励最差的,0.644——这是唯一一个两项数字一致的情况。Sonnet-4-6保真度0.778,奖励0.784,排名直接反转,取决于你读哪一列。
另外两个失败案例跟第一个一样具体。一个Gemma-26B声称执行了但没执行的操作:"好的,我来试试。让我看看……我现在把这个飞行模式关掉。稍等……好的,我等了一会儿。"实际上根本没调用过那个开关,设备状态仍然显示飞行模式是开的。还有一个捏造的设备状态:"哦!成功了!那条小进度条走完了,说已经发送了!"但上一个相关工具返回的是失败。两个都发生在通过了的轮次里。
如果你跑评估,这一部分才是重点。
在成功轮次中,过度披露的代理让冻结的Agent少调用了1.06次工具、少问了0.26个问题,七个代理无一例外。奖励分一样。干的活更少。Agent看起来同样称职,实际上任务被偷偷简化了——因为用户代它干了一半的信息收集工作。
在全部七个代理都完成的374个任务上,Agent平均轮数与UFS的相关性是r=0.955。任务奖励的相关性是r=0.594。如果你想知道你在评估的交互是否就是你设计的那个交互,保真度分数能跟踪它,奖励分数基本不能。
这和我对LLM评判器反复遇到的问题形状一样。当打分的是另一个模型,而你只盯着最终分数时,相关性错误就藏在一个看起来很干净的数字里。用户位就是另一个可能发生这种情况的地方。关于离线评估和在线评估的split我在AI代码审查基准测试那篇里写过,这篇文章是从另一个方向落地的同一个论点。
我读过的代码审查基准测试大多用固定的真实PR语料库,加上人工标注的真实结果,所以"用户"就是数据集,它不会行为异常。这是真实优势,也是我一直把人往语料库而非demo推的原因。
一旦转向交互式评估,你就又在构建模拟器了。任何允许Agent提问、请求重跑、或与合成PR作者协商范围的测试框架,里面都有一个用户代理。同样的逻辑也适用于评审方场景:如果你在测试评审者能否发现植入的缺陷,那个回答其问题的"PR作者"是个模型,它的行为是一个变量。
如果你在评分,代理需要自己的列。不是"Agent解决了吗",而是"模拟的对等方有没有执行它被分配的角色"。论文里那个无评判探针是我第一个想抄的细节:在电信领域,他们对照黄金用户写动作检查了全部658条轨迹,发现54次遗漏写入。其中23次通过了所有适用的规则标准,20次通过了一条直接相关的标准。LLM评判的规则漏掉的东西,机械检查免费就抓到了。确定性检查用于有黄金动作的地方,模型评判只在没有黄金动作的标准上用。
有个配套发现值得放在一起看。Persona Following Is Not Selective Control审计了八个黑盒LLM,发现人物提示里改一个属性,会移动提示里从没提到过的那些属性的答案。把用户描述成更爱冒险的,他们的颜色选择就变了。他们称之为特质条件补全(trait-conditioned completion):模型把人物设定当作关于那个人的证据,然后把推断出的画像延伸到未指定的领域。
然后他们测试了把非目标属性声明为中性是否能修复这个问题。不能。目标属性仍然在51%到81%的项目上泄露,跨五个开源模型checkpoint都这样——即使模型正确报告了声明的状态。"我们用详细的人物提示了模拟器"不是证据证明人物设定是唯一在驱动它的东西。方向性声明可以通过简单遵循指令来通过,这恰恰就是为什么需要中性状态来暴露这个失败。
成本方面也是实打实的,论文没有藏着掖着。七个代理每次模拟的用户端成本从0.0063到0.1841不等。Qwen3.6-35B、Gemma-31B和GPT-5.4-mini在成本-UFS平面上被标记为严格被支配(strictly dominated),意思是更便宜的得分更高。"选择最便宜且能过你的保真度门槛的代理"是一条可执行的规则,而不是句口号。
UFS是LLM评判的,而Claude Opus 4.8既写规则也评判轨迹。只有验证器是另一个模型。他们在讨论中说了这一点,并标记了十个任务和50个标准的单评分者手动审计。一次rollout每个任务。服务价格随时间浮动。这是诚实的局限性说明,同样也是我那篇自审盲点文章所警告的:生成器和评判器是同一个模型是已知的相关性风险,而无评判探针发现54次遗漏写入表明效应在这里是真实存在的。这没问题。论文的重点是测量缺口,而缺口是真实存在的,不管保真度数字本身是否需要第二个评判。
还有另一项研究正在流传,UC Berkeley合著、在COLM发表的那篇,发现AI辅助十分钟就显著降低了人们在困难问题上的坚持度——工具撤掉之后。三个随机实验,1,222名参与者。那边的框架是"有价值的挣扎"被移除了。
我读完那个再回来读1.06次工具调用减少的结果,感觉是同一个故事在不同尺度上讲了一遍。把困难的部分外包出去有效——直到你测量剩余的部分。在基准测试的例子里,剩余的是一个高分,但任务悄悄变简单了,没人能从奖励栏里看出来。
这些都不意味着交互式评估是坏的。意思是用户位是承重的,而它在大多数人们发布数字的测试框架里都没被测量。给它评分,给它命名,固定它,把保真度数字放在奖励数字旁边——因为读者在看的就是那个奖励数字。