乐于分享
好东西不私藏

当我翻开源码,发现这个项目的压缩算法有点东西

当我翻开源码,发现这个项目的压缩算法有点东西

你有没有遇到过这种情况:用 AI 编程助手写代码,工具输出动辄几万 token,账单蹭蹭往上涨,但其实大部分都是废话?

上周我在 GitHub 上翻项目,发现了一个叫 Headroom 的开源工具。看名字以为是做前端的,点进去才发现这玩意儿是专门给 AI agent 做"减肥"的。

60-95% 的 token 压缩率?我一开始不信。

于是我决定翻翻它的源码,看看这个压缩到底怎么实现的。


先看看它解决了什么问题

用 AI 编程助手的人都知道一个痛点:上下文太贵了。

你让 Claude Code 帮你搜一下代码库,它可能返回 100 条搜索结果,每条都带完整的代码片段。结果你还没开始干活,几万 token 就没了。

Headroom 的思路是:在这些内容到达 LLM 之前,先压缩一遍。

你的 Agent → Headroom(本地压缩) → LLM

关键点在于:本地运行,数据不出去。这对于在意隐私的团队来说很重要。


压缩算法的选择让我意外

翻到源码后,我发现 Headroom 不是简单地截断文本。它有三套压缩方案,针对不同类型的内容:

SmartCrusher 专门处理 JSON。AI agent 返回的工具输出大多是 JSON 格式,里面一堆缩进、引号、重复的 key。SmartCrusher 直接把这些"装饰"去掉,数组里的对象只保留必要字段。

CodeCompressor 是 AST 感知压缩。它不是简单删注释或空行,而是解析成抽象语法树,然后根据语法结构压缩。支持 Python、JS、Go、Rust、Java、C++。它"懂"代码。

Kompress-base 是机器学习压缩。他们自己训练了一个 HuggingFace 模型,专门用来压缩文本。这是最硬核的部分。


一个让我印象深刻的设计:CCR

翻着翻着,我发现了一个叫 CCR(Compressed Context Retrieval)的东西。

普通压缩工具的问题是:压缩了就没了。万一 LLM 需看原始内容怎么办?

Headroom 的做法是:压缩后保留原始内容在本地,LLM 可以通过 headroom_retrieve 工具按需拉取。

这个设计很聪明。压缩是为了省钱,不是为了丢信息。


实际效果如何?

官方给了一些数据:

场景
压缩前
压缩后
节省
代码搜索
17,765 token
1,408 token
92%
事件调试
65,694 token
5,118 token
92%
Issue 分类
54,174 token
14,761 token
73%

我特别关注准确性部分。他们在 GSM8K(数学)、TruthfulQA(事实问答)上做了测试,压缩后准确率基本没掉,TruthfulQA 甚至还有 3% 的提升。


一个有趣的细节:headroom learn

源码里有个功能叫 headroom learn。

它的作用是:挖掘失败的会话,分析原因,然后自动写入 CLAUDE.md 或 AGENTS.md。

它能从你的失败中学习,然后把教训写成规则,让 agent 下次别犯同样的错。

这个功能让我想到一个问题:我们平时遇到 agent 犯蠢,是不是都是手动改配置文件?Headroom 把这个流程自动化了。


我的判断

适合每天重度使用 AI 编程助手的人,尤其是团队里多个 agent 需要共享上下文、在意 token 成本的场景。

不太适合只用一个 provider 的原生压缩功能,或者沙箱环境跑不了本地进程的情况。

代码质量不错,架构设计有想法。特别是 CCR 和 headroom learn 这两个功能,说明作者不是在做简单的文本替换,而是在认真思考 agent 时代的上下文管理问题。

值得试试,尤其是如果你每天都在为 token 账单头疼的话。


项目地址:https://github.com/chopratejas/headroom

许可证:Apache 2.0