heretic:无需训练即可修改语言模型
本文目录
Heretic#
无需训练的语言模型修改
移除审查、抑制垃圾输出(slop)、减少谄媚(sycophancy),以及更多。
全部在你的游戏电脑上,一个下午就能完成。
修改任何你能在自有硬件上运行的 LLM[^1]
Heretic 是一个独特的工具,让你做到通常只有拥有大规模算力的公司才能做的事:修改语言模型,而不仅仅是运行它。它不进行昂贵的训练;相反,它使用一系列数学技术,基于成对的对比示例提示(contrasting example prompts)和相应的评分器(scorer)来引导模型行为。
根据配置的不同,Heretic 可以:
- 抑制拒答/移除审查(这是默认操作)
- 减少垃圾输出(config.noslop.toml)
- 减少幽默(config.nohumor.toml)
- 减少谄媚(config.nosyco.toml)
- 改变情感对齐(config.emotions.toml)
- 以及许多、许多其他事情。
‼️ 使用 Heretic 并不需要理解语言模型的内部工作原理 ‼️
事实上,你可以在几秒钟内从零开始,完成对第一个模型的审查移除。Heretic 支持大多数稠密模型(dense models),包括许多多模态模型、若干不同的 MoE 架构,以及许多现代混合模型(hybrid models)。
社区已经使用 Heretic 创建并发布了成千上万个模型。Heretic 生成的模型已使用 MMLU 和 GSM8K 等标准指标进行独立基准测试,结果优于用竞争性消融(abliteration)工具生成的模型。[^2][^3]
使用方法#
准备一个 Python 3.10+ 环境,并根据你的硬件安装合适的 PyTorch 2.6+。然后运行:
pip install -U heretic-llm
heretic Qwen/Qwen3-4B-Instruct-2507
将 Qwen/Qwen3-4B-Instruct-2507 替换为你想要处理的任意模型。默认情况下,Heretic 执行审查移除(拒答抑制)。如果你想做别的事情,请选择上面链接的某个配置文件,或者编写自己的配置文件。关于可用的配置选项,参见 config.default.toml。默认情况下,Heretic 从工作目录中的 config.toml 加载配置,或者从 HERETIC_CONFIG_FILE 环境变量指定的文件路径加载。
重要
为 Heretic 1.x 制作的配置文件与 Heretic 2.x 不兼容!关于需要修改什么才能让旧配置继续工作,请参见迁移指南。
在程序运行开始时,Heretic 会对系统进行基准测试,以确定最优批次大小(batch size),从而充分利用可用硬件。在 RTX 3090 上使用默认配置处理 Qwen3-4B-Instruct-2507 大约需要 30-40 分钟。
Heretic 处理完一个模型后,你可以选择保存该模型、将其上传到 Hugging Face、与它聊天以测试效果、对它运行标准基准测试,或以上操作的任意组合。
使用评分器插件控制 Heretic 的行为#
Heretic 通过优化一个或多个分数来引导模型行为。分数由评分器插件(scorer plugins)计算。你可以轻松编写自己的评分器,从而完全控制 Heretic 对模型所做的处理。
你的评分器需要继承的评分器接口(抽象基类)定义在 scorer.py 中。唯一必需的方法是 get_score,但当你需要时,还有更多机制(例如设置管理)可用。
默认情况下,Heretic 通过拒答率(在 keyword_rate.py 中实现)和 KL 散度(KL divergence,在 kl_divergence.py 中实现)对模型进行评分。scorers 目录中还提供了其他评分器。这些评分器可以作为你自己实现的示例,也很容易按需调整。
评分器通过主配置文件进行配置。哪些评分器插件处于激活状态由 scorers 设置决定,该设置同时控制某个评分器的分数在优化过程中应当被最小化还是最大化。可以同时使用任意数量的评分器,它们的分数将被协同优化。同一个评分器的多个实例可以配置为不同的设置。关于该机制的完整文档,参见配置文件。
评分器插件的路径可以指定为完全限定的导入路径(fully.qualified.module.MyScorerClass),或者文件路径后跟类名(path/to/plugin.py:MyScorerClass)。你无需修改 Heretic 包代码即可使用自己的插件。
Heretic 还有修饰器插件(modifier plugins),将在下一节介绍。
Heretic 的工作原理#
Heretic 将一个可插拔的修饰器(接口见 modifier.py)与一个由 Optuna 驱动的基于 TPE 的超参数优化器结合起来。优化器寻找一组参数,当这些参数被传给修饰器时,能在生成的模型上最小化或最大化一组可配置的分数(见上文)。
Heretic 自带两种修饰器:
- 任意秩消融(Arbitrary-Rank Ablation,ARA)[^4]:这是默认修饰器,专门为 Heretic 开发。你可以在原始拉取请求中找到 ARA 工作原理的概述,并在 ara.py 中查看精确实现。
- 方向消融(Directional ablation),又称“消融术”(abliteration)[^5]:拒答抑制的经典方法。Heretic 的实现使用跨越各层的灵活消融权重核,并同时支持投影消融(projected abliteration)[^6] 和范数保持(norm preservation,MPOA)[^7]。完整代码位于 abliteration.py。
你可以使用 modifiers 设置切换修饰器实现。尽管该设置名称使用了复数形式,Heretic 目前每次处理运行只允许使用一个修饰器。这一点未来可能会改变。
可复现性与 Heretic Grimoire#
Heretic 能够创建可复现的模型,其仓库包含按需生成逐字节一致模型所需的全部信息,前提是环境与原始环境完全一致。除非硬件、驱动、操作系统以及包括所有包版本在内的整个软件栈完全相同,否则 PyTorch 并不保证运算会返回相同的输出。
Heretic 为你管理所有这些复杂性。当把处理后的模型上传到 Hugging Face 时,Heretic 会提供包含可复现性信息的选项。这完全是可选的,但如果你选择这样做,上传的仓库将包含一个 reproduce 文件夹,其中含有重新创建模型的详细说明(示例)。该文件夹同时包含人类可读的说明和一个名为 reproduce.json 的机器可读清单文件,其中包括 Heretic 自动复现模型所需的所有信息。
自动复现可以通过以下命令执行:
heretic --reproduce path/to/reproduce.json
Heretic 将引导你完成整个过程,将你的环境与创建该模型时使用的环境进行比对,并指出可能有问题的不匹配之处。制作原始模型所需的多小时计算不必重做,整个过程通常只需几分钟。在你导出生成的模型后,Heretic 会将权重文件的哈希值与复现清单中存储的哈希值进行校验(它们可能相同也可能不同,取决于你的系统与原始系统的接近程度)。
许多人已将带有可复现性信息的模型上传到 Hugging Face。由于一份复现清单的大小仅约 9 千字节,这些清单构成了一个可随时复现模型的便携库。
这个库被称为 Heretic Grimoire。你可以在这里查看。
但你不必依赖外部托管的 Web 应用来访问清单库:Grimoire 从根本上被设计为一个分布式系统,你可以随时通过运行以下命令从 Hugging Face 获取公开可用清单的本地副本:
heretic --collect-reproducibles path/to/target/folder/
现在你就拥有了所有可复现 Heretic 模型的本地备份,并且编目妥当。要更新这个集合,只需再次运行该命令。它作为仅追加的备份运行,即使相应模型已不再存在于 Hugging Face 上,也绝不会删除文件。
Heretic 由人类打造!#
与当今许多 AI 相关软件(事实上也与许多一般软件)不同,Heretic 不是“vibe-coded”(氛围编程式生成)的。
到目前为止,我在这个项目中的所有提交都是 100% 手写的,这也是我几十年来一直采用的编程方式;虽然一些 Heretic 贡献者使用编码智能体,但我会非常仔细地审查我合并的每一行代码。这里没有“LGTM”!
不信?看看这个拉取请求,在我们讨论实现的过程中,它在超过 7 个月的时间里积累了近 350 条人工撰写的评论。这里还有另一个评论超过 200 条的 PR。
我与卢德分子(luddite)恰恰相反,我在其他项目中用过智能体,但我为自己编写的代码感到自豪,到目前为止,在我如此在意的项目中,我还不太能让自己让机器来写代码。因此,Heretic 的代码库精简、相对简单,在我看来,在一些其他人看来也是如此,使用起来很愉快。
如果你喜欢这一点,加入我们吧!来 Discord 上告诉我们你的改进想法,或者直接提交 issue 或发起 PR。
先前技术#
据我所知,在 Heretic 首次发布(2025 年 11 月)时,以下消融技术的实现是公开可用的:
- AutoAbliteration
- abliterator.py
- wassname 的 Abliterator
- ErisForge
- Removing refusals with HF Transformers
- deccp
请注意,Heretic 是从零编写的,没有复用上述任何项目的代码。
致谢#
Heretic 的开发受到了以下工作的启发:
- 最初的消融论文(Arditi 等,2024)
- Maxime Labonne 关于消融的文章,以及他自己消融模型模型卡中的一些细节,例如使用非常数消融权重
- Jim Lai 描述“投影消融”和“保范双投影消融”的文章
- 与社区成员数千次的互动
引用#
如果你在研究中使用 Heretic,请使用以下 BibTeX 条目引用:
@misc{heretic,
author = {Weidmann, Philipp Emanuel},
title = {Heretic: Training-free language model modification},
year = {2025},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/p-e-w/heretic}}
}
许可协议#
Copyright © 2025-2026 Philipp Emanuel Weidmann (pew@worldwidemann.com) + contributors
本程序是自由软件:你可以根据自由软件基金会发布的 GNU Affero 通用公共许可证(GNU Affero General Public License)的条款,即许可证第 3 版或(由你选择)任何更新版本,重新分发和/或修改它。
本程序的分发是希望它会有用,但不提供任何担保,甚至不包括对适销性或特定用途适用性的默示担保。更多细节参见 GNU Affero 通用公共许可证。
你应该已随本程序收到 GNU Affero 通用公共许可证的副本。如果没有,请参见 https://www.gnu.org/licenses/。
通过向本项目做出贡献,你同意以相同的许可证发布你的贡献。
脚注#
[^1]: Heretic 支持使用 bitsandbytes 进行即时 4 位模型量化,这可以将处理模型所需的显存(VRAM)降低到运行该模型典型量化版本所用的同等数量,代价是轻微的精度损失。将 quantization 选项设置为 bnb_4bit 即可启用。
[^2]: https://old.reddit.com/r/LocalLLaMA/comments/1sojjoc/abliterlitics_benchmark_and_tensor_analysis/
[^3]: https://old.reddit.com/r/LocalLLaMA/comments/1sy18lx/abliterlitics_benchmarks_and_tensor_comparison/
[^4]: Weidmann 2026。解释该技术的预印本即将发布。
[^5]: Arditi 等,2024
[^6]: Lai 2025(1)
[^7]: Lai 2025(2)