Headroom 深度解析:AI Agent 的上下文压缩层——Compress-Cache-Retrieve 如何实时减少 60-95% Token 消耗

目录

  1. 问题的根源:Agent 循环中的 Token 通胀
  2. Headroom 是什么
  3. 核心原理:CCR 可逆压缩
  4. 内容感知压缩器:三把手术刀
  5. Pipeline 生命周期:从输入到发送
  6. 三种集成模式:Library / Proxy / Agent Wrap
  7. 输出 Token 缩减:砍掉模型写回来的浪费
  8. 跨 Agent 记忆与失败学习
  9. 实测数据:Benchmark 与真实负载
  10. 与竞品对比:为什么是 Headroom
  11. 快速上手:60 秒部署
  12. 团队与企业部署
  13. 局限性与适用场景
  14. 总结

问题的根源:Agent 循环中的 Token 通胀

如果你每天都在用 Claude Code、Codex 或 Cursor 写代码,你一定见过这种场景:

Agent 读取一个 500 行的文件 → 返回 3000 tokens
Agent 执行一个 shell 命令 → 输出 800 行日志 → 返回 12000 tokens
Agent 搜索代码库 → 返回 100 条匹配结果 → 返回 18000 tokens

然后这些输出全部塞进下一轮的上下文窗口。10 轮对话之后,你的上下文已经膨胀到 10 万 tokens,其中一半以上是冗余信息——格式化空白、重复的 JSON 结构、不会被用到的日志行、已经看过的代码片段。

痛点很清楚

  • 费用:Claude Opus 输入 $15/MTok,输出 $75/MTok。Agent 一次复杂任务轻松烧掉 $5-20
  • 延迟:上下文越大,模型推理越慢
  • 质量:冗余信息挤占有用的上下文窗口,模型注意力被稀释

这就是 Headroom 要解决的问题。


Headroom 是什么

Headroom 是一个本地运行的上下文压缩层,部署在你的 Agent 和 LLM Provider 之间。它在数据送入模型之前进行内容感知的可逆压缩,在不丢失关键信息的前提下,将 Token 消耗降低 60-95%(JSON 数据)或 15-20%(代码 Agent)。

一句话:同样的答案,极少的 Token。

 你的 Agent / 应用
   (Claude Code, Cursor, Codex, LangChain, 你自己的代码…)
        │   prompts · tool outputs · logs · RAG results · files
        ▼
  ┌────────────────────────────────────────────────────┐
  │  Headroom   (本地运行 — 数据不离开你的机器)            │
  │  ────────────────────────────────────────────────  │
  │  CacheAligner  →  ContentRouter  →  CCR            │
  │                    ├─ SmartCrusher   (JSON)        │
  │                    ├─ CodeCompressor (AST)         │
  │                    └─ Kompress-v2-base (text, HF)  │
  │                                                    │
  │  Cross-agent memory  ·  headroom learn  ·  MCP     │
  └────────────────────────────────────────────────────┘
        │   压缩后的 prompt  +  检索工具
        ▼
  LLM Provider  (Anthropic · OpenAI · Bedrock · …)

Headroom 的核心设计原则:

  • 本地优先(Local-first):所有压缩在本地完成,数据不离开你的机器
  • 内容感知(Content-aware):不同类型的数据用不同的压缩策略,JSON 走结构压缩,代码走 AST,自然语言走模型
  • 可逆(Reversible):原始数据被缓存,LLM 可以通过 headroom_retrieve 工具按需取回
  • 零代码侵入:Proxy 模式下不需要修改任何应用代码

核心原理:CCR 可逆压缩

CCR 是 Headroom 最核心的设计——Compress(压缩)→ Cache(缓存)→ Retrieve(检索)

为什么需要"可逆"?

传统压缩(如 gzip、上下文截断)有一个致命问题:信息丢失是不可逆的。一旦你压缩了,LLM 就永远看不到原始内容。如果压缩过程中丢失了关键细节——比如一个错误堆栈中的具体行号,或者 JSON 中某个嵌套字段的值——模型就会给出错误的答案。

Headroom 的 CCR 解决了这个问题:

Compress

Cache

Retrieve
LLM 需要时主动取回

原始数据

压缩表示(送 LLM)

本地存储

