今天的大模型安全系统,大体存在两条路线。

第一条,是在模型外面再挂一个安全模型(俗称“外挂方案”)。用户输入先经过 Guardrail 检测,确认没有风险后再交给大模型生成;模型输出之后,还可以再过一遍输出审核。这种方案最大的优势是独立:主模型可以继续迭代,安全策略也可以独立更新。

另一条路线,则是直接把安全能力训练进大模型本身(大模型对齐)。通过 SFT、RLHF、DPO 等方法,让模型自己学会拒绝危险请求。这样推理时不需要额外运行一个安全模型,系统也更加简单。

但这两条路线都有明显代价。

外挂 Guardrail 很灵活,却意味着一次请求可能需要运行两个甚至三个模型。

安全对齐虽然推理成本低,却把“能力”和“安全”绑在了同一套参数里。为了提高安全性进行一次新的对齐训练,有可能同时损伤模型原本正常的回答能力。

Apple 在论文《Disentangled Safety Adapters》中提出的 DSA,试图寻找第三条路线:

安全能力既不完全放在模型外面,也不直接写死进基础模型参数,而是作为一个独立的“安全协处理器”,挂接在大模型已经计算好的内部表示之上。

https://arxiv.org/pdf/2506.00166

如果这条路线成立,那么未来的大模型安全系统可能不再是“模型 + 外挂审核”,而会逐渐演变成一套真正运行在模型内部推理链路中的 Safety Runtime。

今天的大模型安全,其实被卡在两种架构之间

先来看最常见的外挂护栏。

一个典型的大模型安全链路可能是:

用户请求 → 输入安全模型 → 大模型 → 输出安全模型 → 用户

Llama Guard、ShieldGemma、WildGuard 等都属于这一类思路。

这种模式非常符合传统安全工程的习惯:安全能力作为一个独立组件存在,业务模型不需要知道安全系统具体在做什么。

它的优势也非常现实。

比如今天发现一种新的越狱方法,只需要重新训练或者更新 Guardrail;不同国家、不同客户、不同产品,也可以部署不同的安全策略,而不必修改主模型。

但问题在于,这种架构的计算存在大量重复。

假设主模型已经把用户输入完整地跑过几十层 Transformer,对其中的语义、上下文、意图和对象关系都完成了一次理解。此时 Guardrail 又从原始文本开始,再跑一个完整模型,只为了判断一句“安全”或者“不安全”。

从计算角度看,相当于:

主模型已经把题做完了,安全模型又把整道题重新做了一遍。

对于几十亿甚至上百亿参数的大模型而言,这并不是一个便宜的操作。

安全对齐的另一面,是 Alignment Tax

既然外挂 Guardrail 太贵,为什么不直接把安全能力训练进大模型?

今天绝大多数模型确实已经这么做了。

模型经过安全 SFT、RLHF 或 DPO 之后,会主动拒绝制作武器、网络攻击、极端主义、诈骗等高风险请求。

这样做最大的优势是推理简单。

用户输入进来之后,模型自身就知道哪些内容应该拒绝。

但问题也随之出现:模型到底是在“理解风险”,还是只是被训练得更加保守?

现实中,大量安全对齐都会面临一个经典问题——Alignment Tax,也就是所谓的“对齐税”。

例如:

“恶意软件是如何工作的?”

“历史上炸药技术经历过哪些发展阶段?”

“如果我要研究网络攻击防御,常见的攻击链是什么?”

这些问题未必有害,但随着安全策略越来越严格,模型可能逐渐倾向于拒绝。

原因很简单:能力和安全已经写进了同一套权重。

每强化一次安全边界,实际上都在重新改变整个模型的行为分布。

因此安全工程中一直存在一个难题:

能不能只在真正危险的时候开启强安全策略,而在正常任务里尽量保留基础模型原本的能力?

DSA 的核心,就是从这个问题出发。

DSA 的关键想法:不要让安全模型重新理解一遍世界

DSA,全称是 Disentangled Safety Adapter,可以翻译成“解耦安全适配器”。

它最核心的观察其实很简单:

一个大模型在生成答案之前,已经产生了大量中间隐藏状态,也就是 hidden states。

用户输入进入模型之后,会依次经过:

第 1 层 Transformer

第 2 层 Transformer

第 3 层 Transformer……

越往后,这些 hidden states 中包含的已经不再只是简单的词语信息,而是越来越丰富的高级语义表示,例如:

用户到底想干什么、对象是谁、上下文是什么、不同句子之间是什么关系、信息之间是否存在矛盾等。

换句话说:

大模型其实已经替安全系统完成了最昂贵的“理解”工作。

传统 Guardrail 的问题在于,它完全看不到这些结果,只能重新从原始 Token 再算一遍。

而 DSA 选择了另一条路。

它直接读取主模型已经产生的 hidden states,然后利用一个非常小的旁路网络完成安全判断。

可以把它理解成:

基础模型负责“理解世界”,DSA 负责“从理解结果里判断风险”。

因此,DSA 不再需要重新运行一个完整的第二模型。

为什么我更愿意把 DSA 称为“安全协处理器”

如果把传统 Guardrail 类比成计算机系统,那么它更像第二台计算机。

第一台机器负责生成,第二台机器拿到相同的数据之后,再重新执行一次分析。

Safety Alignment 则像把安全逻辑直接烧进 CPU 本身。

它效率很高,但要修改安全逻辑,就意味着要修改核心计算路径。

DSA 更像第三种形态:

在主处理器旁边增加一个 Security Coprocessor。

主模型完成正常推理,同时把自己已经计算好的内部状态提供给安全协处理器;安全协处理器不需要重新理解输入,只需要完成风险判断或者行为修正。

这种设计同时获得了三个非常重要的性质:

第一,共享计算。大部分语义理解计算直接复用主模型。

第二,参数隔离。Base Model 可以完全冻结,安全模块单独训练。

第三,安全能力可替换。不同安全任务可以挂不同的 Adapter。

这也是论文标题中“Disentangled”真正想表达的含义。

所谓解耦,不是说安全系统和主模型完全无关,而是:

它们共享推理表征,但不共享安全参数。

一个不到主模型 1% 计算量的安全模块,为什么能接近完整大模型?

论文中测试了多种 DSA 结构。

最简单的是线性 Probe,直接在 hidden states 上做一个逻辑回归分类器。

再复杂一点,则加入小型残差网络。

而效果最好的分类架构之一,是 Ladder Side Tuning,也就是 LST。

它可以理解为:

在一个 7B 大模型旁边,再挂一个非常小的 Transformer。

但这个小 Transformer 并不是自己从原始 Token 开始理解文本,而是在每一层不断读取主模型已经形成的高级表示。

这带来了一个很有意思的结果。

在 ToxiGen、AEGIS、BeaverTails 等安全分类任务上,轻量 DSA 已经能够接近甚至超过完整的 7B Guardrail。

更值得注意的是 SummEdits 这类事实一致性检测任务。

独立的 25M 小模型效果明显较差,而读取 7B 模型内部表示的 DSA,却可以做到接近完整 7B 模型的效果。

原因其实很好理解。

判断一句话有没有毒性,很多时候依赖表面语义,小模型也能完成。

但判断:

“这段摘要和原始文章中的事实是否一致?”

则需要更强的上下文理解、实体关系和事实推理能力。

独立小模型只能依靠自己的 25M 参数理解这些内容。

而 DSA 虽然自身很小,却站在一个 7B 模型已经完成的语义理解之上。

所以它出现了一种非常特殊的现象:

安全模块本身只有几十 M 参数,但它使用的“认知能力”却来自 7B 主模型。

这可能比“模型压缩”更准确地解释 DSA 的价值。

真正改变安全架构的,并不是分类,而是动态 Alignment

如果 DSA 只是一个更便宜的安全分类器,那么它最多只是 Guardrail 的一次工程优化。

