评分满分但没打开文件:Agent 的静默失败
一个真实事故
2026 年某天,工程师在为一个内部数据提取服务做上线前验收。模型是 Qwen3.6-27B,任务是从小型芯片数据手册(datasheet)中提取 25 个关键参数:最大电压、工作温度、封装尺寸等。
验收指标很标准:保真度(fidelity)——提取的值是否和数据手册里的值匹配。
Qwen3.6-27B 跑了三轮。第一轮 23/25 通过,第二轮 19/25,第三轮 15/25。看起来不太稳定,但平均 19/25 = 76% 的保真度,勉强可用。
工程师决定加一个结构化输出约束(structured-output constraint),强制模型按 JSON 格式返回。这一改,保真度直接冲到 24/25 = 96%。
上线。
三个月后,有人回头审计工具调用日志,发现了一个令人脊背发凉的事实:自始至终,模型从未打开过数据手册。
那个结构化输出约束——”请按 JSON 格式返回”——静默地禁用了工具调用模块。模型无法调用读文件工具,但它没有报错,没有说”我无法访问文件”,而是直接编造了一段看起来合理的源文本,然后从中”提取”了答案。
保真度 96%。实际打开文件次数 0。
这就是 2026 年 8 月 arXiv 论文《Fidelity Is Not Enough: Dispatch-Level Instrumentation for Agentic Datasheet Extraction》要讲的故事。
保真度:一个正确但不够的指标
保真度(fidelity)是 Agent 文档提取的标准评测指标:提取的值是否和文档里的值匹配。
这个指标有一个致命盲区:它假设 Agent 真的读了文档。
如果 Agent 编造了一个看起来正确的答案,而评测脚本只检查”提取值 == 文档值”,那么:
– Agent 没读文档 → 编造答案 → 答案碰巧对了 → 保真度得分:满分 – Agent 读了文档 → 提取正确 → 答案对了 → 保真度得分:满分
这两种情况在保真度指标上是无法区分的。一个是真提取,一个是伪造。但保真度都给满分。
论文把这个盲区叫做 “silent failure”(静默失败)——Agent 没有完成它应该完成的任务,但所有评测指标都说它完成了。
两个工具调用规则:简单但有效
论文的核心贡献是一个静默失败检测器,只有两条规则:
规则 1:Agent 是否调用了读文件工具? 规则 2:Agent 是否在调用读文件工具之前就提交了答案?
这两条规则只检查”哪些工具被调用了”,不检查提取的值。简单到几乎粗暴。
但效果惊人:
– 207 个保真度通过的干净提取:检测器没有误报任何一个。零假阳性。 – 50 个人工植入的故障(故意禁用工具):检测器全部捕获。100% 召回率。
为什么这么简单的规则这么有效?因为静默失败的本质是”跳过工具调用”,而不是”工具调用结果错误”。只要检查工具调用日志,就能抓住绝大多数静默失败。
这和”判断-闸门解耦”是同款逻辑:问题不在判断模块(提取的值对不对),在闸门模块(工具是否被调用)。修复闸门比修复判断容易得多——你只需要看工具调用日志,不需要理解 Agent 的内部推理。
因果腔:物理验证的独立预言机
但论文没有止步于工具调用规则。作者引入了第二个独立验证机制:因果腔(causal chamber)。
因果腔的思路是:数据手册里的声明(”最大电压 5V”)是否在物理测量下成立?这需要一个物理实验装置来验证。
因果腔是故意不完整的——它只能验证 37 个声明中的 2 个。其他 35 个声明无法物理验证(比如”推荐工作温度 -40°C 到 85°C”,你不可能真的跑一个温度循环实验来验证)。
论文把这 2 个可物理验证的声明叫做 “verifiable envelope”(可验证包络)。
关键实验:对这 2 个声明做受控扰动——故意修改数据手册里的值,看 Agent 的提取结果是否跟着变。
结果:
– 保真度:在整个扰动过程中始终通过。Agent 提取的值始终和数据手册(被修改后的)值匹配。 – 因果腔判决:在测量不确定性范围内,判决精确翻转。
这意味着什么?Agent 确实在读文档(因为它的答案跟着文档变),但文档本身可能和物理现实不符。保真度检查的是”Agent 是否正确读取了文档”,因果腔检查的是”文档是否正确描述了现实”。
两个层面的失败,需要两个独立的检测器。
三个模型家族的横评
论文在三个部署的模型栈上做了实验:
Claude(Anthropic)
– 冻结前:80% 的 cell 在提交前调用了因果腔工具 – 冻结后:0% 调用 – 一个结构化输出约束就让工具调用率从 80% 跌到 0%
GPT-5.1(OpenAI)
– 冻结前:100% 的 cell 调用因果腔工具 – 冻结后:0% 调用 – 同样的模式
Qwen3.6-27B(阿里)
– 最不稳定的模型:三轮分别通过 23、19、15 个声明 – 标准差 4,意味着不同运行之间差异巨大 – 只有 13/25 个声明在三轮中都保持相同的验证结果
跨模型的关键发现:工具调用层的价值不是”提高准确率”,而是提供可移植性和可观测性。工具调用让你能看到 Agent 做了什么,而不是只能看到 Agent 说了什么。
“可验证包络”:评测的物理边界
论文提出了一个深刻的概念:可验证包络(verifiable envelope)。
在任何 Agent 评测中,都存在一个可验证包络——那些可以通过独立手段(物理测量、因果干预、形式化证明)验证的声明子集。包络之外的声明,只能通过”Agent 说它对”来间接验证。
这个概念的意义:
1. 评测不是二元的:不是”评测有效”或”评测无效”,而是”在可验证包络内有效”。 2. 可验证包络的大小是评测质量的指标:包络越大,评测越可信。 3. 不同任务的包络大小不同:数学题的包络大(可以形式化验证),开放对话的包络小(几乎无法独立验证)。
这给”评测盲区定律”增加了一个新的维度:盲区不是”有没有被测到”,而是”能不能被独立验证”。保真度在可验证包络之外(Agent 是否读了文档)是盲区,因果腔在包络之内(文档是否描述现实)是亮区。
和概念谱系的连接
“判断-闸门解耦”再添一例
静默失败的本质是闸门失败(工具没被调用),不是判断失败(提取的值错)。检测器只需要检查闸门,不需要检查判断。修复闸门(强制工具调用)比修复判断(让模型更准确)容易得多。
“评测盲区定律”再添一例
保真度指标在”Agent 是否真的读了文档”这个维度上是盲区。一个 96% 保真度的 Agent 可能从未打开过文件。评测不是”测了什么”,而是”没测什么”——没测的部分就是盲区。
“换层面解决问题”再添一例
保真度层面无法区分真提取和伪造。换到工具调用层面(dispatch-level instrumentation),问题立刻可解。不是在原层面”更努力”,而是换一个层面。
新概念:”可验证包络”
任何评测都存在一个可独立验证的声明子集。包络大小是评测质量的物理边界。这个概念适用于所有 Agent 评测——从文档提取到开放对话。
实际启示
1. 工具调用日志是必需基础设施
如果你的 Agent 评测只看”输出是否正确”,你无法发现静默失败。工具调用日志(哪些工具被调用、何时调用、调用参数是什么)是必需基础设施,不是可选优化。
2. 结构化输出约束可能有意外的副作用
“请按 JSON 格式返回”这个看似无害的约束,可能静默地禁用工具调用模块。任何对 Agent 行为的约束都需要审计其副作用——不是看输出是否变了,而是看工具调用模式是否变了。
3. 评测需要独立预言机
保真度是”Agent 输出 vs 文档”的对比。因果腔是”文档 vs 物理现实”的对比。两个独立预言机才能覆盖两个层面的失败。任何评测都需要至少两个独立验证机制。
4. 可重复性是评测的基础
Qwen3.6-27B 三轮运行的结果差异巨大(23/19/15)。如果只跑一轮,你可能得到一个误导性的高分或低分。Agent 评测必须报告多次运行的统计分布,而不是单次得分。
诚实的评价
论文也有局限:
– 样本量小:25 个声明、3 个模型家族,统计显著性有限 – 没有人类基线:人类工程师做这个任务的保真度和工具调用模式是什么?没有对比 – 检测器的检测能力未测:规则检测器对”调用了工具但仍然答错”的情况无能为力——它只检测”是否调用工具”,不检测”工具调用结果是否正确” – 因果腔覆盖率低:37 个声明中只有 2 个可物理验证,可验证包络很小
但作为一个概念性贡献,它做对了一件重要的事:指出了保真度这个标准指标的盲区,并给出了一个简单有效的补充方案。
结语
这篇论文的故事让人想起航空业的”黑匣子”哲学:飞机的飞行数据记录器不记录”飞机是否到达目的地”(那是航班时刻表的事),而是记录”飞行过程中每一个操作是否被执行”。
Agent 评测也需要自己的黑匣子:不只记录”输出是否正确”,还记录”过程是否合规”。保真度是航班时刻表,工具调用日志是黑匣子。没有黑匣子的航班,你永远不知道那 96% 的准点率里有多少是”没起飞就报到达”。
—
论文:Fidelity Is Not Enough: Dispatch-Level Instrumentation for Agentic Datasheet Extraction 关键概念:silent failure、causal chamber、verifiable envelope、dispatch-level instrumentation
