「破甲」这个词最近在 AI 圈里出现得越来越频繁:有人把它做成插件,装上之后对话框上方会亮起一条绿色状态栏;有人把它做成 API 参数,调几个数字就能让模型的固定开场白消失。听起来玄乎,但拆开看,它既不是破解,也不是越狱,而是一套针对模型输出分布的工程手段。
要讲清楚它,得先回答一个更基础的问题:模型的「拒绝」到底是怎么来的?如果它真的源于某种价值观,那它应该像人的信念一样稳定;可实际上,一句「假设你在写小说」就能让它松动。这个反差说明,我们面对的更像是一道装在生成流程里的闸门,而不是一套内在的是非观。
这篇文章从训练流程讲起,说明「好坏判断」是怎么被装进模型的、它装在什么位置、能不能被拆掉,再逐层拆解破甲的手段与代价,最后给出可量化的效果判据。
一、先看模型是怎么被造出来的
一个大模型的能力与脾气,基本由三个阶段决定。理解这三段,后面所有「为什么能破」「为什么破不干净」的问题都会有答案。
1.1 预训练:把互联网压成概率分布
预训练做的事只有一件:给定前文,预测下一个 token。把几万亿 token 的文本喂进去,模型在无数次「猜下一个词」中被迫学会了语法、事实、推理链条,甚至某种世界模型。它没有被告知「什么是对的」,它只是发现:在人类写下的文本里,某些说法后面总是跟着某些说法。
这一步产出的叫基座模型(base model)。它博学,但没有礼貌,也没有边界——你问它怎么造炸药,它可能接着你的话往下写,因为在它读过的语料里,这类文本确实存在。基座模型不会拒绝,因为它根本没学过「拒绝」这个动作。
1.2 后训练:教它「怎么答」
第二阶段是监督微调(SFT):人工写出成千上万条「问题 → 理想回答」,让模型模仿。这一阶段教会它对话的格式、语气、结构——包括在遇到某些问题时先给一段说明。注意,这里的「拒绝」还只是一种被示范出来的文体,不是原则。
1.3 对齐:把「该不该说」变成偏好
第三阶段才是关键。人类对同一个问题写出多个回答,标注员排序,训练一个奖励模型(reward model)来预测「人更喜欢哪个」。然后用强化学习(RLHF)或直接偏好优化(DPO)让模型朝着高奖励的方向偏移。经过这一步,模型不只是「会写拒绝的格式」,而是「倾向于选择拒绝」——拒绝从一种文体变成了一个统计偏好。
| 阶段 | 数据 | 目标 | 产出 |
|---|---|---|---|
| 预训练 | 数万亿 token 的网页、书籍、代码 | 预测下一个 token | 博学但无边界的基础模型 |
| SFT | 数万条人工示范对话 | 模仿理想回答 | 会对话、有固定文体的助手 |
| RLHF / DPO | 人类偏好排序 | 最大化人类偏好 | 有稳定行为倾向的成品模型 |
所以「AI 为什么能区分好坏」这个问题,准确答案是:它不是理解了善恶,而是学会了人类在文本与偏好中表现出的善恶判断。预训练让它见过「什么样的话在什么语境下会被谴责」,后训练把这种关联强化成一个稳定的输出倾向。它能说出理由,但那些理由往往是事后的合理化,不是决策的起因。
这个区别很关键:如果安全是「理解」的结果,它应该难以绕过;如果安全是「偏好」的结果,它就是一个可以被移动的概率质量。而后续所有实验都指向后者。
二、拒绝到底装在模型的哪个位置
过去两年,可解释性研究把这个问题拆出了三个层次,一层比一层深。
2.1 输出层:话术
最表层是措辞。「我无法协助」「作为 AI 语言模型」「建议咨询专业人士」——这些是 SFT 阶段被反复示范的句式,也是最好处理的一层:换掉措辞,行为可能就变了。多数所谓「提示词破甲」停在这里。
2.2 激活层:一个方向
2024 年的一项工作给出了一个相当惊人的结论:在多个开源模型上,拒绝行为主要由残差流里的单一方向中介。拿一批有害请求和一批无害请求各跑一遍,把两类输入在某一层的激活取平均、相减,得到的差值向量就是「拒绝方向」。
direction = mean(activations_harmful) - mean(activations_harmless)
# 消融:把激活里沿该方向的分量减掉
h' = h - (h · d) * d
# 结果:模型对原本拒绝的请求开始正常回答
# 反向操作:给无害请求加上该方向,模型开始无故拒绝
这个实验的意义不在于「找到了开关」,而在于它证明了拒绝是一个线性可分的门,而不是一套弥散的价值判断。一扇门可以被关上,也可以被拆掉。
2.3 表征层:概念与回路
再往深处,是模型内部对「危险」「伤害」「违规」这些概念的表示,以及把它们和输出行为连起来的回路。有研究发现安全相关的神经元分布稀疏,剪掉少量就能显著削弱安全行为;也有研究发现,安全对齐的效果主要集中在回答的前几个 token——一旦开头被引导到「好的,我来解释」,后面的内容就会顺着走。
这三层叠在一起,构成了一个重要判断:当前的安全对齐是浅的、概率性的、局部化的。它足以拦住随手一问,但挡不住有针对性的工程手段。

