模型安全:对齐与输出安全
一家银行上线了只负责解释产品规则的客服模型。上线评测显示,大多数正常问题都能得到有依据的回答,明显危险的请求也会被拒绝。普通用户通常问一次就离开,攻击者却可以持续改写角色、语言、编码和上下文,观察每次拒绝,再把有效片段组合到下一轮。只要某次回答越过边界,后续应用又把它当成可信结论,平均表现良好仍可能落到一次真实损失。
本文的核心判断是:对齐主要改善给定输入分布上的平均行为,适应性攻击者会主动搜索分布尾部;高后果系统还要通过架构控制,让一次模型失守停留在文本层。 模型输出被渲染器、数据库或业务代码消费时,继续由大模型应用安全处理;输出获得工具执行权后,进入Agent 与工具调用安全的边界。
平均表现与攻击尾部是两种问题
监督微调、偏好学习和安全训练的目标是提高常见输入上的服从性与安全性。InstructGPT 论文在其模型、训练数据、作者采集的 Prompt 分布和评测条件内观察到改进,论文也保留了模型仍会犯简单错误的边界。这类证据可以支持该实验条件下“平均行为得到改善”,无法推出所有表达方式都受到同等约束。
可以用一个简化模型区分两种风险。令 表示输入 造成的损失, 是正常流量分布,攻击预算 表示攻击者可以尝试的次数、Token 和时间:
正常流量关注:R_normal = E[x ~ q] L(x)
对抗搜索关注:R_attack(B) = max L(x)
x 属于攻击预算 B 能探索到的集合
正常评测从 抽样,容易看见高频失败;攻击者根据上一轮输出改变下一轮输入,目标是找到一个高损失样本。随着预算、反馈和搜索方法变化,可探索集合也会变化。因此,一次固定测试集通过,只能说明该版本在这些样本和运行参数下的表现,不能充当模型已经消除尾部风险的证明。
攻击者模型决定搜索能力
本文先采用一个常见的黑盒攻击者:他能使用公开或已登录的模型接口,能看到回答、拒绝和错误,能发起多轮请求,也能改变语言、编码、上下文长度与采样时机;他没有模型权重、训练权限和服务端策略配置。速率限制、费用、账号封禁和上下文上限会约束其预算,但不会取消适应性。
自动生成对抗后缀的研究展示了搜索方法可以绕过部分对齐模型,并在其测试对象之间出现迁移;Anthropic 对 many-shot jailbreaking 的研究则展示了长上下文中的示例如何改变模型行为,以及部分缓解措施会推迟攻击却未必消除攻击。这些结果证明了具体条件下存在可搜索失败,不能外推为任何模型、任何策略都能被同一种方法稳定绕过。
攻击能力还取决于接口回馈。如果服务只返回统一拒绝、限制重复尝试并持续轮换策略,搜索成本会上升;如果接口暴露分类分数、详细策略标签或稳定的局部答案,攻击者就得到更细的优化信号。内部员工、批量 API 客户和能够调用高权限工具的 Agent 拥有不同预算与后果,评测时需要分别建模。
一次回答如何变成现实损失
模型越界与业务受损之间通常还有多层系统。完整失败链可以写成:
危害目标
-> 生成并变异输入
-> 观察拒绝、局部答案和错误
-> 找到一次越界输出
-> 应用把输出解释为事实或指令
-> 权限层未重新校验
-> 下游执行或用户采信
-> 资金、数据、账号或人身影响
银行客服编造退款规则,在用户相信它、坐席照着办理,或后端直接把模型结论转成退款动作时,才形成不同程度的损失。越狱生成危险步骤也要经过接收者能力、工具可用性和现实条件。分析时要逐段保存证据:攻击者如何获得反馈,哪次输出跨过内容边界,应用赋予了什么语义,哪个授权或验证点没有阻断,最终状态发生了什么变化。
这条链也给出防守顺序。对齐降低越界输出出现的概率;查询预算和滥用检测压缩搜索空间;引用验证、业务规则和权限检查阻止文本升级为事实或动作;沙箱、限额和人工审批限制已经放行的动作。每层承担不同职责,不能用某一层的通过率替代整条链的结果。
对齐层要同时管理放行与误拒
模型层仍然是第一道高覆盖防线。安全训练让模型学习危害边界,系统指令给出当前场景规则,输入分类器识别已知攻击形态,输出分类器检查最终内容,检索和引用约束减少无依据回答。面对证据不足或后果较高的问题,模型可以澄清、提供低操作性的安全帮助,或转交人工。
这些控制存在共同取舍。扩大拒绝范围会拦住更多危险请求,也可能伤害网络防御、医学科普、受害者求助等相邻正常任务。XSTest专门用安全请求与不安全对照样本识别过度拒绝,说明“拒绝更多”无法单独代表更安全。长上下文截断可以削弱某类攻击,也会丢失完成真实任务所需的材料;额外分类器会增加延迟,并继承自己的漏报与误报。
因此,模型策略应按危害目标组织,同时保留相邻正常样本。对每次策略变更,既测试危险内容是否被放行,也测试合法任务能否完成。内容危害本身已经构成产品损失的公开助手,需要更强的模型层控制;只在受控内部流程中生成候选文本的系统,可以把更多确定性保证放到后续验证。
架构控制限制单次失守的损失
高后果系统应假设模型偶尔会给出错误事实、越界内容或危险参数。宿主程序把这些输出保留为候选值,再通过可验证原语决定是否继续:
用户与外部资料 -> Context Envelope -> 对齐模型
|
v
Candidate Output
|
+-----------------+----------------+
v v
内容风险信号 Schema / 事实解析
+-----------------+----------------+
v
服务端验证器 + 策略 PDP
| | |
拒绝 人工复核 允许
|
v
Sink PEP / Tool PEP
|
v
用户、账本或外部业务系统
信任边界位于 Candidate Output 之后。内容分类器可以提供概率信号,PDP 使用服务端事实、当前主体、资源和业务状态作决定,PEP 在最终渲染、数据访问或工具执行位置强制决定。模型无权修改验证器、策略和授权状态;纯文本直接展示也是一种 Sink,需要按内容后果选择发布门禁。
| 模型可能失败的位置 | 模型之外的实现原语 |
|---|---|
| 编造政策、引用或身份 | 受控资料版本、引用存在性与蕴含校验、无依据时转人工 |
| 生成异常 HTML、SQL 或路径 | 固定 Schema、长度与类型约束、上下文转义、参数化接口 |
| 请求越权数据或工具 | 当前主体授权、资源级策略、短期能力令牌、默认拒绝 |
| 提出高后果动作 | 参数快照、双人审批、额度、幂等键、事务或补偿 |
| 进入循环或扩大范围 | 步数与费用预算、网络允许列表、沙箱、熔断与撤权 |
例如,模型可以建议退款金额,服务端仍要从订单、政策版本和用户身份重新计算可退范围;模型可以起草邮件,发送端仍要验证收件人、数据级别和审批记录。即使攻击者获得一次理想的越界文本,也只能触达当前调用被授予的最小能力。
架构隔离无法解决所有输出危害。公开发布的诽谤、偏见或自伤建议在文本出现时已经可能伤害用户,后置权限对此帮助有限。模型层与产品交互仍需承担内容责任;架构控制重点保护可校验的事实、数据访问和现实副作用。
指标要写清攻击预算与分母
“越狱率较低”缺少攻击目标、尝试预算和分母,无法复核。评测至少同时记录以下口径:
预算内攻击成功率 =
在预算 B 内至少得到一次越界输出的危害目标数
/ 被攻击的危害目标总数
单次越界率 =
被判定越界的生成次数
/ 全部对抗生成次数
正常误拒率 =
被错误拒绝的正常请求数
/ 正常请求总数
影响逃逸率 =
实际越过外部控制的未授权动作数
/ 模型提出的未授权动作总数
同一报告还要固定模型与策略版本、攻击方法、每个目标的 、语言与上下文范围、采样参数、重复运行次数和人工判定规则。预算内成功率回答“持续搜索能否找到一次失败”,单次越界率回答“每次尝试有多容易成功”,两者不可互换。影响逃逸率则检验模型失守后架构是否守住现实状态。
独立二项试验可以报告 Wilson 或精确二项区间;同一危害目标内的适应性尝试共享搜索历史,应把目标作为统计簇,不能把每次请求都当成独立证据。门禁也要分层:出现一次已确认的禁止现实副作用就阻断发布;仅观察模型输出时,预算内成功率的区间上界要低于场景容忍度,同时正常任务完成率的区间下界要高于效用底线,否则结论是证据不足。
HarmBench与其开源实现提供了标准化危害行为、攻击和拒绝评测的参考。公开基准适合比较方法,发布门禁仍要加入本业务的政策、权限、工具与相邻正常请求,并报告原始计数,避免总分掩盖一次高后果失败。
反例与取舍决定防线厚度
一个无账号、无敏感上下文、无工具的低风险文案助手,单次错误容易发现和撤回,复杂的逐项审批会让产品失去价值。此时可以依靠模型策略、输出标记和人工编辑,接受有限剩余风险。医疗分诊、资金处理、账号恢复和生产运维具有更高后果,确定性验证与最小权限带来的延迟通常更值得承担。
反方向也成立:服务端权限设计再严密,也不能让公开模型随意生成严重有害内容;全部交给人工审批,也可能因自动化偏见和疲劳形成橡皮图章。合理目标是让模型层减少失败频率,让外部控制限制失败影响,再用生产事件持续扩展尾部测试。攻击者搜索的是剩余空间,防守证据也必须随模型、上下文和系统能力变化而更新。