Headroom:让 AI Agent「吃得少、营养好」的开源上下文压缩神器
Claude Code 跑一次日志分析,1.7 万 Token 没了;调试线上故障翻个堆栈,6.5 万 Token 打不住——这不是你的用法有问题,是 AI Agent 的上下文管理本身就缺了一环。
一、问题的根源:LLM 不挑食,但你喂不起了
我们先来算一笔账。
假设你重度使用 Claude Code,每天的 Token 消耗结构大概是:
| 消耗来源 | 占比 | 问题 |
|---|---|---|
| 代码库搜索结果 | ~25% | 大量重复行、注释、空格 |
| 日志文件 | ~30% | 时间戳/进程ID占 60%+ 篇幅 |
| RAG 检索结果 | ~25% | 相关性低的片段占据 context |
| 对话历史累积 | ~20% | 早期对话已经无关紧要 |
这其中,真正对回答有帮助的信息密度可能不到 40%。剩下 60%+ 全是冗余——重复行、时间戳、UUID、空格、格式标签……
Claude Code 原生有没有上下文管理?有,但它的策略就三个字:截、截、截。Context 满了就截后面的,早期关键信息被截掉了你甚至不知道。
这就是 Headroom 要解决的问题。
二、Headroom 是什么
Headroom(GitHub:chopratejas/headroom)是一个开源的 LLM 上下文压缩中间件,定位是「AI Agent 的智能消化层」。
它的核心原理很简单:在 AI Agent 读取的所有内容到达 LLM 之前,进行四层智能处理——归一化、去重、结构压缩、语义剪枝——减少 60-95% 的 Token 消耗,同时保持 97%+ 的信息精度。
[Headroom 工作原理] 原始数据 ↓ [归一化] Unicode 统一、换行符统一、时间戳占位符 ↓ [去重] MinHash + LSH 近似去重,5万行→5000次对比 ↓ [结构压缩] JSON/代码/日志/自然语言 分类型压缩 ↓ [语义剪枝] 句子编码,按信息密度筛选保留 top-K% ↓ 压缩后数据 → 送入 LLM Context三、核心技术原理:四层压缩管线
Stage 1:Normalizer——格式归一化
解决「看起来不同、实则相同」的问题:
Unicode NFKC 归一化(全角→半角)
换行符统一(
\r\n/\r→\n)日志时间戳正则替换为
[TIMESTAMP]占位符连续空白符合并
# 示例 # 压缩前 2026-06-10T10:35:11.123456+08:00 ERROR: connection timeout 2026-06-10T10:35:11.987654+08:00 ERROR: connection timeout # 压缩后 [TIMESTAMP] ERROR: connection timeout (x2)Stage 2:Deduplicator——冗余消除
使用MinHash + LSH(局部敏感哈希)做近似去重:
将每行文本转为 MinHash 签名
LSH(局部敏感哈希)将相似行放入同一个「桶」
查询复杂度从 O(n²) 降到 O(n)
5万行日志:暴力对比需 25亿次 → MinHash LSH 只需约 5000次
Stage 3:Structure-Aware Compressor——结构感知压缩
根据内容类型分发到专用压缩器:
| 内容类型 | 压缩策略 |
|---|---|
| JSON | 深层嵌套扁平化 + 重复 key 去重 |
| 代码文件 | AST 感知,保留骨架压缩实现细节 |
| 日志 | 错误行摘要化,重复堆栈合并 |
| 自然语言 | HuggingFace 专用压缩模型 |
Stage 4:Semantic Pruner——语义剪枝(可选)
使用sentence-transformers对句子编码,按信息密度评分,保留 top-K%。这是唯一一个调用 ML 模型的阶段,也是「有损压缩」的主要发生地——但实测精度保留率依然高达 97%+。
四、五大亮点功能
1. CCR——可逆压缩
传统压缩是不可逆的——压缩完就丢了。CCR(Context Compression with Retrieval)是 Headroom 的核心创新:
1. 原始数据存入本地 CCR 仓库(数据不离开你的机器) 2. 压缩后的数据发送给 LLM 3. LLM 随时可通过 headroom_retrieve 工具按需检索原始内容这相当于给 LLM 一个「放大镜」——平时看摘要,需要时查原文。数据主权完全在用户手里。
2. CacheAligner——KV Cache 命中率优化
将动态值(时间戳、UUID、进程 ID)替换为固定占位符,让相同结构的请求产生相同的前缀。不仅省 Token,还降低推理延迟。
3. CodeCompressor——AST 感知代码压缩
支持 Python、JavaScript、Go、Rust、Java、C++ 六种语言,基于抽象语法树压缩,保留函数签名、类定义、导入关系等「骨架」,对实现细节压缩。LLM 仍能理解代码整体架构,不需要逐行阅读。
4. headroom learn——从失败中学习
分析 Agent 失败会话,提取失败原因和修正方案,自动写入CLAUDE.md/AGENTS.md等文档。相当于给 Agent 积累「错题本」。
5. RAG 管道优化
对检索到的文档和片段进行智能压缩,在送入 LLM 前降低 Token 压力。相当于给 RAG 系统加了一个「最后一道过滤器」,确保只有高价值信息才能占满宝贵的 context 空间。
五、四种接入方式
方式一:Wrap 模式(⭐ 推荐,零改动)
一行命令包装现有的 Claude Code / Cursor / Copilot:
pip install "headroom-ai[wrap]" headroom wrap claude # 查看 Token 节省统计 headroom stats之后正常用claude命令,Headroom 在后台自动压缩所有上下文,完全不用改用法。
方式二:Proxy 模式(零侵入,适合团队共享)
headroom proxy --upstream https://api.openai.com/v1 --port 8080 --mode balanced应用侧只需改一行 base_url:
# 之前 client = OpenAI(api_key="sk-xxx", base_url="https://api.openai.com/v1") # 之后 client = OpenAI(api_key="sk-xxx", base_url="http://localhost:8080/v1")方式三:Library 模式(程序化接入)
from headroom import compress raw_logs = open("app.log").read() compressed = compress(raw_logs, mode="balanced") 方式四:MCP Server 模式(标准 MCP 协议) 任何 MCP 客户端都能用,配置到 Claude Code 只需修改 mcp_servers.json: { "mcpServers": { "headroom": { "command": "npx", "args": ["@headroom/mcp-server", "--mode", "balanced"] } } }六、压缩效果实测
| 数据类型 | 原始 Token | 压缩后 Token | 节省率 |
|---|---|---|---|
| 服务器日志(重复行多) | 50,000 | 2,500 | 95% |
| Stack Trace | 8,000 | 1,200 | 85% |
| 网页抓取正文 | 30,000 | 6,000 | 80% |
| 代码文件(含注释) | 15,000 | 6,000 | 60% |
| 纯自然语言文本 | 10,000 | 7,000 | 30% |
精度方面,基准测试显示:
| 基准 | 压缩后精度 | 说明 |
|---|---|---|
| GSM8K(数学推理) | 87.0%(与基线持平) | 精度完全不降 |
| TruthfulQA(事实准确性) | 56.0%(+3pp) | 压缩甚至提升了准确性 |
| SQuAD v2(阅读理解) | 97% 精度保留 | 压缩率 81% |
| BFCL(工具调用) | 97% 精度保留 | 压缩率 68% |
七、和同类项目对比
| 特性 | Headroom | RTK | lean-ctx | OpenAI Compaction |
|---|---|---|---|---|
| 压缩范围 | 全部上下文 | 仅 CLI 输出 | CLI + MCP 工具 | 仅对话历史 |
| 部署方式 | Proxy/Library/MCP | CLI | CLI/MCP | Provider 原生 |
| 本地运行 | ✅ | ✅ | ✅ | ❌ |
| CCR 可逆压缩 | ✅ | ❌ | ❌ | ❌ |
| 跨 Agent 记忆 | ✅ | ❌ | ❌ | ❌ |
| AST 感知压缩 | ✅(6语言) | ❌ | ❌ | ❌ |
八、适用与不适用的场景
✅ 非常适合
重度使用 Claude Code / Cursor / Copilot 等编程助手
同时使用多个 AI Agent,Token 费用是痛点
对数据安全有要求(CCR 本地存储,原始数据不外传)
日志分析、代码审查、文档处理等高 Token 消耗场景
❌ 可以跳过
只做简单对话,Token 消耗本身就不大
在沙箱环境无法运行本地进程
对 Token 成本完全不敏感
法律/医疗等不允许任何信息损失的场景
九、总结
Headroom 解决的是一个根本性问题:AI Agent 的上下文管理,不能只靠「截断」,要靠「筛选」。
Claude Code 负责「对话」,Headroom 负责「省着点喂」。给 Claude Code 加上 Headroom 后,所有内容会先经过四层智能处理再进入 context,Token 消耗减少 60-95%,同样的上下文窗口能聊更多轮、响应更快、账单更省——本质就是给 AI 对话加了一个「智能消化系统」,让它吃得少但营养不丢。
相关资源
GitHub: https://github.com/chopratejas/headroom
官方文档: https://headroom-docs.vercel.app/docs
压缩模型: https://huggingface.co/chopratejas/kompress-base