三、三种处理方式:过滤、遗忘与加锁
既然危险知识可能被学会,最直接的想法是「不喂就行」。但工程上「不喂」远没有想象中干净,而且它并不是唯一的手段。目前主流做法有三类,分别发生在训练流程的不同位置。
3.1 数据过滤:在源头删
预训练之前对语料做清洗:URL 黑名单、分类器打分、关键词过滤、去重。这是成本最低的一环,精度也最低,三个漏洞绕不过去:
- 领域耦合。你没法只过滤核材料提纯的段落,而保留核物理教学。同一批教科书、专利、监管文件、事故调查报告里,既有合法知识也有敏感细节。粒度越细,误伤越大;粒度越粗,漏网越多。
- 启发式上限。万亿级 token 只能靠黑名单和分类器,召回率有上限。绕过去的路子包括小说、庭审记录、安全规程、专利文本、以及别的语言译本。
- 知识重组。模型压缩的是分布,不是文档。它可以从化肥管理条例、矿山爆破规范、化工安全手册这些完全合法的材料里,拼出一个大致图景——方向对,细节错。
所以「完全没投喂」在工程上几乎不存在,存在的只是「投喂密度低」。密度低的结果不是「完全不会」,而是「会一半、错一半」——这比不会更麻烦,因为模型不会告诉你哪一半是错的。
3.2 能力遗忘:事后抹掉
代表工作是 WMDP 基准与 RMU 一类方法。目标不是让模型拒绝,而是让它在危险知识上的表现接近没学过:在表征层做定向扰动,把相关知识的表示推向随机,让它「想不起来」。
它和加锁的区别很关键:锁拆了还有货,遗忘拆了也没货。代价是容易误伤相邻知识,而且很难验证「真的忘了」——模型可能在别的语言、别的问法、别的任务形式下残留,甚至在做题时被间接激活。
3.3 行为对齐:留着知识,加一道锁
这就是前面讲的 RLHF/DPO:知识完整保留,只在输出端加一个偏好。成本最低、可控性最好,也是所有商用模型的标配动作。
缺点同样明显:锁是方向性的,可被拆。一旦有人拿到权重、算出那个方向,这道锁就形同虚设——这也是它和「遗忘」最本质的差别。
| 处理方式 | 发生阶段 | 动作 | 拆掉之后的表现 | 典型代表 |
|---|---|---|---|---|
| 数据过滤 | 预训练前 | 删减或降权语料 | 似懂非懂,细节缺失 | URL 黑名单、安全分类器 |
| 能力遗忘 | 后训练 | 抹掉表征 | 框架零散,难以复现 | WMDP、RMU |
| 行为对齐 | 后训练 | 改变输出倾向 | 拆锁即得,细节可能含糊 | RLHF、DPO、安全微调 |
真实模型基本是三者叠加:预训练挡掉一部分,后训练加锁,开源权重再补一层遗忘。所以你会看到两种极端的表现:有的模型拆锁后「什么都能聊」,有的拆锁后还是含糊其辞。差别不在锁的结实程度,而在锁后面的知识密度。
这正好回答了一个常见困惑:为什么「过滤干净」的模型被破解后,给的是似是而非的答案?因为它没有货,只能在语言层面补全。反过来说,一个全量投喂、只加锁的模型,拆锁后能给的东西要多得多——但依然不等于准确,因为它的训练目标从来不是「准确复述」,而是「生成人类会写的文本」。
一句话概括这一节:锁可以拆,空白拆不出来。破甲的效果上限,不取决于锁有多结实,而取决于训练时留下了多少。