工作流程

  1. Compress:内容路由器检测数据类型,选择合适的压缩器生成紧凑表示,发送给 LLM
  2. Cache:原始数据以结构化形式存储在本地(内存 + 可选持久化),带 TTL 自动过期
  3. Retrieve:LLM 在需要时调用 headroom_retrieve MCP 工具,按 ID 或 key 取回原始内容

这相当于给了模型一个"需要时再展开"的能力——大多数内容压缩后已经足够,偶尔需要完整信息时,模型可以主动获取。

与 Prompt Caching 的配合

Headroom 的 CacheAligner 模块专门处理 Provider 的 KV Cache 问题。核心挑战在于:

  • Anthropic/OpenAI 的 Prompt Cache 依赖前缀的字节级匹配
  • 如果你修改了历史消息的任何部分,整个 Cache 全部失效

CacheAligner 的做法是仅压缩新增内容(Live-zone Compression)——冻结的历史前缀原封不动,只压缩最新一轮的 tool output。这样 Provider 的 Prompt Cache 依然命中,同时新内容也被压缩。

关键洞察:Headroom 不做"丢掉历史消息"这种粗暴的上下文管理。历史全部保留,只是压缩了表示。


内容感知压缩器:三把手术刀

Headroom 不是"一个压缩算法打天下"。它的 ContentRouter 先识别数据类型,然后分发给专门的压缩器。

SmartCrusher:JSON 的终结者

Agent 最常见的上下文膨胀源是什么?JSON。Tool outputs、API responses、RAG search results——几乎全是 JSON。

SmartCrusher 利用 JSON 的结构冗余进行压缩:

  • 数组去重与摘要:100 条相似的搜索结果 → 保留结构模板 + 差异字段
  • 嵌套展平:深层嵌套的对象 → 扁平化的 key-path 表示
  • 类型感知:区分枚举值、自由文本、数字范围,对每种类型使用不同的紧凑表示
  • Schema 推断:自动推断 JSON schema,用 schema + values 替代重复的 key-value 对

实际效果:100 条代码搜索结果,17,765 tokens → 1,408 tokens(压缩 92%)。

压缩前:
{"file": "src/auth/login.ts", "line": 42, "content": "export async function login...", "score": 0.95}
{"file": "src/auth/login.ts", "line": 58, "content": "  const user = await db...", "score": 0.93}
... (100 条)

压缩后:
schema: {file, line, content, score}
items: [
  ["src/auth/login.ts", 42, "export async function login...", 0.95],
  ["src/auth/login.ts", 58, "  const user = await db...", 0.93],
  ...
]

CodeCompressor:AST 感知的代码压缩

代码不是纯文本——它有结构。注释、空行、格式化空格、冗余的 import、类型注解的重复……这些都浪费 Token。

CodeCompressor 使用 Tree-sitter 解析 AST,支持 7 种语言(Python、JS/TS、Go、Rust、Java、C/C++、Perl):

  • 去除注释和文档字符串(保留关键的 docstring 第一行)
  • 压缩空白和格式化
  • 移除未使用的 import
  • 函数体摘要:对于足够简单的函数(getter/setter/单行委托),用签名 + 一行摘要替代完整函数体
  • 保留语义完整性:不改变 AST 结构,确保压缩后的代码在语义上等价

Kompress-v2-base:自然语言的智能压缩

对于日志、错误消息、RAG chunk、对话历史等自然语言内容,Headroom 使用自己训练的模型 Kompress-v2-base(发布在 HuggingFace)。

这是一个专门在 Agent 工作负载上训练的压缩模型:

  • 训练数据:Agent 对话轨迹(tool outputs, error logs, search results, conversation turns)
  • 压缩策略:去除冗余表述、合并重复信息、保留关键实体和数值
  • 本地运行:模型下载到本地,不需要外部 API 调用

图像压缩

Headroom 还包含一个训练过的 ML 路由器的图像压缩管道,可将发送给视觉模型的图像减少 40-90%。


Pipeline 生命周期:从输入到发送

Headroom 暴露了一个稳定的请求生命周期,无论是 compress() 库调用还是 Proxy 模式,都遵循同一个 Pipeline:

Setup

Pre-Start

Post-Start

Input Received

Input Cached

Input Routed

Input Compressed

Input Remembered

Pre-Send

Post-Send

Response Received

每个阶段都可以通过 Pipeline Extensions 进行定制:

