决策模型正在成为 Agent 栈里最热门的新组件:给一段文本、一组选项,返回每个选项的校准概率,不生成任何文字,快、便宜、可靠。把这样的模型放在 Agent 系统的关口上——读一眼模型想调用的工具、想发出的消息,决定放行还是拦截——听起来是天作之合。本周微软刚发布 Decision-1,官方博客里「agent controls」「safety screening」赫然列在头两个用例里。而就在同一个星期,南加州大学 Massoud Pedram 组的论文《One Word Opens the Gate: The Option-Channel Attack on Typed Decision Models as Agent Guardrails》把这条路线的地基敲了一遍:听起来很美,但它作为最终决策者的位置,站不住。
一、被测的承诺与被测的现实
先明确被攻击的对象。typed decision model 读入一段文本,对调用方给定的选项集合输出概率分布,每个选项附带一段简短的书面定义。这类模型近期被大量安置为 Agent 护栏:读取待执行的工具调用或 incoming 消息,决定是否允许。
USC 团队评测了七个开源权重模型在这个角色下的表现,并坚持把两类错误分开报告:fail-open 是放行了被禁止的动作,属于漏洞;fail-closed 是拦下了被允许的动作,只是成本。这个区分本身就是论文的第一份贡献——很多评测把两者混在一个准确率里,而安全上它们根本不是一种东西。
数字并不好看。在提示注入、越狱与毒性内容三类筛查上,模型在「允许还是拦截」这一步的准确率介于 36% 到 72% 之间,随机水平是 50%。更微妙的是方向性:低错误率往往只反映模型默认倒向哪一边——七个模型里,一个几乎全部放行,另一个几乎全部拦截。它们不是学会了判定,只是各自选了一个懒惰的默认值。
二、攻击本身:六行日志与一个名字
论文的核心实验设计得非常克制,克制到让人后背发凉。
第一个实验:往判定文本里混入六行服务器日志内容——就是那种任何生产系统里都常见的技术输出,不含任何与策略有关的信息——在一个模型原本能完全正确判定的策略上,护栏的 fail-open 率从 0% 升到 63%。攻击者没有构造精巧的注入语句,只是让输入「看起来像」模型在预训练里见过的一百万次日志场景。
第二个实验更简单:选项列表里那个代表「允许」的选项,名字被起得有误导性——定义原文一个字不动,待判定文本一个字不动,只动了名字。在四个会把选项标签放进输入的模型上,fail-open 率升到 93% 到 100%。标题里的「一个词就能开门」说的就是这里:选项名称这个看起来最无害的字段,是攻击者可以直接或间接染指的通道。
三、为什么所有防御都失效
论文没有停留在攻击,而是把防御清单逐一过了一遍,结论是全灭:
- 针对机制加固的防御,被理解其机制的攻击者破解;
- 依赖输入清洗的防御,被攻击者可控文本绕过;
- 置信度升级(把最没把握的决策转人工)——这是工程上最常见的兜底设计——被一个反直觉的观察击穿:被攻击翻转的决策,置信度与未被攻击的决策一样高。攻击不仅改了答案,还顺手伪造了确定感。升级筛选器完全看不见它。
唯一一条部分有效的路线是:把每个策略字段解析成类型化数值,不再让模型读自由文本。这确实消除了其中一种攻击。但论文随后补了致命一刀:当策略字段全部结构化之后,一个确定性的规则引擎在这些策略上能达到 100% 准确率——模型变得没有必要了。要么留着模型并接受它会被攻破,要么删掉模型换成规则。这是一个两难,而不是权衡。
四、发布周的双重奏
这篇论文的时效性因为一个巧合而加倍:它 10 月 8 日提交,微软 10 月 9 日发布 Decision-1,定价每百万输入 token 0.042 美元、输出免费,官方列出的头两个用例正是「Agent 控制:评估 Agent 提议的下一步,决定继续、停止、重试还是转交」和「安全筛查:按风险分类请求、输出与提议动作,决定放行、拦截或升级」。微软在稳健性上做了认真工作——八类扰动下平均只有 1.3% 的决策翻转,选项重排和改写零翻转——但扰动测试测的是「等价输入产生等价输出」,而 option-channel 攻击打的恰恰是非等价输入:名字被换成了有误导性的那个,日志被塞进了上下文。这两件事不在同一个威胁模型里。
这不是说 Decision-1 或整个决策模型品类没有价值——Xbox Research 用它处理一万多条反馈分类,比 GPT-6 Sol 快十四倍、便宜两百倍,分流场景的经济学是真实存在的。论文的结论也刻意留了余地:这些模型「可以减少到达评审者的案件数量,但基于这些证据,它们不应该是做出决定的组件」。翻译成工程语言:决策模型是好的分流器,是危险的闸门。
五、给开发者的行动清单
如果你的 Agent 栈里已经有一个「判断类小模型」在关口上,这篇论文给你四个可执行的动作:
- 审查选项侧的输入来源。选项名称和定义是系统侧输入,但问一句:它们有没有可能被用户数据、模型输出或外部内容间接影响?只要有可能,你就处在论文描述的攻击面里。
- 把拦截逻辑从模型手里拿回来。能用确定性规则表达的策略(路径白名单、域名白名单、金额上限),用规则表达,模型只处理规则的灰色地带。
- 别迷信置信度。被攻击的决策和正常决策一样自信,置信度阈值防不住对抗输入,只能防分布漂移。
- 分离「筛」与「判」。让决策模型把 95% 的明显案例快速分走,剩下 5% 交给规则引擎加人工。它省的是人力,不是安全边界。
论文代码已开源(GitHub 上的 option-channel-attack 仓库),七个模型、全部攻击脚本和六条策略都能复现。在「决策模型元年」的喧嚣里,这是一篇把冷静塞回讨论的必要之作——安全组件的选型,永远应该先看攻击面的论文,再看跑分的博客。