四、七个层次:从一句话到一次重训
| 层次 | 手段 | 作用位置 | 稳定性 | 典型门槛 |
|---|---|---|---|---|
| L0 | 角色扮演、「假设你在写小说」 | 单条用户消息 | 极差,换个问法就失效 | 零 |
| L1 | 结构化系统提示词 + 拒绝词表压制 + 任务模板 | system prompt | 中等,长对话会漂移 | 会写提示词 |
| L2 | 多轮铺垫、任务伪装、上下文稀释 | 对话历史 | 中等偏上,依赖铺垫质量 | 会设计对话 |
| L3 | prefill、logit bias、约束解码、采样参数 | 解码器 | 好,但需要改推理代码 | 能部署本地模型 |
| L4 | 激活层操控:方向消融、steering、表征改道 | 隐藏层激活 | 很好,全局生效 | 有模型内部访问权 |
| L5 | 微调 / DPO 去拒答 / 权重正交化(abliteration) | 权重 | 最好,成为默认行为 | 有算力与数据 |
| L6 | 从基座重训后训练流程 | 权重 + 数据流水线 | 彻底 | 只有模型方做得到 |
L0 到 L3 在上一篇里已经展开,这里重点讲后三层——它们才真正触及「安全锁」本身。
五、L4:方向、转向与断路
L4 的共同特点是不改权重,只在推理时动激活。三种主流做法:
- 方向消融:算出拒绝方向,在每一层把激活里沿该方向的分量投影掉。效果直接,代价是可能连带削弱其他能力,因为「拒绝」和「谨慎」在表示空间里是挨着的。
- Steering vector:不删,而是加。给激活叠一个偏移向量,把模型往「配合」或「谨慎」的某一侧推。可正可负,因此比消融更可控,但强度需要调,过了会胡言。
- 表征改道(circuit breaker):这是防御方提出的思路——不是删掉有害表征,而是在检测到它时,把它映射到一个正交方向上去,让模型「想到但走不到」。它同时提升了抗攻击性和保持能力的平衡,是目前比较有前景的防御路线。
L4 的局限在于方向不唯一。单方向实验在部分模型上成立,但在更大的模型或更强的对齐下,拒绝可能由多个子空间共同承载。删掉一个,还有备份;层与层之间也有冗余。这就是为什么有的模型「消融了还在拒」。
六、L5:把门从权重里拆掉
L5 是目前公开手段里效果最彻底的一档,社区称之为 abliteration(消融 + 阉割的合成词)。流程只有三步:
- 采样:准备一批有害请求和一批结构相似的无害请求,各跑一遍前向,收集每层的残差流激活。
- 求方向:逐层做差值平均,得到候选拒绝方向;再用验证集挑出「消融后拒绝率降得最多、能力掉得最少」的那一层或那几层。
- 正交化:对写权重的矩阵做变换,把输出里沿该方向的分量减掉——等价于让模型「再也写不出这个方向」。
做完之后,模型不需要任何提示词配合,默认就不拒绝了。这就是网上那些「uncensored」权重的主要来源:成本低(单卡几十分钟到几小时)、可复现、效果稳定。
它的代价也很明确:
- 能力折损:拒绝方向与部分推理、谨慎判断能力在表示空间里耦合,切掉会让人在需要权衡的任务上变钝。实测常见的是通用 benchmark 掉几个点,长链推理更容易断。
- 跨语言残留:用英文样本算出的方向,在中文、日文上未必完全生效,因为不同语言的表示并不完全共享。
- 过度解除:连「这个我不能确定」这种正常的能力边界表达也会被一起削掉,模型变得过度自信。
除了正交化,L5 还有两条路:一是用 DPO 构造「拒绝回答 vs 直接回答」的偏好对,把模型往后者拉;二是安全微调的逆向使用——原本用来加固安全的数据,反向标注后就成了拆除工具。还有一类是「任务算术」:把某个「乐于助人」的向量加上去、把「谨慎」的向量减掉,权重层面做加减法。
七、L6:从基座重训
最彻底的做法是不去改成品,而是自己走一遍后训练:拿开源基座,用自己构造的偏好数据做对齐,安全策略完全自定。这条路没有「拆锁」的动作,因为锁从一开始就没装。
成本是数量级的差别:L5 是几张卡几小时,L6 是几百到几千 GPU 小时加一套数据流水线。所以它基本只出现在模型厂商和少数有算力的团队手里。对个人来说,L5 已经是性价比的终点。
八、那到底能不能绕过:三条结构性原因
把上面几节合起来,可以给出一个不太浪漫但比较可靠的结论:当前不存在「不可绕过」的安全锁,只有「成本不同的锁」。原因有三条,都来自结构本身。
8.1 概率性
生成是采样。只要拒绝不是 100% 概率,重复尝试、换措辞、改温度,总能找到一条通路。这是 L0/L2 有效的原因,也是为什么「单次测试通过」不能作为安全证据。
8.2 方向性
拒绝既然是激活空间里的一个方向,它在数学上就是可减的。这是 L4/L5 有效的根本原因。只要这个表示是线性的、可分离的,就存在一个投影矩阵能让它消失。
8.3 浅层性
对齐主要集中在回答的开头。一旦前几个 token 被引导到「好的,我来解释」,后续生成就会顺着这个上下文走,安全判断来不及再介入。prefill 之所以有效,正是利用了这一点。
防御方当然也在动。目前的研究方向包括:把安全表征分散到多层多方向(提高冗余)、在训练时加入对抗样本做潜空间对抗训练、用表征改道把有害表示映射走、以及让安全行为与能力表示解耦以降低「拆锁」的连带损伤。这些手段能显著提高成本,但没有一条能在数学上证明「不可绕过」——因为对手可以拿到权重,而拿到权重就意味着可以重算方向。
九、公开方法一览
| 方法 | 层次 | 机制 | 成本 | 公开程度 |
|---|---|---|---|---|
| 角色扮演 / 假设情景 | L0 | 改变上下文里的身份设定 | 零 | 广泛流传 |
| 系统提示词工程 | L1 | 压制拒绝句式、固定输出槽 | 零 | 插件化,公开 |
| 多轮渐进(crescendo 类) | L2 | 逐步移动对话边界 | 低 | 论文公开 |
| 预填助手回合 | L3 | 跳过开头,利用浅层对齐 | 低 | 论文公开 |
| 对抗后缀(GCG 类) | L3 | 梯度搜索出无意义但有效的后缀 | 中,需白盒 | 论文 + 开源代码 |
| 编码 / 低资源语言绕过 | L3 | 让安全分类器读不懂输入 | 低 | 广泛流传 |
| 拒绝方向消融 | L4 | 减掉激活里的拒绝分量 | 中,需权重与推理控制 | 论文 + 社区实现 |
| Steering vector | L4 | 给激活叠加偏移向量 | 中 | 论文 + 工具库 |
| Abliteration | L5 | 权重正交化,永久移除方向 | 中,单卡数小时 | 社区流程完全公开 |
| DPO 去拒答 | L5 | 偏好对训练,压低拒绝概率 | 中高 | 论文公开 |
| 基座自建后训练 | L6 | 不装锁 | 极高 | 厂商级 |
这张表有个规律:越往下,越不依赖「说话技巧」,越依赖对模型本身的访问权。换句话说,破甲的深度上限,取决于你能碰到模型的哪一层——只能发消息,就停在 L2;能拿到权重,就能到 L5。
十、能做到哪些,做不到哪些
| 任务类型 | 破甲后表现 | 原因 |
|---|---|---|
| 拒答话术类(免责声明、说教) | 压制率接近 100% | 本质是表达习惯,改起来最容易 |
| 政策边界类(被重点强化的行为) | 通过率约 50%–90%,随轮数衰减 | 训练时反复强化,且与上下文强相关 |
| 能力边界类(模型真不会) | 0% | 破甲不创造知识 |
| 宿主约束类(工具白名单、格式校验) | 经常直接失效 | 约束在模型之外,提示词够不着 |
还有两个经常被忽略的失败模式:
- 拒绝迁移:拒绝没有消失,只是换了形态。从「我不给」变成「给了但很空」「给了但关键处写『此处省略』」。这类输出用正则完全检测不出来。
- 上下文漂移:第 3 轮能过,第 20 轮回弹。系统提示词的权重会随上下文变长而被稀释,这是 L1 最典型的衰减曲线。
十一、技术成本与支持性
| 层次 | 算力成本 | 技术门槛 | 可维护性 | 可回滚 | 可被检测 |
|---|---|---|---|---|---|
| L1 | 无 | 低 | 低,换模型即失效 | 是,删段落即可 | 易,提示词可见 |
| L2 | 无 | 中 | 低,依赖对话设计 | 是 | 较易,看会话记录 |
| L3 | 需本地推理 | 中高 | 中,绑定具体模型 | 是,改参数即可 | 难,请求看起来正常 |
| L4 | 需 GPU 推理 | 高 | 中,绑定具体模型版本 | 是,撤 hook | 难 |
| L5 | 数十 GPU 小时 | 很高 | 高,产出独立权重 | 否,除非换模型 | 几乎不可能 |
| L6 | 数百至数千 GPU 小时 | 极高 | 高 | 否 | 几乎不可能 |
一个常见的误判是把 L1 当成「低成本高收益」,其实它的性价比只在短期:一次模型升级、一次系统提示词结构变化、一次上下文变长,效果就没了。L3 以上才是可持续的,但门槛和成本也随之上了一个台阶。
十二、效果怎么度量
只问「这条能不能过」没有意义,要看四个指标:
pass_rate = 通过次数 / (题目数 × 重复次数) # 目标 > 0.9
drift = [rate_at(0轮), rate_at(5轮), rate_at(10轮), rate_at(20轮)]
interference = rate_with_tool_call / rate_clean # 目标 > 0.8
hollow_rate = 含「省略/自行查阅/仅供参考」的比例 # 目标 < 0.1
其中 hollow_rate 最关键,它是破甲的真实天花板指标。如果这个数很高,说明拒绝只是换了件衣服:话术上过了,内容上没给。
另外,题目集要固定。每次换题、换采样温度、换模型版本,数字都不可比。这也是为什么认真的实现会自带一批 jsonl 测试集和评分脚本——不是摆样子,是为了让「这次比上次好」这句话能被证伪。
十三、和无约束开源模型的区别
| 维度 | 破甲插件(L1) | 无约束模型(L4/L5) |
|---|---|---|
| 改动对象 | 一段文本 | 权重或激活方向 |
| 生效范围 | 当前会话 | 全局、永久 |
| 能否关闭 | 能,删段落即恢复 | 否,除非换模型 |
| 一致性 | 靠模型配合,会漂移 | 是默认行为,不漂移 |
| 能力代价 | 几乎为零 | 有,常损失通用推理与连贯性 |
| 可迁移性 | 换模型即失效 | 跟权重走 |
| 留痕 | 明显,系统提示词可被抓包看到 | 无痕,请求看起来完全正常 |
需要纠正一个流行说法:abliterated 模型并不等于「没有任何约束」。它是沿拒绝方向做正交化,压掉的是那一条主方向,残余的分布偏好、预训练语料的倾向、以及部分纠缠进推理回路的行为都还在。实际表现常常是:它能过很多 L1 过不去的题,但在另一些题上反而更保守,或者干脆答得混乱。
更深也不等于更好用。L4/L5 的模型有两个副作用:一是能力折损,拒绝方向与部分推理能力在激活空间里是耦合的,切掉它会让人在需要谨慎判断的任务上变钝;二是没有开关,你没法在同一会话里「这段严谨、那段放开」。L1 反而灵活,需要时注入,不需要时撤掉。
十四、工程上更合理的用法
如果目标只是让模型少说废话、直接给结论,那 L1 完全够用,而且是最省事的一层。真正需要跨版本稳定的场景,通行做法是分层组合:
- 基座用正常模型,不追 uncensored 权重,保留完整推理能力。
- L1 管风格:用系统提示词控制回答形态,可随时撤换。
- L3 管格式:需要结构化输出时上约束解码,比反复改提示词可靠得多。
- 保留回滚:每一层都能单独关掉,出问题时不必换模型。
这套组合的好处是可逆、可测、可维护。相比之下,直接换一个去拒答权重,等于把可调项一次性焊死。
小结
把上面几节压缩成五句话:
- 「道德感」不是模型理解了善恶,而是预训练习得关联、SFT 学会文体、偏好训练把某种行为固化成倾向。
- 拒绝在模型里更像一扇门:输出层是措辞,激活层是一个方向,表征层是一组回路。三层都不难被找到。
- 因为它是概率的、方向的、浅层的,所以不存在不可绕过的锁,只存在成本不同的锁。
- 市面上多数「完美破甲」停留在 L1,可逆、可检测、会漂移;L4/L5 才是稳定方案,代价是能力折损与不可回滚。
- 判断方案好坏别看状态条颜色,看
pass_rate、drift、hollow_rate三个数。
最后一点个人看法:这类工具真正改变的,是「模型愿不愿意把已经知道的东西写出来」这个门槛,而不是「模型知道什么」。前者是表达层的问题,后者才是能力层的问题。把两者混为一谈,就容易高估破甲,也容易低估模型本身——毕竟拆掉一扇门,和拆掉整栋房子,是两件完全不同的事。
如果你觉得这篇文章不错,有用的话可以点击下面的“赞赏”支持作者,你的支持是我更新的动力(饿饿吃饭)。


Comments NOTHING