来源:互联网 更新时间:2026-06-05 07:24
直接上一组实测数据。用 Claude Code 跑一个中型项目的代码搜索,100 条结果一股脑塞进 prompt,总共 17765 个 token。换上 Headroom 压缩一下,只用了 1408 个 token。结果呢?目标函数找对了,修改建议也给得正确。省了 92% 的 token,账单直接砍到零头。

AI coding agent 这两年进步确实快,但有一个顽疾始终没解决——上下文太臃肿了。
一次 grep 搜索命中 100 个文件,大部分是噪音;一次 git log 输出几千行,真正有用的就那么几条;一次数据库查询返回 50 行 JSON,关键时刻用到的字段可能只有 3 个。
这些东西全部原封不动塞进 prompt,模型照单全收,按 token 计费。Claude 3.5 Sonnet 的价格是 3 美元/百万 token,GPT-4o 是 2.5 美元/百万 token。一个 SRE 排障会话,光日志就能吃掉 65000 个 token——这还没算模型思考和回复的消耗。
之前的解决思路无非三种:
Headroom 的思路另辟蹊径:先把上下文压缩,原件保留不动,模型觉得不够用再自己去取。
一个开源的上下文压缩层,跑在本地,插在 agent 和 LLM 之间。GitHub 上已经超过 10k star,单周涨了 6000 多,热度很高。
核心流程大致如下:
你的 Agent(Claude Code / Cursor / Codex / 自研代码)
│
│ 工具输出、日志、文件内容、RAG 结果
▼
┌──────────────────────────────────────────┐
│ Headroom(本地运行,数据不出机器) │
│ │
│ CacheAligner → ContentRouter → 压缩器 │
│ ├─ SmartCrusher (JSON) │
│ ├─ CodeCompressor (AST) │
│ └─ Kompress-base (文本) │
│ │
│ CCR 存原件·跨 agent 记忆·MCP │
└──────────────────────────────────────────┘
│
│ 压缩后的 prompt + retrieve 工具
▼
LLM 提供商(Anthropic / OpenAI / Bedrock)
使用方式有三种:最简单的袋里模式(headroom proxy --port 8787,零代码改动),库模式(直接调用 compress(messages)),或者用一行命令包裹 agent(headroom wrap claude)。
Headroom 不是简单粗暴地砍字数。它有三个专门的压缩器,由 ContentRouter 根据内容类型自动分发。
agent 调用工具拿到的返回值通常是 JSON。比如一个 API 响应可能有几十条记录,每条都带着相同的 key 名:
[{"id": 1, "name": "Alice", "email": "alice@example.com", "role": "admin", "created_at": "2026-01-15", "last_login": "2026-06-03", "status": "active", "department": "engineering"},
{"id": 2, "name": "Bob", "email": "bob@example.com", "role": "user", "created_at": "2026-02-20", "last_login": "2026-06-01", "status": "active", "department": "marketing"},
{"id": 3, "name": "Carol", "email": "carol@example.com", "role": "admin", "created_at": "2026-03-10", "last_login": "2026-05-28", "status": "inactive", "department": "engineering"}]
50 条这样的记录,每个 key 名重复 50 次,冗余触目惊心。SmartCrusher 检测到数组加字典的结构后,把重复的 key 抽出来做成表头,值按行排列,类似于 JSON 转 CSV。但它更聪明——嵌套对象会递归处理,混合类型也能兼容。
利用 tree-sitter 做 AST 解析,识别代码结构后,保留函数签名、类定义和关键注释,砍掉函数体里的具体实现。模型在做代码搜索时,大多数情况下只需要知道“这个函数接收什么参数、返回什么类型”,并不需要逐行读实现细节。
tree-sitter 需要下载二进制包,大约 50MB,目前支持 Python、Ja vaScript、Go、Rust、Ja va、C++ 六种语言。
这是 Headroom 自己训练的一个 HuggingFace 模型,专门针对 agent 交互场景的文本做压缩。训练数据来自大量真实的 agent trace(工具调用日志、对话历史、文档片段)。
与通用摘要模型的最大区别在于:Kompress-base 知道哪些信息对 agent 后续决策有用。比如错误日志里的堆栈信息会被保留,而重复的时间戳和进程 ID 则会被压缩掉。
这是 Headroom 最关键的设计。CCR(Compressed Context with Retrieval)不会删除原始数据,而是将其存在本地的 LRU 缓存里。压缩后的 prompt 中附带一个 headroom_retrieve 工具——如果模型发现压缩版信息不够用,可以调用这个工具拿回原始内容。
作者在 Hacker News 上解释过这个设计思路:把“压缩”和“可检索”结合起来,既保留了信息的完整性,又大幅减少了每次调用时的 token 消耗。和截断相比,数据没有丢失;和摘要相比,不需要额外的 LLM 调用;和加大上下文窗口相比,token 确实省下来了。
安装非常简单:
pip install "headroom-ai[all]"
最省事,无需修改现有代码。Headroom 启动一个 HTTP 袋里,拦截发往 LLM 的请求,对 context 做压缩后再转发。
headroom proxy --port 8787
然后把 agent 的 API endpoint 指向 http://localhost:8787,所有兼容 OpenAI 接口的客户端都能用。
一行命令包裹现有的 coding agent:
headroom wrap claude # Claude Code
headroom wrap codex # Codex
headroom wrap cursor # Cursor(会打印一段配置,粘贴即可)
headroom wrap aider # 启动袋里 + 启动 aider
Python 里直接调用:
from headroom import compress
messages = [
{"role": "user", "content": "分析这段日志..."},
{"role": "assistant", "content": "...(长日志内容)..."}
]
compressed = compress(messages, model="claude-sonnet-4-20250514")
# compressed 可以直接传给 Anthropic SDK
TypeScript 也有对应的包:
import { compress } from 'headroom-ai';
const compressed = await compress(messages, { model: 'claude-sonnet-4-20250514' });
主流的框架都有现成适配:
# Anthropic SDK
from headroom import withHeadroom
client = withHeadroom(Anthropic())
# LangChain
from headroom.integrations import HeadroomChatModel
model = HeadroomChatModel(your_llm)
# LiteLLM
import litellm
from headroom.integrations import HeadroomCallback
litellm.callbacks = [HeadroomCallback()]
除了压缩,Headroom 还额外做了一件事:稳定 prompt 前缀。
Anthropic 和 OpenAI 的 API 都有 KV cache 机制——如果两次请求的 prompt 前缀相同,第二次可以复用缓存,速度更快,成本也更低(Anthropic 的 cache hit 价格只有普通输入的 10%)。
但在实际使用中,agent 每次调用工具后返回的内容会略有变化(时间戳不同、字段顺序不同),导致前缀频繁变化,cache 命中率很低。
CacheAligner 会把 prompt 中不变的部分(系统提示、历史对话)和变化的部分(工具输出)分开处理,确保不变部分的 token 序列保持稳定。这样一来,KV cache 的命中率会高很多。
这个优化是免费的,压缩的时候顺带就完成了。
官方给出的测试数据(可自行复现,运行 python -m headroom.evals suite --tier 1):
压缩率方面:
| 场景 | 原始 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 | 0.870 | 0 |
| TruthfulQA | 事实 | 0.530 | 0.560 | +0.03 |
| SQuAD v2 | 问答 | — | 97% | 压缩 19% |
| BFCL | 工具调用 | — | 97% | 压缩 32% |
代码搜索和 SRE 排障场景的压缩率最高,因为这两类输出的冗余特别严重——大量重复的文件路径、相似的日志格式。代码库浏览的压缩率相对低一些,因为代码本身的信息密度比较高。
TruthfulQA 的分数反而提高了 0.03。一个可能的解释:压缩去掉了无关信息后,模型的注意力分配更集中了。
试用下来有几个问题值得注意:
[ml] extra 安装 Kompress-base 模型,首次启动还会因为下载模型而比较慢。如果只需要 JSON 压缩和袋里功能,可以用最小安装 pip install headroom-ai[proxy],跳过 tree-sitter 和模型下载。市面上做类似事情的工具不算多:
git show、ls 这类),范围较窄。Headroom 内部实际集成了 RTK 作为 shell 输出的预处理。Headroom 的优势集中在两点:全品类覆盖(JSON、代码、文本、图片都能压缩),以及压缩可逆(原件还在本地,随时可取)。劣势是本地部署,依赖相对较重。
值得一试的场景:
不太适合的场景:
Headroom 解决的问题非常实际:AI agent 的上下文太臃肿,浪费 token,浪费钱。三个压缩器分别处理 JSON、代码、文本,CCR 机制保证压缩可逆,CacheAligner 顺手优化了 KV cache 的命中率。
从 benchmark 来看,代码搜索和日志分析场景能省 90% 以上的 token,而准确率几乎没有损失。实际使用中,袋里模式是最省事的——一行命令就能套到现有 agent 上,几乎零成本接入。
项目地址:github.com/chopratejas/headroom,Apache 2.0 开源协议,PyPI 和 npm 都有包可以直接安装。
下饭影视APP下载安装指南
灵宝派对手游下载安装地址推荐
和平精英如何做到压枪稳-和平精英怎样才能压枪稳
下载浏览器app下载安装选择推荐
初中英语同步课文跟读APP推荐|免费下载高口碑跟读软件排行榜
4D采矿者官网在哪下载 最新官方下载安装地址
阅读app安卓版下载推荐
免费影视剧APP推荐
碎片人偶Vragmeet官网在哪下载 最新官方下载安装地址
儿子穿新中式现身大会堂 马斯克罕见用中文回应:他正在学习普通话
Elysium Above 履云录官网在哪下载 最新官方下载安装地址
好用的手环阅读app下载安装
名单曝光!库克、马斯克等将随团到访中国 黄仁勋不在其中
人声接近真人!OpenAI一口气更新三款超强语音AI
短视频软件推荐
短剧《情绪超市》剧情介绍
苹果macOS 27将优化界面设计并测试AI驱动的Safari标签页自动分组功能
《梦幻西游》出道人金价走势解析-云游道人影响解析
免费看电影的软件推荐
官姓可爱谐音网名女生(精选100个)
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc