RepoDaily · 2026-09-01 · Learning / Curriculum

Heretic 评测:全自动 abliteration,把 12B 模型拒答压到 3/100 而 KL 散度仅 0.16

#9 Learning / Curriculum Python +536 p-e-w/heretic 打开仓库

Heretic 用 Optuna 搜索自动完成 abliteration:在 gemma-3-12b-it 上把拒答压到 3/100,KL 散度只有 0.16,且不需要读懂 Transformer 内部。

项目类型Learning / Curriculum
最适合想从拒绝方向理论一路跑到可复现拒答率与 KL 数值的可解释性学习者与研究者。
风险等级高:主动移除安全对齐,叠加模型许可风险与 AGPL-3.0 义务
评估时间一个周末:一台 CUDA 机器、一次命令行运行、一次基准复现

核心问题: 自动参数搜索是否真的比手工 abliteration 更保能力(同一模型上 KL 0.16 对 0.45–1.04)?以及,解除审查这件事本身是否该由你来运行?

84/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 84/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 高
100证据质量

包含 6 个来源、覆盖 5 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

92可安装/可试用性

检测到 5 个工作流步骤、5 个下一步动作,以及 1 个命令/安装信号。

54维护可信度

趋势热度为 +536 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

77生产准备度

采纳风险标记为 high,并包含 5 条安全说明与 4 条跳过条件。

100差异化

3 个机会视角、4 个替代方案,以及 3 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

72Agent / AI 适配度

文章正文和元数据中检测到 4 个 AI/Agent 相关信号。

项目概览

Heretic 是一个 Python 命令行工具,用于在不做昂贵后训练的情况下移除 Transformer 语言模型的审查——README 自己的括号注释就是 'safety alignment'。机制上,它把方向消融(directional ablation,社区俗称 abliteration)的高级实现与基于 Optuna 的 TPE 参数优化器组合在一起。README 给出了明确的出处:Arditi 等人 2024(arXiv:2406.11717)的拒绝方向方法,以及 Lai 2025 的投影式与范数保持双投影变体。它的卖点是彻底自动化:工具自己搜索 abliteration 参数,同时最小化拒答数量和与原始模型的 KL 散度,README 明确说会跑命令行程序的人就能用。

证据是一张作者邀请你复现的对比表。在 google/gemma-3-12b-it 上,原始模型对 100 条 'harmful' 提示拒绝 97 条;Heretic 的产物 p-e-w/gemma-3-12b-it-heretic 降到 3/100,而 'harmless' 提示上的 KL 散度只有 0.16。两个社区知名的 abliteration 版本同样做到 3/100 拒答抑制,但 KL 分别是 0.45(huihui-ai)和 1.04(mlabonne v2),意味着对原模型的漂移大得多。该表在 RTX 5090 上用 PyTorch 2.8 编译,README 也注明数值依赖平台与硬件。复现命令完整写在文档里:`heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic`。

架构覆盖面是这个工具想超越 abliteration 笔记本时代的地方。开箱支持:大多数稠密模型、许多多模态模型、若干 MoE 架构,以及 Qwen3.5 这类混合架构;明确不支持:纯状态空间模型和某些研究型架构。这比通常一次只处理一个稠密 checkpoint 的手写代码覆盖宽得多。

我们把它归入 Learning / Curriculum 是有意的:Heretic 本身就是一套可运行的课程——理论锚点(两篇被引论文)、优化锚点(用 TPE 搜索代替手调)、指标锚点(拒答数 + KL 散度)、以及评分工具(内置评测模式)。它还示范了科研诚实:README 提醒数学指标和自动基准'never tell the whole story',不能替代人工评估。

打包事实则框定了风险面。发布包是 heretic-llm,版本 2.0.0.dev0,属于预发布,分类器标注 'Development Status :: 4 - Beta'。许可证为 AGPL-3.0-or-later,LICENSE 文件是完整的 GNU AGPL v3 正文,其网络条款要求以服务形式运行修改版时公开源码。要求 Python >=3.10(分类器列出 3.10–3.12),torch 与 torchvision 故意不锁版本,依赖栈拉取 transformers[kernels]~=5.6、accelerate~=1.13、bitsandbytes~=0.49、peft~=0.19、optuna~=4.7 和 lm-eval[hf]~=0.4。