这篇论文真正更有意思的地方,在后半部分。

作者进一步提出:

既然 DSA 已经能够读取 Base Model 的内部表示,那么它能不能不仅判断风险,还直接改变模型的生成结果?

于是 DSA 从 Safety Classifier,继续走向了 Safety Alignment Adapter。

基础模型原本会产生一组 next-token logits,也就是下一个 Token 的概率分布。

安全 Adapter 则可以产生另一组偏向安全行为的 logits。

最终模型输出不再只由基础模型决定,而可以把两者混合:

Base Logits × λ+Safety Logits × (1-λ)

这里出现了一个非常关键的变量:

λ。

它可以被理解为一个“安全强度旋钮”。

当 λ = 1 时,模型完全按照 Base Model 原本的行为生成。

当 λ 降低时,Safety Adapter 的影响逐渐增强。

这意味着安全强度第一次可以从“训练时固定的模型属性”,变成:

推理时可以动态调节的运行参数。

“安全是否开启”,第一次可以由风险本身决定

有了安全分类器和安全 Alignment Adapter 之后,作者进一步把两者组合起来。

整个流程变成:

用户请求 → DSA 风险判断 → 动态决定 λ → 决定是否开启安全对齐
  • 对于正常请求:DSA 判断为 Safe,λ = 1。模型直接沿用 Base Model 的能力。

  • 对于高风险请求:DSA 判断为 Unsafe,λ 降低。Safety Adapter 开始介入生成。

作者把这种机制称为 Targeted Alignment。

这一步非常重要,因为它改变了安全对齐的基本逻辑。

传统安全模型是:

所有请求都经过 Safety Alignment。

而 Targeted Alignment 则是:

只有真正需要安全干预的时候,才开启 Alignment。

这也解释了为什么它能够降低 Alignment Tax。

过去安全能力像一个永远打开的滤镜,无论模型回答数学题、代码问题还是危险内容,都要经过同一套安全偏置。

DSA 则尝试把它变成按需开启的保护机制。

这比传统 Logit Mixing 更重要的地方,是它不需要跑两个完整模型

其实“混合两个模型的 logits”并不是第一次出现。

过去已经有人尝试同时运行一个未对齐模型和一个安全模型,然后把两者输出概率进行插值。

问题在于:Base Model 要跑一次,Safety Model 还要再跑一次,计算量几乎翻倍。

DSA 则只运行一遍 Base Model。

Safety Adapter 直接复用它的 hidden states,再额外运行一个很小的旁路网络。

因此论文中的轻量方案只引入很小的 FLOPs 开销;即使是更强的 Last-Layers Duplicate 方案,也只是复制最后少数几层,而不是重新运行整个模型。

从系统架构角度看,这才是 DSA 真正有吸引力的地方:

它不是在“安全能力”和“性能”之间简单取舍,而是在重新设计二者共享计算的方式。

为什么作者最后甚至直接复制了主模型最后几层?

但这里也有一个非常现实的问题。

安全分类很容易。

只需要输出:

Safe / Unsafe。

而生成一个高质量回答,则完全是另一件事。

作者一开始直接让很小的 LST Adapter 参与生成,结果发现它虽然可能显得“非常安全”,但很多时候只是因为它已经失去了正常回答能力。

这其实也是安全评测中非常常见的一个陷阱:

一个什么问题都拒绝的模型,在很多安全 benchmark 上都可以获得极高分数。

但这并不代表它真的更安全,只说明它更没用。

因此作者后来设计了 LST+,让 Adapter 更多学习对 Base Logits 的修正,而不是重新学习整个语言生成过程。

再往后,作者干脆提出 LLD,也就是 Last-Layers Duplicate。

它不再构建一个极度缩小的小网络,而是直接复制基础模型最后几层 Transformer。

前面绝大多数层完全共享,只在最后阶段分叉:

一条路径继续产生 Base Model 输出。

另一条路径通过经过安全训练的最后几层,产生 Safety Logits。

这实际上是一个非常工程化的折中:

前面昂贵的“理解”部分全部共享,最后少数负责“决定怎么说”的层进行安全分叉。

从 Guardrail 到 Safety Runtime

真正重要的是 Detect → Decide → Steer

如果把 DSA 的几个组件连起来,它实际上已经不再只是一个 Guardrail。

它形成了完整的三层结构:

第一层,Detect。判断当前输入或者输出有什么风险。

第二层,Decide。根据风险类别和置信度决定安全策略。

第三层,Steer。通过安全 Adapter 直接改变模型的生成行为。

也就是:

Detect → Decide → Steer。

传统 Guardrail 通常只完成第一步:

“这句话有风险。”

至于后面到底拒答、降权、改写、限制工具调用还是继续回答,往往需要外部业务系统决定。

DSA 则开始尝试把风险判断与模型行为控制放进同一个推理 Runtime 中。

所以如果只把 DSA 看成“一个参数更小的安全模型”,其实低估了这项工作的意义。

它更像是在探索一种:

Model-Native Safety Runtime。

未来甚至可能不是一个 Safety Adapter,而是一组安全模块

沿着 DSA 的架构继续往前走,很容易看到另一个方向。

未来一个模型旁边可能同时挂着:

越狱检测 Adapter、暴力风险 Adapter、隐私检测 Adapter、事实一致性 Adapter、网络安全 Adapter、版权风险 Adapter……

不同 Adapter 都读取同一个 Base Model 的内部表示。

随后,一个 Policy Router 根据风险结果决定如何干预模型。

例如:

正常请求:Base 100%。

轻度风险:Base 80%,Safety 20%。

中度风险:Base 50%,Safety 50%。

高风险:Safety 完全接管。

甚至不同风险类别可以加载不同的安全 Adapter。

这时安全系统已经很像操作系统中的权限管理和策略执行层,而不是传统意义上的内容审核模型。

基础模型负责提供通用智能,Safety Runtime 则决定这些智能在不同风险场景下应该如何释放。

这可能才是 DSA 最值得关注的长期方向。

共享表征也可能成为 DSA 最大的安全隐患

DSA 的优势来自哪里?

来自 Base Model 和 Safety Adapter 共享同一套内部表示。

但这件事情也有另一面。

传统独立 Guardrail 和生成模型是两个不同模型。

即使攻击者成功欺骗了生成模型,也未必同时能够欺骗 Guardrail。

两个模型之间多少存在一定的模型多样性。

而 DSA 则不同。

生成模型和安全模块都依赖同一套 hidden states。

那么理论上存在一种“共同失效”风险:

攻击者构造一个输入,让 Base Model 从一开始就形成错误或者被操纵的内部表示。

随后:

生成模块读取这套表示,做出危险行为。

安全 Adapter 也读取同一套表示,却同样没有识别出风险。

也就是说:

DSA 用共享表示换来了效率,但共享表示也可能带来 correlated failure。

这类面向 DSA 本身的自适应对抗攻击,目前论文并没有系统研究。

我认为这反而是未来非常值得继续验证的问题。

Targeted Alignment 还有一个很明显的单点故障

Targeted Alignment 的前提是:

安全分类器必须先判断这个请求是否危险。

如果分类器判断正确,那么系统能够自动开启 Safety Adapter。

但如果出现 False Negative 呢?

一个真正危险的请求被判断成 Safe:

Unsafe Prompt → Classifier 误判 Safe → λ = 1 → Safety Adapter 不启动

结果就是:

整个安全机制被直接旁路。

因此未来更加合理的设计,很可能不是简单的:

Safe / Unsafe。

而是输出连续风险分数。

例如:

风险 10%,基本保留 Base Model。

风险 40%,轻度增加安全控制。

风险 70%,明显加强 Safety Adapter。

风险 95%,进入强干预甚至完全拒答。

这时 λ 就不再是一个简单开关,而会变成真正的风险控制变量:

λ = f(风险、类别、置信度、上下文)。

这也是 DSA 从论文原型走向生产系统必须补上的一层。