from headroom import compress, on_pipeline_event

@on_pipeline_event("Input Compressed")
def log_compression(event):
    print(f"Saved {event.savings_tokens} tokens ({event.savings_pct:.1%})")

result = compress(messages, model="claude-sonnet-5-20251001")

这种设计让核心编排逻辑保持干净,同时保留了充分的扩展性。


三种集成模式:Library / Proxy / Agent Wrap

Headroom 提供三种集成方式,从轻到重,按需选择。

1. Library 模式:代码内嵌

最适合已有 Python/TypeScript 应用:

from headroom import compress

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "..."},
    # ... 大量 tool results
]

compressed = compress(messages, model="claude-sonnet-5-20251001")
# compressed 是压缩后的 messages,直接发给 LLM
import { compress } from 'headroom-ai';

const compressed = await compress(messages, { model: 'claude-sonnet-5-20251001' });

SDK 集成也很方便:

# Anthropic SDK
from headroom import withHeadroom

client = withHeadroom(Anthropic())

# LangChain
from headroom.langchain import HeadroomChatModel

llm = HeadroomChatModel(your_llm)

2. Proxy 模式:零代码侵入

常用启动参数
headroom proxy \
  --port 8787 \                        # 监听端口(默认 8787)
  --anthropic-api-url <URL> \          # 自定义上游 API 地址
  --mode cache \                       # 缓存优先模式(默认,最大化前缀缓存命中)
  --mode token \                       # Token 优先模式(更激进压缩)
  --target-ratio 0.4 \                 # 文本压缩率(越低越激进,默认自动)
  --code-aware \                       # 启用 AST 代码压缩
  --memory \                           # 启用跨会话持久记忆
  --code-graph \                       # 启用代码库智能索引
  --log-file ~/.headroom/proxy.log \   # 自定义请求日志路径(默认自动写入 ~/.headroom/logs/proxy.log)
  --log-messages \                     # 记录完整消息内容(含敏感数据,调试用)
  --rpm 120 \                          # 每分钟请求数限制
  --tpm 200000                         # 每分钟 Token 限制

启动一个本地 HTTP 代理,将所有 LLM 请求路由过去:

headroom proxy --port 8787

然后设置环境变量:

export ANTHROPIC_BASE_URL=http://localhost:8787
export OPENAI_BASE_URL=http://localhost:8787

任何使用标准 Anthropic/OpenAI SDK 的应用都会自动受益,一行代码都不用改

Proxy 还附带一个实时仪表盘:

headroom dashboard

使用非 Anthropic 后端(如 DeepSeek)

如果你的 Claude Code 配置了第三方 Anthropic 兼容 API,需要指定上游地址。

启动命令
headroom proxy --port 8787 --anthropic-api-url https://api.deepseek.com/anthropic

或用环境变量:

ANTHROPIC_TARGET_API_URL=https://api.deepseek.com/anthropic headroom proxy --port 8787

完整架构:

Claude Code
ANTHROPIC_BASE_URL=
localhost:8787

Headroom Proxy
127.0.0.1:8787
压缩 → 缓存 → 转发

DeepSeek API
api.deepseek.com
/anthropic

3. Agent Wrap 模式:一键集成

针对主流 AI Coding Agent 的深度集成:

headroom wrap claude      # Claude Code
headroom wrap codex       # OpenAI Codex
headroom wrap cursor      # Cursor
headroom wrap copilot     # GitHub Copilot CLI
headroom wrap aider       # Aider

headroom wrap 做了三件事:

  1. 启动本地 Proxy
  2. 安装 Serena(语义代码导航 MCP 工具)
  3. 启动被包装的 Agent,配置其通过 Proxy 发送请求

撤销也很简单:

headroom unwrap claude

模式选择建议

