今天在 GitHub Trending 上看到一个有意思的项目:Headroom,它是一个专为 AI Agent 设计的上下文压缩层,能在保留回答精度的前提下将发送给 LLM 的 Token 数量压缩 60-95%,且压缩完全可逆。
一、项目概述
Headroom 解决的核心问题是:AI Agent 在日常工作中会产生大量上下文——工具输出、日志、RAG 检索结果、文件内容、对话历史——这些内容在发送给 LLM 前往往没有经过任何优化,导致 Token 浪费严重。
项目提供三种部署方式:
- 库调用:在 Python 或 TypeScript 中直接
compress(messages),无需改动基础设施 - 代理模式:
headroom proxy --port 8787,零代码改动,任何语言都适用 - MCP 服务器:提供
headroom_compress、headroom_retrieve、headroom_stats三个工具,兼容所有 MCP 客户端
此外还支持 headroom wrap claude|codex|cursor|aider|copilot 一行命令包装主流编码 Agent,以及跨 Agent 共享记忆和失败会话挖掘(headroom learn)。
二、技术原理
架构设计
Headroom 的核心是一个流水线式压缩引擎,数据流如下:
Agent 输出 (prompts / tool outputs / logs / RAG / files)
│
▼
┌──────────────────────────────────────────┐
│ Headroom (本地运行,数据不离开本机) │
│ CacheAligner → ContentRouter → CCR │
│ ├─ SmartCrusher (JSON) │
│ ├─ CodeCompressor (AST) │
│ └─ Kompress-base (文本) │
│ Cross-agent memory · headroom learn · MCP│
└──────────────────────────────────────────┘
│ 压缩后 prompt + retrieval tool
▼
LLM Provider (Anthropic / OpenAI / Bedrock / ...)
核心组件
ContentRouter(内容路由器):自动检测输入内容类型(JSON、代码、自然语言),将不同类型分发到最合适的压缩器。
SmartCrusher:专门处理 JSON 数据的压缩器,针对数组对象、嵌套结构、混合类型进行智能裁剪。从源码可以看到,Headroom 在 Rust 层用 serde_json 的 preserve_order 特性确保 JSON 解析顺序在压缩前后一致:
# Cargo.toml - preserve_order 使得 serde_json::Value::Object 使用 IndexMap
# 保持 JSON 解析顺序,SmartCrusher 依赖此特性匹配 Python 的 str(dict) 输出
serde_json = { version = "1", features = ["preserve_order", "arbitrary_precision", "raw_value"] }
CodeCompressor:基于 AST 感知的代码压缩器,支持 Python、JS、Go、Rust、Java、C++。不同于简单的行级裁剪,它在语法树层面理解代码结构,保留关键逻辑同时去除冗余。
Kompress-base:基于 HuggingFace 的 ML 模型(chopratejas/kompress-base),用 ONNX INT8 推理进行文本压缩,无需 PyTorch 依赖。
CacheAligner:稳定化前缀,使 Anthropic/OpenAI 的 KV Cache 命中率最大化。这一层解决了一个实际问题:当上一次请求和本次请求的前缀不完全一致时,Provider 的缓存无法命中,CacheAligner 通过对齐前缀来确保缓存有效。
CCR 可逆压缩
CCR(Compressed-Context Retrieval)是 Headroom 的关键设计:原始内容永远不会被删除,而是存储在本地。LLM 在需要时通过 headroom_retrieve 工具按需取回原文。这解决了纯压缩方案中信息丢失的痛点。
Pipeline 生命周期
Headroom 暴露了一个稳定请求生命周期:
Setup → Pre-Start → Post-Start → Input Received → Input Cached →
Input Routed → Input Compressed → Input Remembered →
Pre-Send → Post-Send → Response Received
每个阶段都可以通过 on_pipeline_event(...) 扩展点进行定制。
三、安装与快速开始
环境要求
- Python 3.10+
- 可选:Node.js(TypeScript SDK)
安装
# Python 全功能安装
pip install "headroom-ai[all]"
# Node.js / TypeScript
npm install headroom-ai
# Docker
docker pull ghcr.io/chopratejas/headroom:latest
# 按需安装
pip install "headroom-ai[proxy]" # 代理服务器
pip install "headroom-ai[mcp]" # MCP 服务器
pip install "headroom-ai[ml]" # Kompress ML 压缩
最简运行
# 方式一:包装编码 Agent
headroom wrap claude
# 方式二:启动代理服务器(零代码改动)
headroom proxy --port 8787
# 方式三:Python 库调用
from headroom import compress
result = compress(messages, model="claude-sonnet-4-6")
# 查看节省统计
headroom stats
四、使用方法与实战
基础用法:库调用
from headroom import compress
messages = [
{"role": "user", "content": "...非常长的工具输出..."}
]
# 自动压缩,返回压缩后的 messages
compressed = compress(messages, model="claude-sonnet-4-6")
代理模式:零改动集成
启动代理后,任何 OpenAI 兼容客户端只需将 base_url 指向 http://localhost:8787/v1,Headroom 会自动拦截请求并压缩上下文:
headroom proxy --port 8787
# 然后配置你的 SDK:base_url = "http://localhost:8787/v1"
跨框架集成
Headroom 提供了丰富的集成适配器:
# Anthropic SDK
from headroom.integrations.anthropic import withHeadroom
client = withHeadroom(Anthropic())
# LangChain
from headroom.integrations.langchain import HeadroomChatModel
llm = HeadroomChatModel(your_llm)
# Vercel AI SDK (TypeScript)
import { headroomMiddleware } from 'headroom-ai';
wrapLanguageModel({ model, middleware: headroomMiddleware() });
# LiteLLM
import litellm
litellm.callbacks = [HeadroomCallback()]
headroom learn:从失败中学习
headroom learn
该命令会挖掘 Agent 的失败会话,自动提取修正规则并写入 CLAUDE.md / AGENTS.md / GEMINI.md,让 Agent 下次避免相同错误。
性能实测
在真实 Agent 工作负载上的压缩效果:
| 工作负载 | 压缩前 Token | 压缩后 Token | 节省比例 |
|---|---|---|---|
| 代码搜索(100 条结果) | 17,765 | 1,408 | 92% |
| SRE 事件调试 | 65,694 | 5,118 | 92% |
| GitHub Issue 分类 | 54,174 | 14,761 | 73% |
| 代码库探索 | 78,502 | 41,254 | 47% |
精度保持方面,在 GSM8K 数学推理基准上压缩前后精度完全一致(0.870),TruthfulQA 甚至略有提升(0.530 → 0.560)。
五、常见问题与解决方案
安装失败:Rust 编译错误
Headroom 的核心压缩引擎使用 Rust 编写(通过 maturin 构建 Python 扩展)。如果遇到编译错误,确保安装了 Rust 工具链:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
pip install "headroom-ai[all]"
使用 pipx 时需显式指定 Python 版本:
pipx install --python python3.13 "headroom-ai[all]"
代理启动后 LLM 调用报错
检查 HEADROOM_HOST 环境变量,Docker 容器中默认绑定 0.0.0.0,本地开发无需修改。确认 LLM Provider 的 API Key 已正确配置在环境变量中。
压缩后 LLM 回答质量下降
启用 CCR 可逆压缩后,LLM 可通过 headroom_retrieve 按需取回原文。检查是否正确配置了 retrieval tool。从源码 pyproject.toml 可以看到,[proxy] extra 包含了 MCP 依赖(mcp>=1.0.0),确保安装了该可选依赖。
PyPI 存储限制
项目在 v0.21.36 时曾触及 PyPI 10GB 累计存储上限。Cargo.toml 中的 release profile 做了针对性优化:
[profile.release]
strip = "symbols" # 剥离调试符号,~6.4 MB 节省
lto = "thin" # 跨 crate 链接时优化
codegen-units = 1 # 更好的内联和死代码消除
多 Agent 间记忆共享
使用 SharedContext API:
from headroom.memory import SharedContext
ctx = SharedContext()
ctx.put("key", compressed_data)
# 另一个 Agent 进程中
data = ctx.get("key")
六、总结
Headroom 填补了 AI Agent 生态中一个关键空白:上下文优化。它的优势在于:
- 多模式部署:库、代理、MCP 三种方式覆盖几乎所有集成场景
- 内容感知压缩:ContentRouter 自动选择最佳压缩算法,JSON、代码、文本各有专属优化
- 可逆性:CCR 确保原始数据不丢失,LLM 可按需回溯
- 本地优先:所有数据在本机处理,不发送到第三方服务
- 跨 Agent 生态:支持 Claude Code、Codex、Cursor、Aider、Copilot 等主流编码 Agent
对于日常使用 AI 编码 Agent、在多个 Agent 间切换、或希望降低 LLM API 成本的开发者,Headroom 是一个值得尝试的工具。项目采用 Apache 2.0 许可证,代码仓库:github.com/chopratejas/headroom。