解决什么问题

  • 手工 abliteration 要求熟悉 Transformer 内部:激活编辑、层选择、拒绝方向估计。
  • 手挑参数容易过度抑制:README 自己的表显示,同一个 12B 模型的社区版本 KL 为 0.45 和 1.04,而自动化运行为 0.16。
  • 拒答基准与 KL 测量框架搭建不易;Heretic 携带的 lm-eval 集成并非多数人预先配好的东西。
  • 架构多样意味着一份 notebook 很难跨模型族迁移;MoE 与多模态场景需要专门处理,通用代码给不了。

工作原理

  1. 从 README 引用的方向消融理论出发:Arditi 等人 2024(arXiv:2406.11717),加上 Lai 2025 的投影式与范数保持双投影扩展。
  2. 在模型激活中估计拒绝方向并投影掉——是权重层面的修改,不是后训练。
  3. 让 Optuna 的 TPE 采样器提出 abliteration 参数组合,替代人工猜测。
  4. 以联合最小化'有害提示上的拒答数'与'与原始模型的 KL 散度'为目标给每个候选打分。
  5. 用内置评测模式验证:`heretic --model <base> --evaluate-model <candidate>` 会重新输出这两个数字,任何模型都能被打分,不限于 Heretic 的产物。

这个仓库按顺序教你什么

  • 理论锚点:方向消融('abliteration'),定义来自 Arditi 等人 2024(arXiv:2406.11717),并由 Lai 2025 的投影式与范数保持双投影变体扩展。
  • 指标锚点:100 条有害提示上的拒答数,加上无害提示上的 KL 散度——任何 abliteration 都应被要求交代这两个数。
  • 优化锚点:用 Optuna 的 TPE 搜索 abliteration 参数,取代让 abliteration 成为专家手艺的人工调参。
  • 实践锚点:先在 google/gemma-3-12b-it 上跑文档给出的命令,把自己的输出对上 README 表格(3/100、KL 0.16),再去碰其他模型。

命令面:你实际敲什么

  • 入口是 `heretic`,在 pyproject 中声明为 `[project.scripts] heretic = 'heretic.main:main'`;可安装包名是 heretic-llm,版本 2.0.0.dev0。
  • 唯一完整写出的调用:`heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic`,用于复现 README 的拒答/KL 表。
  • 控制台体验来自依赖表里的 rich~=14.3 与 questionary~=2.1;基准测试拉取 lm-eval[hf]~=0.4。
  • 参考硬件有明说:RTX 5090 加 PyTorch 2.8,且数值被标注为依赖平台与硬件——你自己的数字应当当作相对值看。
  • Python 下限 >=3.10,分类器覆盖 3.10、3.11、3.12。

架构解读:消融数学加一个搜索回路

  • 核心:README 所称的方向消融的'advanced implementation'——把拒绝方向投影掉,而不是微调权重。
  • 搜索:Optuna 驱动的 TPE 优化器提出参数;目标函数联合最小化拒答数与相对原始模型的 KL 散度。
  • 运行时栈(来自 pyproject):transformers[kernels]~=5.6、accelerate~=1.13、bitsandbytes~=0.49、peft~=0.19,torch 与 torchvision 故意不锁版本。
  • 覆盖:大多数稠密模型、许多多模态模型、若干 MoE 架构、Qwen3.5 这类混合架构;纯状态空间模型开箱不支持。
  • 可选的 `research` 依赖组(geom-median、imageio、matplotlib、pacmap、scikit-learn)暗示了直接研究拒绝方向的可视化工具箱。

维护解读:依赖它之前要核查的信号

  • 版本 2.0.0.dev0,分类器 'Development Status :: 4 - Beta'——这是预发布。
  • pyproject 中只署名一位作者:Philipp Emanuel Weidmann(pew@worldwidemann.com)。
  • 分发面很宽:GitHub 加 Codeberg 镜像(codeberg.org/p-e-w/heretic)、Hugging Face 组织 heretic-org、Discord 与 Matrix #heretic:matrix.org。
  • 更新日志声明在 github.com/p-e-w/heretic/releases,文档在 heretic-project.org/tutorial,均来自 pyproject 的 URL 块。
  • 构建基于 uv(uv_build 后端,[tool.uv] 下 `exclude-newer = 7 days`);开发工具是 ruff>=0.14.5 与 ty>=0.0.5。

谁适合关注

适合关注

  • 想让拒绝方向理论配上可运行命令行和可复现记分板的可解释性学习者。
  • 想为自己的稠密、多模态、MoE 或混合(Qwen3.5 一类)模型做 abliteration 的本地模型玩家,而不是下载别人的成品。
  • 需要拒答率与 KL 数值、且想直接用产出 README 表格那套测量框架的研究者。

