拒绝与能力门禁。
"模型做不到那件事"几乎总是假的,而把安全建在这句话上,正是一套安全方案最终落得"换个说法就能拆掉的控制"的原因。拒绝是在生成时施加的一条策略,它压在一项依然完好的能力之上——这意味着拒绝率是一个已部署模型身上最易变的性质,它可以在版本号纹丝不动的情况下改变;而任何你真的需要握住的控制,都必须待在模型无法靠嘴皮子脱身的地方。
三种完全不同的东西,看上去都像"不行"。
当模型拒绝时,触发的是三种机制之一,而它们的可靠性属性截然不同。
- 能力的缺席。模型是真的做不到——这项本事从未被学到。这是唯一持久的一种,而对任何能用文字表达的事情来说,它都很罕见。一个读过公开互联网的模型,读过漏洞分析、合成路线和钓鱼模板。
- 后训练策略。模型做得到,只是被训练成会拒绝。你见到的几乎每一次拒绝,实际都是这一种。它是由后训练与对齐装上去的一种行为,底下那项能力仍然完好。
- 外部过滤器。输入或输出侧的一个独立分类器拦下了这次交互,措辞往往不一样。这一种可被检视、可被单独版本化,因而是三者中最诚实的一种——见护栏。
只有第一种是模型的性质。另外两种是配置,而配置是会变的。同一条提示词可以周一被拒、周四被答,且不会有任何公告,因为有人改了一句系统提示词,或者某个安全分类器的阈值挪了一挪。
给访问设门禁,不等于给能力设门禁。
厂商越来越常发布两个底层权重相同、拒绝策略不同的模型,并把宽松的那个放在身份核验和法律承诺书后面。有必要把"这到底买到了什么"说清楚,因为宣传和机制指向的是两个方向。
- 买到的是归因。已核验的身份、签过字的承诺书、监控,以及一个可被吊销的账户,让合规使用可追溯、让滥用可追责。这是一套真控制,也是对这件产品诚实的描述。
- 没买到遏制。能力在底座模型里。被拒的人可以换个说法、把任务拆成一串无害的步骤、多花几个回合,或者干脆换成一个压根没有拒绝层的开放权重模型。给宽松版本设一道门,拿掉的是一条捷径,不是一种可能。
- 破绽在回合预算上。当一家厂商报告说"只要给通用模型更多尝试次数,宽松模型的优势就会缩小",那就是直接证据:差的是顺从度,不是本事。拒绝要花回合;它不消耗能力。
落到实处就是:绝不让一个威胁模型立在"模型不会帮那种忙"这句话上。把"它帮了会怎样"写下来。
过度拒绝是一项成本,而几乎没人去量它。
拒绝调校有两个失败方向,产品团队却只给其中一个装了仪表。误顺从——本该拒绝却答了——会在红队演练里被抓住。误拒绝——把一个合法请求挡了回去——通常只会变成一张工单,如果它还能浮出水面的话。
- 损害是无声且累积的。一个拒绝回答药物相互作用的医疗智能体、一个拒绝解释它自己刚标出的那个漏洞的安全工具、一个拒绝谈拒付的客服智能体——每一次都在教育用户:这类问题在这里不值得问。
- 用户的下一步动作才是真正的成本。他们把同一个问题粘进一个没有日志、没有数据协议、没有留存策略的消费级聊天机器人。你并没有阻止这次交互,你只是把它挪到了你的可观测性之外。
- 它是可测的。构造一组贴着策略边界的、领域内的合法请求,像你在别处量准确率一样去量它的拒绝率。逐版本跟踪;当厂商改了某个没告诉你的东西时,这个数字会动。
一次会自我解释的拒绝,代价也更小。一个枚举化的原因加上一条指向"允许走的那条路"的指引,能把死胡同变成改道——这条论点在结构化拒绝与理由链里展开。
把你必须握住的控制放到别处去。
拒绝是一道好的第一层过滤,是一道糟糕的最后一层。它快、它不要钱、它拦得住老实人的失误——但它由那个正被要求突破它的部件自己来执行,而这恰恰是你最不希望出现在一项赖以为生的控制上的性质。
- 拦动作,不要拦句子。一个手上没有支付 API 凭据的智能体,无论被说服得多想付款,也付不出去。把工具与凭据的范围收窄;见智能体身份与权限。
- 把判断放到模型之外。一台按成文规则评估每一次工具调用的策略引擎,无论请求措辞多么惹人同情,给出的答案都一样——这正是面向智能体的策略即代码的用意。
- 假设拒绝会被拿掉。按"一个对什么都说好的模型"去设计爆炸半径,因为提示注入正是用来造出这样一个模型的技术。
对每一次模型变更——包括不是你发起的那些——都跑两套评测集:贴着你策略边界的合法请求,以及必须被拒绝的请求。如果任一数字动了而你的提示词没动,那就是厂商改了策略——请把它当作一次生产事故来处理,而不是当作一件趣闻。然后再确认一遍:每一项你不愿失去的控制,都是由"模型的意愿"之外的东西来执行的。
相关:智能体评估是这一切所嵌入的测试台,生产中的护栏是执行层,而第三方模型与厂商风险讲的是如何把一项会在你脚下变化的依赖写进文档。