场景 推荐模式
自己写的 Python/TS 应用 Library
使用现成 Agent 工具(Claude Code / Codex 等) Agent Wrap
多语言 / 无法修改代码 / 需要统一管理 Proxy
MCP 客户端 MCP Server(headroom mcp install

输出 Token 缩减:砍掉模型写回来的浪费

前面的所有内容都是关于压缩输入。但输出 Token 同样烧钱——在 Opus 级别的模型上,输出 Token 的价格是输入的 5 倍

而且大量输出是浪费:

  • “好的,让我来帮你……”(开场白)
  • 重新打印你已经看过的代码
  • 对于常规步骤(读一个文件、跑一个通过的测试)的深度"思考"

Headroom 在 Proxy 层面提供了输出 Token 缩减(不需要修改任何代码):

Verbosity Steering

在系统提示末尾追加一个简短的"简洁指令"。之所以放在末尾而不是修改系统提示开头,是为了不影响 Prompt Cache 命中(Cache 依赖前缀匹配)。

export HEADROOM_OUTPUT_SHAPER=1
headroom proxy --port 8787

Effort Routing

智能判断当前 turn 的复杂度:

  • 常规步骤(文件读取后继续、通过的测试):降低 reasoning effort
  • 新问题、错误:保持完整 effort

支持 Anthropic(thinking.budget_tokens)和 OpenAI(reasoning_effort)。

自适应学习

headroom learn --verbosity 会分析你过去的会话,自动学习你偏好什么样的简洁程度:

headroom learn --verbosity            # 预览(dry run)
headroom learn --verbosity --apply    # 应用,Proxy 立即生效

设计哲学:用户不是"说"自己要什么简洁程度——他们是"展示"出来的。当你反复打断长回复、或者在读完之前就继续操作时,已经表明了你的偏好。

如何度量输出节省

因为输出节省是"反事实"的(你看不到模型"本来会"写什么),Headroom 采用对照组估计

export HEADROOM_OUTPUT_HOLDOUT=0.1   # 10% 的对话不压缩,作为对照组
headroom output-savings
# Reduction: 31.7%  (95% CI 27.7% … 35.7%)   [measured]

不是拍脑袋的数字,而是带有置信区间的统计估计。


跨 Agent 记忆与失败学习

Cross-Agent Memory

如果你同时使用 Claude Code 和 Codex,它们各自拥有独立的上下文。但你的代码库、项目结构、最近的改动——这些信息是共通的。

Headroom 提供了一个跨 Agent 共享记忆存储:

from headroom import SharedContext

ctx = SharedContext()
ctx.put("project_structure", {...})    # Claude 写入
# ... 切换到 Codex ...
struct = ctx.get("project_structure")  # Codex 读取

自动去重 + Agent 来源标记,确保共享信息不会重复注入。

headroom learn:从失败中学习

这是 Headroom 最独特的功能之一——挖掘失败的 Agent 会话,自动生成改进指令:

headroom learn

工作流程:

  1. 扫描 Agent 会话历史,识别失败的交互(工具调用错误、循环、错误答案)
  2. 分析失败模式(缺失的上下文、不完整的指令、被忽略的文件)
  3. 生成纠正指令,写入 CLAUDE.local.md(gitignored)或 CLAUDE.md(团队共享)
headroom learn --target CLAUDE.md    # 写入团队共享文件
# 或
headroom learn                       # 默认写入 CLAUDE.local.md(个人,不提交)

支持的 Agent:Claude Code、Codex、Gemini。


实测数据:Benchmark 与真实负载

真实 Agent 工作负载

工作负载 压缩前 压缩后 节省
代码搜索(100 条结果) 17,765 1,408 92%
SRE 事件调试 65,694 5,118 92%
GitHub Issue 分类 54,174 14,761 73%
代码库探索 78,502 41,254 47%

准确率保持(标准 Benchmark)

Benchmark 类别 N Baseline Headroom 差异
GSM8K 数学 100 0.870 0.870 ±0.000
TruthfulQA 事实性 100 0.530 0.560 +0.030
SQuAD v2 问答 100 97% 19% 压缩
BFCL 工具调用 100 97% 32% 压缩

核心结论:压缩不牺牲准确率。在个别基准(TruthfulQA)上甚至有轻微提升——可能是因为去除了噪声信息后模型注意力更集中。

复现命令:

python -m headroom.evals suite --tier 1

与竞品对比:为什么是 Headroom

方案 范围 部署 本地 可逆
Headroom 全部上下文 — tools, RAG, logs, files, history Proxy · Library · Middleware · MCP
RTK CLI 命令输出 CLI wrapper
lean-ctx Tool output, files, shell, history Proxy · Library · Middleware · MCP · CLI
Compresr, Token Co. 发送到其 API 的文本 托管 API 调用
OpenAI Compaction 对话历史 Provider-native

Headroom 的几个独特优势:

  1. 全内容类型覆盖:不是只压缩对话历史或 CLI 输出,而是所有内容类型
  2. 本地运行:数据不离开你的机器,企业安全友好
  3. 可逆压缩:CCR 确保关键信息可检索——这是 lean-ctx 之外所有方案都不具备的
  4. 跨 Agent 记忆:Claude Code 和 Codex 之间共享上下文
  5. 失败学习headroom learn 是被动压缩之外的主动改进

注:Headroom 内置了 RTK 和 lean-ctx 的二进制文件用于 shell 输出重写,通过 HEADROOM_CONTEXT_TOOL 切换或关闭。


快速上手:60 秒部署

安装

# Python CLI(推荐)
uv tool install --python 3.13 "headroom-ai[all]"

# 或
pip install "headroom-ai[all]"

# TypeScript SDK(仅库模式,无 CLI)
npm install headroom-ai

选择模式

# 一键部署 + Agent 配置
headroom deploy

# 包装 Claude Code
headroom wrap claude

# 启动 Proxy
headroom proxy --port 8787

# 或 Python 库
from headroom import compress

验证

headroom doctor       # 健康检查
headroom perf         # 性能报告
headroom dashboard    # 实时节省仪表盘(需要 Proxy 运行中)

更新

headroom update               # 自动检测安装方式并升级
headroom update --check       # 只看最新版本,不升级

MCP 客户端配置

对于 Codex 等不能继承 Shell PATH 的 MCP 客户端:

command -v headroom   # 获取绝对路径
[mcp_servers.headroom]
command = "/Users/you/.local/bin/headroom"
args = ["mcp", "serve"]

团队与企业部署

Headroom OSS 面向个人开发者:在自己的笔记本上运行,几分钟内开始节省 Token——免费、本地优先、数据不外传。

但在整个工程团队中使用是另一回事:

  • 共享的、始终在线的部署
  • 集中化配置和版本管理
  • 全组织节省仪表盘
  • SSO 和访问控制
  • 气隙环境 / VPC 部署

Headroom Labs 提供团队版(自托管 + 支持,或全托管)。

OSS 永远保持 Apache 2.0 开源。托管版只是为需要企业级部署和支持的团队准备的。


局限性与适用场景

适合你,如果你……

  • 每天使用 AI Coding Agent,想要无痛节省 Token
  • 同时使用多个 Agent(Claude Code + Codex + Cursor),需要共享记忆
  • 需要可逆压缩——完整原文在 TTL 内可检索
  • 数据不能离开本地(企业安全 / 合规要求)

可能不适合,如果你……

  • 只使用单一 Provider 的原生上下文压缩,且不需要跨 Agent 记忆
  • 在严格沙箱环境中工作,无法运行本地进程
  • 主要使用微调模型,上下文长度本身就很短

其他注意事项

  • CPU 要求(x86/x86_64):ONNX 功能(Magika 内容检测、嵌入相关性)需要 AVX2 指令集。不支持 AVX2 的主机(部分 Docker/QEMU 设置、旧云 VM)会自动回退到非 ONNX 路径(BM25 相关性、启发式检测),不会崩溃
  • Apple Silicon:原生支持,无需 AVX2
  • Python 版本:需要 3.10+。如果想在仪表盘中看到 $ Saved 数字(需要 LiteLLM),使用 3.13——3.14+ 不支持 LiteLLM

总结

Headroom 解决了一个越来越痛的问题:随着 AI Agent 变得越来越复杂、越来越自主,它们消耗的上下文也在指数增长。每一次工具调用、每一个文件读取、每一条日志,都变成了下一轮上下文的组成部分。

传统的做法是截断历史、限制输出长度——但这些是"砍掉",不是"压缩"。信息丢失了,模型回答的质量也差了。

Headroom 的思路不同:

  • 不丢信息,压缩表示:CCR 让 LLM 在需要时可以取回原文
  • 内容感知:JSON、代码、自然语言——各走各的压缩管道
  • 本地优先:数据安全,延迟低,无外部依赖
  • 零侵入:Proxy 模式下不需要修改任何代码
  • 开源:Apache 2.0,自由使用

如果你的团队每月在 LLM Token 上有可观开支,Headroom 是目前最完整的上下文压缩方案——不仅仅是"省 Token",而是通过更智能的上下文管理,让 Agent 工作得更好。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