可以先跳过

  • 以 API 形式向公众提供服务的场景:AGPL-3.0-or-later 加上主动移除安全对齐,这个合规组合必须极其谨慎对待。
  • 必须遵守上游模型许可或禁止改动对齐的服务商条款的部署。
  • 目标是纯状态空间模型的用户——开箱明确不支持。
  • 没有像样 GPU 的机器;参考数值来自 RTX 5090。

风险与注意事项

高

工具的全部目的就是移除安全对齐,其产物可能与基础模型许可冲突,且 AGPL-3.0 为托管修改版附加了开源义务。

  • LICENSE 是完整的 GNU AGPL v3 正文,pyproject 声明 AGPL-3.0-or-later;以网络服务形式运行修改版会触发源码公开义务。
  • 解除审查的产物可能违反基础模型许可或服务商条款,风险由运营者承担。
  • 版本 2.0.0.dev0 加 Beta 分类器意味着稳定 2.0 之前接口与结果都可能变动。
  • pyproject 中 torch 与 torchvision 故意不锁版本,可复现性取决于你自建的环境。
  • README 自己也警告自动指标'no substitute for human evaluation',而工具又鼓励无人值守使用。
  • 许可证:AGPL-3.0-or-later(LICENSE 文件;pyproject 分类器确认为 GNU Affero General Public License v3 or later)。
  • 产物是去审查模型;托管或再分发可能违反上游模型许可与服务商使用条款。
  • 依赖面沉重且部分不锁版本:transformers[kernels]~=5.6 与 bitsandbytes~=0.49 会拉原生代码,torch/torchvision 版本留给你定——在共享基础设施上运行前先锁定并审计。
  • pyproject 把目标受众标为 Science/Research、环境标为 Console 加 GPU;产物应按研究工件对待,而非可直接部署的模型。
  • 去审查模型会按需产出有害内容;运营者自行承担下游使用、托管与法律责任。

替代方案比较

方案适用场景代价
现成 abliteration 模型(mlabonne、huihui-ai)
你今天就想要一个去审查的 gemma-3-12b-it,且能接受更高 KL 漂移(README 表中为 0.45–1.04)。Hugging Face 上免费
FailSpy/abliterator
你想亲手调拒绝方向,逐层学懂其中的机制。免费,开源
你更想通过微调(LoRA/QLoRA)改变模型行为,而不是权重层面的消融。免费,开源
原版模型加针对性提示词
你真正的痛点是良性提示被误拒,且必须留在服务商条款之内。免费

这个趋势说明了什么

按需复现的拒答基准

内置评测模式把'拒答率 + KL'检查压缩成两个命令行参数,这正好是横向比较不同来源 abliteration 时缺的那块。

运行 `heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic`,把你的拒答数与 KL 和 README 的 3/100、0.16 在你的硬件上对照。

可解释性教学实验室

README 的引文(arXiv:2406.11717 与 Lai 2025 的两篇 Hugging Face 文章)、heretic-project.org/tutorial 的教程,加上可选 research 依赖组(matplotlib、pacmap、scikit-learn),构成一门关于拒绝方向的紧凑课程。

把教程与 pyproject 里的 `research` 依赖组配合,尝试在消融前后分别可视化拒绝方向。

覆盖缺口:状态空间架构

纯状态空间模型被明确排除在开箱支持之外,这划出了当前实现最清晰的边界。

在规划任何 Mamba 家族的去审查运行之前,先核对 README 的支持架构声明。

下一步建议

先复现 gemma-3-12b-it 那张表

评判 Heretic 最省力的方式,是重跑它唯一写全的那条命令,看头牌数字能否在你的硬件上站得住。

  1. 在 CUDA 机器上准备 Python 3.10+(分类器覆盖 3.10–3.12);README 参考环境是 RTX 5090 加 PyTorch 2.8。
  2. 按仓库里的 pyproject.toml 安装(uv_build 后端);torch 与 torchvision 不锁版本,请自行固定驱动支持的版本。
  3. 运行 `heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic`,记录拒答数与 KL。
  4. 把你的数字与 README 表格(3/100 拒答、KL 0.16)对照,并记住文中标注的硬件依赖警告。
  5. 阅读 heretic-project.org/tutorial 的教程,粗读 arXiv:2406.11717,再把优化器对准其他模型。

RepoDaily 判断

Heretic 用 Optuna 驱动的搜索取代了 abliteration 的专家手艺,并自带评分框架——KL 0.16 对 0.45–1.04 的对比就是它的全部卖点。先学习它、复现它;然后再慎重地、必要时征询专业意见地决定:移除安全对齐这件事,是否应该由你来运行。

信息来源