今天的大模型安全系统,大体存在两条路线。
第一条,是在模型外面再挂一个安全模型(俗称“外挂方案”)。用户输入先经过 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。