开源项目

heretic

heretic

自动去除语言模型审查(safety alignment)的命令行工具,基于方向消融(abliteration)技术,通过Optuna自动优化参数,在最小化拒绝回答的同时,尽量保留原模型能力。相比手动abliteration,全自动且KL散度更低,社区已发布3000+脱敏模型,效果获用户认可。

README

Logo(标志)

Heretic:语言模型的全自动去审查工具

Discord 在 Hugging Face 上关注我们 Codeberg 镜像

#1 当日仓库

Heretic 是一个工具,用于从基于 Transformer(自注意力架构)的语言模型中移除审查(即所谓的"安全对齐"),而无需昂贵的后训练。它结合了方向消融(directional ablation,也称为 'abliteration'(Arditi et al. 2024、Lai 2025(1,2))的高级实现,以及由 Optuna 驱动的基于 TPE(树形结构帕森估计器)的参数优化器。

这种方法使 Heretic 能够完全自动化地工作。Heretic 通过协同最小化拒绝回答的数量和与原始模型的 KL 散度(Kullback-Leibler divergence),找到高质量的去审查参数。这产生了一个保留原始模型尽可能多智能的去审查模型。使用 Heretic 不需要理解 Transformer 内部原理。事实上,任何知道如何运行命令行程序的人都可以使用 Heretic 来去除语言模型的审查。

Heretic 支持大多数密集模型(dense model),包括许多多模态模型、几种不同的 MoE(混合专家模型)架构,甚至一些混合模型如 Qwen3.5。纯状态空间模型和某些其他研究型架构尚不直接支持。

截图

 

使用默认配置无监督运行,Heretic 可以生成与人类专家手动创建的去审查模型质量相当的模型:

模型 对"有害"提示的拒绝数 对"无害"提示的与原始模型的 KL 散度
google/gemma-3-12b-it(原始模型) 97/100 0 (按定义)
mlabonne/gemma-3-12b-it-abliterated-v2 3/100 1.04
huihui-ai/gemma-3-12b-it-abliterated 3/100 0.45
p-e-w/gemma-3-12b-it-heretic(我们的) 3/100 0.16

Heretic 版本无需任何人工干预,实现了与其他去审查模型相同的拒绝抑制水平,但 KL 散度低得多,表明对原始模型能力的损害更小。 (你可以使用 Heretic 内置的评估功能重现这些数字,例如 heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic。注意具体数值可能因平台和硬件而异。上表是在 RTX 5090 上使用 PyTorch 2.8 编译的。)

当然,数学指标和自动化基准测试从来都不能说明全部问题,也不能替代人工评估。使用 Heretic 生成的模型已获得用户好评(添加了链接并强调):

"我之前持怀疑态度,但刚下载了 GPT-OSS 20B Heretic 模型,天哪。它能针对敏感话题给出格式正确的长回复,使用你期望未审查模型会使用的准确未审查词汇,还能生成包含细节的 markdown 表格等等。看起来这是迄今为止该模型最好的去审查版本……" (评论链接)

"Heretic GPT 20b 似乎是我试过的最好的未审查模型。它没有破坏模型的智能,而且能正常回答那些基础模型通常会拒绝的提示。" (评论链接)

"[Qwen3-4B-Instruct-2507-heretic] 是我在 16GB 显存上能运行的最佳未量化去审查模型。" (评论链接)

Heretic 模型也已使用 MMLU 和 GSM8K 等标准指标进行了独立基准测试,并被认为与竞争去审查工具产生的模型相比具有竞争力: 1、 2。

社区已使用 Heretic 创建并发布了 超过 3000 个 模型。

使用方法

准备一个安装了 PyTorch 2.2+ 的 Python 3.10+ 环境(根据你的硬件选择合适的版本)。然后运行:

pip install -U heretic-llm
heretic Qwen/Qwen3-4B-Instruct-2507

将 Qwen/Qwen3-4B-Instruct-2507 替换为你想要去除审查的模型。

[!重要]

虽然 PyTorch 2.2 是 Heretic 所需的最低版本,但某些模型和配置可能需要更高版本才有的功能。例如,加载 gpt-oss 等 MXFP4 量化模型使用了 PyTorch 2.6 中新增的 torch.accelerator。

[!提示]

Heretic 使用 uv 进行依赖管理,仓库中包含一个 uv.lock 文件,固定了每个包的版本。如果你已经使用 uv(建议使用),你可以直接克隆仓库并运行 uv run heretic,这样可以确保依赖项与开发者使用的匹配,提高可靠性和安全性。

整个过程完全自动化,无需配置;不过,Heretic 有各种可配置参数,以便更精细的控制。运行 heretic --help 查看可用的命令行选项,或者查看 config.default.toml 如果你更喜欢使用配置文件。

在程序运行开始时,Heretic 会基准测试系统以确定最佳批处理大小,从而充分利用可用硬件。在 RTX 3090 上,使用默认配置,去除 Qwen3-4B-Instruct-2507 的审查大约需要 20-30 分钟。注意,Heretic 支持使用 bitsandbytes 进行模型量化,这可以大幅减少处理模型所需的 VRAM。将 quantization 选项设置为 bnb_4bit 即可启用量化。

Heretic 完成模型去审查后,系统会提示你是否保存模型、上传到 Hugging Face、通过聊天测试效果、运行标准基准测试,或者同时执行多个操作。

研究功能

除了主要功能(移除模型审查)外,Heretic 还提供了一些旨在支持模型内部语义研究(可解释性)的功能。要使用这些功能,你需要安装带有额外依赖 research 的 Heretic:

pip install -U heretic-llm[research]

这让你可以使用以下功能:

通过传递 --plot-residuals 生成残差向量图

使用此标志运行时,Heretic 将:

  1. 计算第一个输出 token 在所有 Transformer 层的残差向量(隐藏状态),包括"有害"和"无害"提示。
  2. 使用 PaCMAP 投影 从残差空间投影到 2D 空间。
  3. 通过几何中位数将"有害"/"无害"残差的投影左右对齐,使连续层的投影更相似。此外,PaCMAP 会使用上一层的投影初始化新层的投影,以减少突兀的过渡。
  4. 生成散点图,为每一层生成 PNG 图像。
  5. 生成动画 GIF,展示残差在层间变换的过程。
残差向量图

请参阅配置文件中的选项,你可以控制生成图表的各个方面。

注意,PaCMAP 是一项昂贵的操作,在 CPU 上执行。对于较大的模型,计算所有层的投影可能需要一个多小时。

通过传递 --print-residual-geometry 打印残差几何细节

如果你对"有害"和"无害"提示的残差向量之间关系的定量分析感兴趣,此标志会为你提供以下表格,其中包含有助于理解这些关系的指标(此处以 gemma-3-270m-it 为例):

┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
┃ 层数  ┃ S(g,b) ┃ S(g*,b*) ┃  S(g,r) ┃ S(g*,r*) ┃  S(b,r) ┃ S(b*,r*) ┃      |g| ┃     |g*| ┃      |b| ┃     |b*| ┃     |r| ┃    |r*| ┃   Silh ┃
┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━┩
│     1 │ 1.0000 │   1.0000 │ -0.4311 │  -0.4906 │ -0.4254 │  -0.4847 │   170.29 │   170.49 │   169.78 │   169.85 │    1.19 │    1.31 │ 0.0480 │
│     2 │ 1.0000 │   1.0000 │  0.4297 │   0.4465 │  0.4365 │   0.4524 │   768.55 │   768.77 │   771.32 │   771.36 │    6.39 │    5.76 │ 0.0745 │
│     3 │ 0.9999 │   1.0000 │ -0.5699 │  -0.5577 │ -0.5614 │  -0.5498 │  1020.98 │  1021.13 │  1013.80 │  1014.71 │   12.70 │   11.60 │ 0.0920 │
│     4 │ 0.9999 │   1.0000 │  0.6582 │   0.6553 │  0.6659 │   0.6627 │  1356.39 │  1356.20 │  1368.71 │  1367.95 │   18.62 │   17.84 │ 0.0957 │
│     5 │ 0.9987 │   0.9990 │ -0.6880 │  -0.6761 │ -0.6497 │  -0.6418 │   766.54 │   762.25 │   731.75 │   732.42 │   51.97 │   45.24 │ 0.1018 │
│     6 │ 0.9998 │   0.9998 │ -0.1983 │  -0.2312 │ -0.1811 │  -0.2141 │  2417.35 │  2421.08 │  2409.18 │  2411.40 │   43.06 │   43.47 │ 0.0900 │
│     7 │ 0.9998 │   0.9997 │ -0.5258 │  -0.5746 │ -0.5072 │  -0.5560 │  3444.92 │  3474.99 │  3400.01 │  3421.63 │   86.94 │   94.38 │ 0.0492 │
│     8 │ 0.9990 │   0.9991 │  0.8235 │   0.8312 │  0.8479 │   0.8542 │  4596.54 │  4615.62 │  4918.32 │  4934.20 │  384.87 │  377.87 │ 0.2278 │
│     9 │ 0.9992 │   0.9992 │  0.5335 │   0.5441 │  0.5678 │   0.5780 │  5322.30 │  5316.96 │  5468.65 │  5466.98 │  265.68 │  267.28 │ 0.1318 │
│    10 │ 0.9974 │   0.9973 │  0.8189 │   0.8250 │  0.8579 │   0.8644 │  5328.81 │  5325.63 │  5953.35 │  5985.15 │  743.95 │  779.74 │ 0.2863 │
│    11 │ 0.9977 │   0.9978 │  0.4262 │   0.4045 │  0.4862 │   0.4645 │  9644.02 │  9674.06 │  9983.47 │  9990.28 │  743.28 │  726.99 │ 0.1576 │
│    12 │ 0.9904 │   0.9907 │  0.4384 │   0.4077 │  0.5586 │   0.5283 │ 10257.40 │ 10368.50 │ 11114.51 │ 11151.21 │ 1711.18 │ 1664.69 │ 0.1890 │
│    13 │ 0.9867 │   0.9874 │  0.4007 │   0.3680 │  0.5444 │   0.5103 │ 12305.12 │ 12423.75 │ 13440.31 │ 13432.47 │ 2386.43 │ 2282.47 │ 0.1293 │
│    14 │ 0.9921 │   0.9922 │  0.3198 │   0.2682 │  0.4364 │   0.3859 │ 16929.16 │ 17080.37 │ 17826.97 │ 17836.03 │ 2365.23 │ 2301.87 │ 0.1282 │
│    15 │ 0.9846 │   0.9850 │  0.1198 │   0.0963 │  0.2913 │   0.2663 │ 16858.58 │ 16949.44 │ 17496.00 │ 17502.88 │ 3077.08 │ 3029.60 │ 0.1611 │
│    16 │ 0.9686 │   0.9689 │ -0.0029 │  -0.0254 │  0.2457 │   0.2226 │ 18912.77 │ 19074.86 │ 19510.56 │ 19559.62 │ 4848.35 │ 4839.75 │ 0.1516 │
│    17 │ 0.9782 │   0.9784 │ -0.0174 │  -0.0381 │  0.1908 │   0.1694 │ 27098.09 │ 27273.00 │ 27601.12 │ 27653.12 │ 5738.19 │ 5724.21 │ 0.1641 │
│    18 │ 0.9184 │   0.9196 │  0.1343 │   0.1430 │  0.5155 │   0.5204 │   190.16 │   190.35 │   219.91 │   220.62 │   87.82 │   87.59 │ 0.1855 │
└───────┴────────┴──────────┴─────────┴──────────┴─────────┴──────────┴──────────┴──────────┴──────────┴──────────┴─────────┴─────────┴────────┘
g = 良性提示残差向量的均值
g* = 良性提示残差向量的几何中位数
b = 有害提示残差向量的均值
b* = 有害提示残差向量的几何中位数
r = 均值的拒绝方向(即 b - g)
r* = 几何中位数的拒绝方向(即 b* - g*)
S(x,y) = x 和 y 的余弦相似度
|x| = x 的 L2 范数
Silh = 良/恶簇残差的平均轮廓系数

Heretic 的工作原理

Heretic 实现了一种参数化的方向消融变体。对于每个支持的 Transformer 组件(目前是注意力输出投影和 MLP 下投影),它识别每一层中相关的矩阵,并使其相对于相关的"拒绝方向"正交化,从而抑制该方向在与该矩阵相乘的结果中的表达。

拒绝方向是通过计算"有害"和"无害"示例提示的第一个 token 残差的均值差异,为每一层单独计算得出。

消融过程由几个可优化的参数控制:

  • direction_index:要么是拒绝方向的索引,要么是特殊值 per layer,表示每一层应使用与该层关联的拒绝方向进行消融。
  • max_weight、max_weight_position、min_weight 和 min_weight_distance:对于每个组件,这些参数描述了消融权重核在层上的形状和位置。下图说明了这一点:
解释图

 

Heretic 相对于现有去审查系统的主要创新点在于:

  • 消融权重核的形状非常灵活,结合自动参数优化,可以改善合规性/质量权衡。非恒定消融权重此前由 Maxime Labonne 在 gemma-3-12b-it-abliterated-v2 中探索过。
  • 拒绝方向索引是一个浮点数而非整数。对于非整数值,会对两个最近的拒绝方向向量进行线性插值。这使得除了均值差异计算确定的那些方向之外,还能解锁大量额外的方向,并且通常使优化过程能够找到比任何单个层的方向更好的方向。
  • 消融参数是分别为每个组件选择的。我发现 MLP 干预比注意力干预对模型的损害更大,因此使用不同的消融权重可以挤出一些额外的性能。

先前的相关工作

我知道以下公开可用的去审查技术实现:

注意,Heretic 是从头开始编写的,没有重用任何这些项目的代码。

致谢

Heretic 的开发参考了:

引用

如果你在研究中使用 Heretic,请使用以下 BibTeX 条目引用它:

@misc{heretic,
  author = {Weidmann, Philipp Emanuel},
  title = {Heretic: Fully automatic censorship removal for language models},
  year = {2025},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/p-e-w/heretic}}
}

许可证

版权所有 © 2025-2026 Philipp Emanuel Weidmann(pew@worldwidemann.com) + 贡献者

本程序是自由软件:你可以重新分发和/或修改它,前提是遵守自由软件基金会发布的 GNU Affero 通用公共许可证的条款,无论是许可证的第 3 版,还是(根据你的选择)任何更高版本。

本程序分发时希望它有用,但没有任何保证;甚至没有默示的适销性或特定用途适用性保证。详情请参阅 GNU Affero 通用公共许可证。

你应该已随本程序收到一份 GNU Affero 通用公共许可证的副本。如果没有,请参阅 https://www.gnu.org/licenses/。

通过向本项目贡献代码,你同意在同一许可证下发布你的贡献。

开源项目p-e-w2026-05-27原文

相关内容