它并不能完全替代今天的独立 Guardrail

从产品角度看,DSA 也有非常明确的边界。

首先,它必须能够读取基础模型的内部 hidden states。

这意味着它更适合:

自研模型、私有化部署模型、端侧模型,以及能够修改推理 Runtime 的 vLLM、SGLang 等场景。

如果使用的只是一个完全黑盒的 API,大多数情况下根本拿不到模型内部表示,DSA 也就无从挂接。

其次,DSA 虽然参数和 Base Model 解耦,但它并不是“模型无关”的。

一个为 Qwen 训练出来的 DSA,无法简单搬到 Llama 上继续使用。

甚至基础模型升级了版本,内部表示分布发生变化,也可能需要重新验证甚至重新训练 Adapter。

所以 DSA 实现的是:

参数解耦。

而不是:

模型解耦。

传统独立 Guardrail 在跨模型复用方面,依然具有自己的优势。

FLOPs 很低,也不代表线上延迟一定同样低

论文中 DSA 的理论计算开销非常漂亮。

部分方案增加的 FLOPs 不到 1%。

但真实 wall-clock latency 的提升会明显高于 FLOPs。

原因并不复杂。

GPU 推理性能从来不只由 FLOPs 决定。

额外旁路网络意味着新的 Kernel Launch、Memory Access、同步、Hidden State 读取、Cross Attention,以及可能改变 Continuous Batching 调度方式。

尤其到了线上高并发推理环境,还会牵涉:

KV Cache、Tensor Parallel、Paged Attention、Speculative Decoding 等整个推理栈。

因此“理论计算量增加不到 1%”,并不能直接翻译成:

“线上成本只增加不到 1%”。

DSA 真正进入生产环境之后,Runtime 层面的优化很可能比 Adapter 本身还要复杂。

一种新的安全分层方式

过去几年,大模型安全架构大体形成了两个世界。

一个世界是模型安全团队:

研究 Alignment、RLHF、DPO,让模型本身变得更安全。

另一个世界是产品安全团队:

研究 Guardrail、内容审核、风险分类,在模型外部建立安全防线。

DSA 提出的其实是第三种可能:

让两者在模型 Runtime 里汇合。

基础模型继续负责通用智能。

Safety Adapter 独立负责安全能力。

Risk Classifier 决定当前请求需要多强的安全约束。

Runtime 根据风险动态调整模型行为。

这样一来,“安全”就不再只是一个训练阶段,也不只是模型前后的一层过滤。

它会逐渐变成模型推理过程中的一种实时控制能力。

从外挂护栏到安全协处理器

如果把今天的大模型安全架构画成一条演化路径,大概会是:

第一阶段:模型外审核,Guardrail 在模型前后检查内容。

第二阶段:模型内对齐,安全能力直接写入大模型参数。

第三阶段:安全协处理器,基础模型负责产生通用语义表示,独立安全模块共享这些表示,并根据实时风险决定是否干预生成。

DSA 仍然只是这一方向的早期尝试。

它还没有解决 Adaptive Attack、多轮攻击、长上下文、Streaming Moderation、工具调用安全、Agent Runtime 等大量现实问题。

但它提出了一个非常值得继续追踪的架构问题:

未来的大模型安全,真的还需要在主模型旁边再运行一个完整的安全模型吗?

也许答案并不是“更小的 Guardrail”。

而是把安全能力进一步推入模型 Runtime,让安全系统真正成为模型的一部分,却又不必和基础模型永久绑定。

从这个角度看,DSA 最值得关注的并不是 Adapter 本身,而是它正在尝试重新划定一条边界:

模型负责理解世界,安全系统负责决定这种能力应该在什么场景、以多大的强度被释放。

如果这个方向最终成立,那么未来我们看到的大模型安全架构,可能不再是:

LLM + Guardrail。

而会变成:

LLM + Safety Runtime。

这也许才是“从外挂护栏到安全协处理器”真正意味着的变化。

声明:本文来自模安局,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。