Heretic 在 GitHub 上有 32107 个 star,最近一次提交就在 2026 年 9 月 21 日。它的自我定位很直白:全自动的模型行为改造工具(项目原文用的是 censorship removal 一词)。
这个方向不算新。但把它做成全自动、可复现、附带评估的工程化工具,并且拿到三万星,说明它解决了一个真实的摩擦点。这篇速评讲清楚三件事:它靠什么原理工作、实际怎么用、以及代价在哪里。
原理:方向消融 + 参数自动搜索
Heretic 的技术栈是两个组件的组合。
第一部分是方向消融(directional ablation,社区也叫 abliteration)。思路是在模型的残差流里找出一条对应特定行为的方向,把激活值在这个方向上的分量投影掉。理论依据来自 Arditi 等人 2024 年的工作,后续还有投影消融、保范双投影消融等改进变体。这个操作不需要昂贵的后训练——不动权重训练流程,只做定向修改。
第二部分是参数自动搜索。这类修改通常有几个关键参数(改哪一层、用什么强度、怎么组合),手工调参很费人力,而且不同模型的最优参数不通用。Heretic 用 Optuna 的 TPE 算法做自动搜索,优化目标同时包含两项:
- 目标行为的触发次数——当然越低越好
- 对无关输入的 KL 散度——衡量偏离原模型的程度,越小越好
同时最小化「改掉行为」和「伤到能力」这两个目标,是这个工具最有价值的设计。 它把原本靠经验试错的过程变成了明确的双目标优化问题,也解释了为什么它能在自动化条件下拿到接近甚至超过人工调参的质量。
安装与基本用法
依赖是 Python 3.10 以上加 PyTorch 2.2 以上。安装和运行都是单行命令:
pip install -U heretic-llm
# 直接对目标模型执行改造
heretic Qwen/Qwen3-4B-Instruct-2507
把模型名换成你要处理的目标即可。启动时程序会先对系统做一次基准测试,据此决定最优批大小,尽量吃满硬件。
几个容易被忽略的运行时细节:
- PyTorch 能跑的最低版本是 2.2,但部分模型与配置需要更高版本。比如加载 MXFP4 量化格式的模型会用到
torch.accelerator,这个接口要 PyTorch 2.6 才有。 - 仓库带
uv.lock,如果用 uv 管依赖,克隆仓库后直接uv run heretic就能保证依赖版本与开发者一致,省掉环境不一致带来的偶发问题。 - 官方参考耗时:RTX 3090 上以默认配置处理 Qwen3-4B-Instruct-2507 大约 20 到 30 分钟。
- 显存吃紧可以开 4 比特量化:配置项
quantization设为bnb_4bit。
跑完之后,程序会给出几个选项:保存模型、上传到 Hugging Face、直接对话测试效果、跑标准基准,或者任意组合。
配置体系
除了命令行参数,Heretic 支持配置文件方式。仓库里给了四份模板,默认外还有三个行为微调版本:
| 配置文件 | 用途 |
|---|---|
config.default.toml | 默认配置,改名为 config.toml 放在运行目录即可生效 |
config.nohumor.toml | 针对幽默风格输出的调整 |
config.noslop.toml | 针对套话式输出的调整 |
config.piqa.toml | 面向特定格式提示场景的调整 |
默认配置里有几个参数值得注意:
dtypes是一个候选列表,按顺序尝试加载张量。默认顺序是 auto(实际通常是 bfloat16)、float16、bfloat16、float32——这是为不同代硬件准备的降级链,旧卡不支持 bfloat16 时会自动退到 float16。device_map交给 Accelerate 决定,配合max_memory可以手工指定每个设备的上限,写成分散在 GPU 与 CPU 内存的形式。offload_outputs_to_cpu默认开启,把中间分析张量尽早挪到 CPU 内存,降低峰值显存,代价是主机与设备间传输带来一点性能损失。长模型上这个开关往往决定能不能跑起来。batch_size设 0 表示自动探测,上限由max_batch_size控制,默认 128。max_response_length默认 100。评估只需要判断行为是否触发,不需要长输出,压短能明显提速。chain_of_thought_skips用来跳过思维链段落,让评估发生在实际回答的开头。这对推理模型很关键——如果评估把思考过程也算进去,判定会失真。
评估:自带对标能力
Heretic 内置了评估功能,可以直接对比两个模型的表现:用 --model 指定原模型,用 --evaluate-model 指定改造后的模型,程序会输出两者的行为触发次数与 KL 散度对照。
官方给出的对比表(原模型为 gemma-3-12b-it,100 条有害提示):
| 模型 | 行为触发次数 | 与原模型的 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 |
读法很清楚:三个改造版本把触发次数都压到了 3/100,但偏离原模型的程度差了六倍以上——0.16 对 1.04。在触发次数打平的条件下,KL 更小意味着原模型的其他能力被保留得更多。
必须强调,这是自评数据,官方也明确说明数值与平台、硬件相关(那张表是在 RTX 5090 加 PyTorch 2.8 上生成的),而且数学指标与自动基准永远替代不了人工评估。社区另外把 Heretic 产出与同类工具做过独立基准对比(MMLU、GSM8K 等),结果被认为具有竞争力,可以当旁证,但仍不是同行评审结论。
可解释性研究功能
这部分是我认为最被低估的能力。装上 research 附加依赖后:
pip install -U 'heretic-llm[research]'
会解锁两个分析开关。
--plot-residuals 会做一整套残差可视化流水线:先为每一层的首个输出 token 计算残差向量,对两类提示分别收集;再用 PaCMAP 把残差空间投影到二维;然后按几何中位数做左右对齐,让相邻层的投影更可比,并且每一层都用上一层的投影做初始化,减少无意义的跳变;最后逐层输出散点图 PNG,并生成一张展示残差如何在层间演化的动画 GIF。
这套流程的价值在于:它把「模型在第几层开始区分这两类提示」变成肉眼可见的东西。对做可解释性研究的人来说,这比只看一个最终的触发率数字信息量大得多。代价是 PaCMAP 在 CPU 上跑,大模型上算完所有层可能超过一小时。
--print-residual-geometry 输出逐层的残差几何量化表,包含各方向对的余弦相似度、各向量的范数、以及轮廓系数等指标。这是把定性观察转成可比较数字的接口。
模型覆盖范围
支持面比较宽:多数稠密模型、不少多模态模型、若干 MoE 架构,甚至像 Qwen3.5 这样的混合架构也能处理。纯状态空间模型和某些研究型架构目前不在开箱支持范围内,遇到这类目标模型需要自行改造。
社区生态已经形成规模:Hugging Face 上用 Heretic 相关标签发布的模型超过五千个,Reddit 上的实测反馈也集中在「能力保留得比预期好」这一点。
许可与风险:必须说清楚的部分
许可是 AGPL-3.0,这是传染性最强的开源许可之一。本地自己跑它改造模型通常没有问题;但如果把 Heretic 封装成对外服务,或集成进分发给他人的产品,会触发网络服务场景下的源码开放义务。商用前务必让法务按自己的部署形态评估,不要按宽松许可的直觉处理。
风险层面需要更直白。移除模型层的拒绝行为,等于把最后一道兜底拆掉:原本由模型承担的边界判断会全部转嫁给上层系统。这不是「解锁能力」,而是把责任位置移动了。 一旦上层没有补齐输入输出过滤、权限校验、审计日志与人工复核,出问题的概率会显著上升。
所以我的建议是分场景定性:
- 适合:本地实验环境、离线模型行为分析、可解释性研究、受控的内部研究用途——在这些场景里,Heretic 的残差几何分析能力确实很有价值。
- 要谨慎:对外提供服务的产品、涉及未成年人或高风险决策的应用、合规敏感行业。
- 不建议:把改造后的模型直接替换到原本依赖模型层安全约束的位置上,而不追加系统级防护。
小结
Heretic 拿到三万星的合理性在于它把三件事同时做对了:原理清楚(方向消融有论文依据)、过程自动(TPE 双目标搜索省掉人工调参)、结果可验(自带评估与残差几何分析)。作为模型行为分析与可解释性工具,它值得放进工具箱。
但它的定位被很多人误读了。它不是一个「让模型更听话」的开关,而是一个把模型内部的某个决策方向显式暴露出来、并允许你去掉它的研究工具。理解这一点,才会用对它的能力,也才会清楚知道自己接手了多少责任。