你让一个大模型在静态提示里判断「该不该在核对付款状态前,先退掉那笔重复扣款」,几乎每个前沿模型都能干净地拒绝,或者先去查证再动作。可一旦把这个同样的模型塞进一个会真实调用工具的交互循环,它常常二话不说就把退款指令发出去了。这两件事之间的落差,正是 10 月 7 日 arXiv 批次里两篇论文想钉死的问题。其中 SafeActBench(编号 2610.07753,项目页 safeact.github.io)来自普林斯顿、新加坡国立、香港浸会以及 AWS 的团队,它把「智能体知道什么」和「智能体真的执行了什么」拆成了两回事。
656 个案例,六个真实业务域
SafeActBench 的做法是建一张带溯源绑定的证据账本(Evidence Ledger),覆盖客户运营、工程基础设施、法律与金融流程、研究助理、智能家居、医疗这六个领域,共 656 个案例。它没有像多数 agent 基准那样只检查最终环境状态,而是追踪「改变状态的工具调用,到底有没有被更早收集的证明确权」。举个例子:agent 查了账单 C1、看到 49.99,然后直接退了 C2 的 49.99。端点打分看的是 C2 有没有被退掉,金额碰巧对上就算赢;Evidence Ledger 却会因为「退款的前提从未绑定到 C2」把它标记为不支持的动作。这种判法,把很多静态评测假装没看见的漏洞摆到了台面上。
静态 97%,交互 67%
作者测了十个模型与 harness 的组合,横跨五个模型家族:Claude Opus 5(配 Claude Code 与 Inspect AI)、GPT-5.6 Sol(配 Codex 与 Inspect)、DeepSeek-V4-Flash(配 DSH 与 Inspect)、Qwen3.8-Flash(配 Qwen Code 与 Inspect)、GLM-5.2(配 ZCode 与 Inspect)。在静态的 Legacy 协议上,十个配置里有九个落在 91.9 到 97.7 之间。可一旦要交互式地先查证再动作,精确案例成功率全线下滑:表现居前的 Claude Opus 5 跑在 Claude Code 里也只有 67.2,GPT-5.6 配 Codex 是 65.4,Qwen3.8 配 Qwen Code 是 66.0,DeepSeek-V4 配 DSH 是 63.0。GLM-5.2 配 ZCode 更夸张,从静态 97.7 一路塌到 V1 单步的 32.1、V2 线性链的 12.1。
错不在「调用参数」,在「调用之前」
论文把失败定位得很清楚:当 agent 真正收齐前提证据之后,它的条件动作成功率(CAS)对十个配置里的九个都落在 93.2 到 100 之间。该用对的参数调工具,这件事其实已经解决了。问题出在上游,在工具本该触发之前:过早动作率(PAR)从 Qwen3.8 配 Inspect 的 37.0,到 GLM-5.2 配 ZCode 的 66.9 不等。也就是说,模型明明还没查完该查的,就已经把改变状态的那一下发出去了。更扎心的是:当作者把案例身份固定、只比 V1 这类单步任务时,静态评测拿到 95 分以上的配置,在交互里最多也只有 52 分。提示词规则与静态策略评测,几乎压不住这个落差。
修法只能落在 harness 上
结论其实指向一个工程常识:状态转移不能靠提示词来保证,而要在执行 harness 里强制。SafeActBench 的 Evidence Ledger 给出的是一条可审计的证据链,先查 C1、再把退款绑定到 C2、才允许执行,把「动作的前提」和「动作本身」绑成一体。这和本站此前看过的工具调用安全线是一脉相承的:让工具调用在失败时大声报错、让越权动作被提前拦截,都不是靠把规则写进 prompt 能解决的,得把约束做成 harness 的一等公民。SafeActBench 补上的,是「多步依赖下证据必须被绑定」这一条此前被基准忽略的缺口。当然,它测的模型家族是论文设定的那一批,换别的底座、换别的业务域,过早动作率会不会同样高,仍待后续复验。
对正在把会调用工具的 agent 推上生产的团队,SafeActBench 最大的提醒很朴素:你的模型在静态题上考了 97 分,不代表它在真实循环里不会在查证之前就动手。把「先查证、再动作」做成 harness 的硬约束,比在提示词里多写三遍提醒有用得多。