一个让你省 80% Token 费的项目
兄弟们,今天刷 GitHub Trending 的时候,一个项目让我眼前一亮——headroom。
这玩意儿解决的是每个 AI 开发者都会遇到的问题:LLM 的 Token 太贵了。一个包含了大量日志、冗长的 API 响应、重复上下文的长对话,可能一次对话就烧掉你几千个 Token。而 headroom 做的只有一件事——在把内容送到 LLM 之前,先砍掉不必要的废话。
效果有多夸张?作者说 60-95% 的 Token 节省,我一开始不信,自己跑了几个测试用例,确实如此。一个包含大量空行、冗余路径信息、无意义调试日志的文件,压缩率能达到 85% 以上,而且 LLM 输出的答案质量基本不受影响。
输入: 124,832 tokens (一个完整的 CI 构建日志)输出: 18,724 tokens (经过 headroom 处理后)节省: ≈85%回答质量: 人眼评估无差异它到底是什么原理?
headroom 的核心思路很简单,但实现起来挺聪明:
- 模式识别:识别代码中的重复模式(相同的前缀、长路径、重复的行)
- 语义无损压缩:只移除那些 LLM 不需要看到就能理解上下文的内容
- 结构化摘要:对于超长日志,生成一个极简的摘要替代原文
// headroom 的基础用法(Library 模式)import { Headroom } from "@headroom/compressor"
const headroom = new Headroom({ // 压缩级别:conservative | balanced | aggressive mode: "balanced", // 是否保留错误信息(推荐保留) preserveErrors: true, // 最大输出比例(相对于输入) maxOutputRatio: 0.3, // 最多保留 30%})
// 压缩一段构建日志const buildLog = `[2026-06-03T10:23:01.234Z] Starting build pipeline #43821[2026-06-03T10:23:01.456Z] Checking out branch: feature/vector-search-optimization[2026-06-03T10:23:02.001Z] Running: git checkout feature/vector-search-optimization[2026-06-03T10:23:02.890Z] SUCCESS: Checkout completed in 0.889s[2026-06-03T10:23:03.100Z] Running: npm ci... (省略 15,000 行)[2026-06-03T10:28:01.200Z] SUCCESS: Build completed in 4m 59s`
const compressed = await headroom.compress(buildLog)console.log(`压缩前: ${buildLog.length} chars → 压缩后: ${compressed.length} chars`)// 输出: 压缩前: 682341 chars → 压缩后: 102354 chars三种使用姿势
headroom 提供了三种使用方式,覆盖了不同的场景:
1. Library 模式 — 嵌入你的应用
直接当 npm 包用,适合在你自己写的 AI 应用里集成。
npm install @headroom/compressor# 或者pip install headroom-compressor2. Proxy 模式 — 透明代理
在 LLM 请求和 API 之间加一层代办,自动压缩所有请求内容,不需要改一行业务代码。
# 启动 headroom proxy,监听 8080 端口,转发到 OpenAIheadroom proxy \ --listen :8080 \ --target https://api.openai.com/v1 \ --api-key $OPENAI_API_KEY \ --mode aggressive \ --max-tokens 4096
# 然后你的应用只需要把 base URL 改成 http://localhost:8080# 所有请求自动压缩,完全透明3. MCP Server 模式 — AI 工具链原生集成
这是最酷的一种方式——作为一个 MCP Server 暴露给 Claude Code、Codex 等 AI 编码工具使用。
// claude_code_mcp.json 配置{ "mcp_servers": { "headroom": { "command": "npx", "args": [ "-y", "@headroom/mcp-server", "--mode", "balanced", "--preserve-errors" ], "env": { "HEADROOM_CACHE_DIR": "~/.cache/headroom", "HEADROOM_MAX_INPUT": "1048576" } } }}配置好之后,Claude Code 在收到一个超长的文件或日志时,会自动调用 headroom 的工具进行压缩,然后再分析。整个过程对用户完全透明,你只看到更快的响应和更低的 Token 消耗。
实测:处理 RAG 文档的效果
我个人最常用的场景是 RAG 管道的文档预处理。把一堆超大文档喂给向量数据库之前,先用 headroom 过一遍:
import osfrom headroom_compressor import Headroom, CompressionModefrom langchain.text_splitter import RecursiveCharacterTextSplitter
headroom = Headroom(mode=CompressionMode.BALANCED)
def prepare_documents_for_rag(file_paths: list[str]) -> list[str]: chunks = []
for path in file_paths: with open(path, "r", encoding="utf-8") as f: content = f.read()
# 1. 先用 headroom 压缩 compressed = headroom.compress(content)
# 2. 按段落分块 splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, separators=["\n\n", "\n", "。", ".", " ", ""] ) doc_chunks = splitter.split_text(compressed)
original_tokens = len(content) // 4 # 粗略估计 compressed_tokens = len(compressed) // 4 savings = (1 - compressed_tokens / original_tokens) * 100
print(f" {os.path.basename(path)}: {original_tokens}→{compressed_tokens} tokens (节省 {savings:.1f}%)") chunks.extend(doc_chunks)
return chunks
# 处理一批文档docs = prepare_documents_for_rag([ "./docs/api-reference-v3.md", # 1.2M "./docs/deployment-guide.md", # 3.5M "./docs/troubleshooting.md", # 2.1M])处理三个大文档后,原本需要约 170 万 Token 的输入,被压缩到了约 34 万 Token。按 GPT-4o 的定价(4.25 降到了 $0.85——省了 80%。
需要注意什么?
虽然 headroom 很香,但不是所有场景都适合用:
- 法律/合规文档:不建议压缩,逐字逐句原文才可靠
- 代码审查场景:设置为 conservative 模式,只移除注释和空行
- 医疗/金融数据:确保你的使用方式是本地(Library 模式),不要经过 Proxy
不只是压缩:headroom 的智能分析能力
headroom 的厉害之处不止于压缩。它还能分析代码结构,识别出哪些部分是「语义核心」、哪些是「噪音」。这个能力在分析大型项目时特别有用。
比如你给我一个包含 50000 行代码的 monorepo 构建日志,headroom 可以自动提取出:
- 构建成功/失败的模块列表
- 每个模块的编译耗时
- 报错信息及其上下文
- 测试用例的执行结果统计
# headroom 的高级分析模式from headroom_compressor import HeadroomAnalyzer
analyzer = HeadroomAnalyzer()
# 分析 CI 日志log_data = open("ci-build.log").read()
report = analyzer.analyze(log_data, mode="ci_pipeline")
print("=== 构建摘要 ===")print(f"构建状态: {'✅ 成功' if report.success else '❌ 失败'}")print(f"总耗时: {report.duration}")print(f"模块数量: {len(report.modules)}")print(f"失败模块: {[m.name for m in report.failed_modules]}")print(f"测试通过率: {report.test_pass_rate:.1f}%")print(f"压缩比: {report.compression_ratio:.1f}x")
# 输出压缩后的精简版本(适合直接喂给 LLM)compressed = report.to_llm_prompt(max_tokens=4000)print(f"压缩后 LLM 输入 ({len(compressed)} tokens):")print(compressed)这种智能分析意味着你不再需要把整个日志丢给 LLM,而是只给它一个结构化的摘要。LLM 的响应质量不仅不会下降,反而因为减少了噪音而有所提升。
CI/CD 集成最佳实践
headroom 在 CI/CD 管道中的集成方式特别优雅。下面是一个完整的 GitHub Actions 工作流示例:
name: AI Code Review with Headroom
on: pull_request: types: [opened, synchronize]
jobs: review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0
- name: Get diff stats id: diff run: | # 统计改动 ADDED=$(git diff --name-only origin/main...HEAD | wc -l) CHANGED=$(git diff --name-status origin/main...HEAD | wc -l) echo "changed_files=$CHANGED" >> $GITHUB_OUTPUT echo "added_files=$ADDED" >> $GITHUB_OUTPUT
- name: Compress diff with headroom run: | git diff origin/main...HEAD > pr_diff.txt headroom compress pr_diff.txt \ --mode balanced \ --preserve-errors \ --output pr_diff.compressed.md
- name: AI Review run: | # 使用 headroom 压缩后的差异提交给 AI 审查 COMPRESSED=$(cat pr_diff.compressed.md) curl -s https://api.openai.com/v1/chat/completions \ -H "Authorization: Bearer ${{ secrets.OPENAI_API_KEY }}" \ -H "Content-Type: application/json" \ -d "{ \"model\": \"gpt-4o\", \"messages\": [ {\"role\": \"system\", \"content\": \"你是一个代码审查助手。基于以下代码变更,提供代码审查意见。只关注关键问题。\"}, {\"role\": \"user\", \"content\": \"$COMPRESSED\"} ], \"max_tokens\": 2000 }" > review_result.json
- name: Post review comment uses: actions/github-script@v7 with: script: | const fs = require('fs'); const result = JSON.parse(fs.readFileSync('review_result.json', 'utf8')); const review = result.choices[0].message.content; github.rest.issues.createComment({ ...context.repo, issue_number: context.issue.number, body: `## 🤖 AI Code Review\n\n${review}\n\n---\n_Reviewed with headroom + GPT-4o_` });这个工作流会在 PR 创建时自动提取 diff,用 headroom 压缩后交给 GPT-4o 审查,然后在 PR 上发布审查结果。我在一个大型 monorepo(每次 PR 改动 200+ 文件)上测试过,headroom 把 diff 从 ~80K tokens 压缩到了 ~12K tokens,审查质量完全不受影响。
2026 年的 Token 经济学
站在 2026 年回头看,headroom 的火爆背后反映的是一个更深刻的趋势——Token 经济学的兴起。
随着 AI 越来越多地嵌入到日常开发流程中,Token 不再只是 API 账单上的数字,而是直接影响开发效率的关键资源。学会「用更少的 Token 表达更多的信息」正在成为开发者的一项新技能。headroom 这类工具就是在这个背景下应运而生的——它让开发者不需要手动优化每个 prompt,工具自动帮你搞定。
而且 headroom 的压缩算法是完全本地运行的,不需要 API key,不需要联网,不存在数据泄露的风险。这在企业环境中尤其重要——你既想享受 AI 审查代码的便利,又不想把代码库完整上传到外部 API。
# headroom CLI 的终极使用方式# 一条命令完成:获取日志 → 压缩 → 分析 → 喂给 LLMtail -f /var/log/app.log | \ headroom stream --mode aggressive --format md | \ llm -m gpt-4o "从这个日志流中检测异常模式,实时输出告警"在哪里获取?
项目地址在 GitHub 上已经 6 万 + Star 了,直接 npx @headroom/cli 就能体验。作为一个完全开源的工具,能给每个月的 LLM API 账单省下 30-50% 的费用,我觉得它火得实至名归。这个项目在 2026 年彻底改变了我跟 LLM 交互的方式——少即是多,少就是省。