上下文压缩层 · 从入门到精通
把 Headroom 研究透
Headroom 在 tool 输出、日志、RAG、文件到达 LLM 之前压缩它们——"同样的答案,零头的 token"。三形态:Library / Proxy / MCP,本地优先、可逆。本门户由 50 个 agent 并行研究官方文档 + 源码 + 对抗式复核而成,每条事实带来源与可信度标注。
00
压缩什么·省多少
入门先破除头条数字的误解,再选你的学习路线。
⚠️ 最重要的认知
省多少是内容依赖的,不是固定百分比。头条 "60-95%" 只适用 tool-heavy 的 JSON/日志/搜索/HTML;生产遥测里 fleet 中位压缩率只有 ~4.8%(多数流量是对话),重度 tool-use 会话才到 40-80%。它故意不碰用户消息、模型回复、代码(除非开 AST),跳过 <200 token 的 tool 输出。按内容类型的真实压缩带
| 内容类型 | 压缩器 | 典型压缩率 |
|---|---|---|
| JSON 数组(dict) | SmartCrusher | 83-95% |
| 构建/测试日志 | LogCompressor | 85-95% |
| 搜索结果 | SearchCompressor | 60-95% |
| git diff | DiffCompressor | 60-80%(非 40-60%) |
| 源代码 | CodeCompressor(AST) | 40-70%(需 [code]) |
| 纯文本 | LLMLingua / passthrough | 30-50% |
| 短对话 | — | 中位 4.8% |
三条学习路线
掌握度自测
💡 精度代价
不是"100% 准确"。实测 GSM8K/TruthfulQA 精度变化 ±0.000~+0.030,SQuAD/BFCL 97%。经典演示:100 条日志埋一个 FATAL,10,144→1,260 token(87.6%),4/4 答案仍答对。01
快速上手
入门Python 60 秒上手;TS 必须先跑 proxy;选对形态。
# PyPI 0.28.0, 需 Python >=3.10
pip install headroom-ai
from headroom import compress
from openai import OpenAI
result = compress(messages, model="gpt-4o") # 核心库自带,无需 proxy
client = OpenAI()
resp = client.chat.completions.create(model="gpt-4o", messages=result.messages)
print(f"Saved {result.tokens_saved} ({result.compression_ratio:.0%})")# 1) 先起 Python proxy(压缩管线在 Python)
pip install "headroom-ai[proxy]" && headroom proxy --port 8787
# 2) JS/TS 项目
npm install headroom-ai
import { compress } from 'headroom-ai';
const r = await compress(messages, { model:'gpt-4o', baseUrl:'http://localhost:8787' });
// camelCase: r.tokensSaved / r.compressionRatioheadroom proxy --port 8787
# 把客户端指向 proxy —— 零改代码
ANTHROPIC_BASE_URL=http://localhost:8787 claude # 无 /v1
OPENAI_BASE_URL=http://localhost:8787/v1 cursor # 有 /v1
curl http://localhost:8787/statsdocker pull ghcr.io/chopratejas/headroom:latest
docker run -p 8787:8787 ghcr.io/chopratejas/headroom:latest # proxy
docker run -p 8787:8787 ghcr.io/chopratejas/headroom:code # 带代码压缩决策流程图 · 选哪种形态
能改代码吗?→否Proxy 模式(设 base URL)
能·Python·框架框架集成 HeadroomChatModel/AgnoModel
能·Python·裸调Python Library compress()(最低延迟)
TS/NodeTS SDK + 必跑 Python proxy
MCP hostMCP server(compress/retrieve/stats)
Python extras —— 功能缺失多半是没装对应 extra
pip install "headroom-ai[all]" # 全部
pip install "headroom-ai[proxy]" # proxy + MCP + HTTP API
pip install "headroom-ai[code]" # tree-sitter AST 代码压缩
pip install "headroom-ai[ml]" # LLMLingua 文本压缩(拉 PyTorch,重)
pip install "headroom-ai[relevance]" # embedding 相关性打分[code] 缺→代码原样透传;[mcp] 缺→"MCP SDK not installed";[relevance] 缺→embedding tier 报错。02
Library / SDK
进阶Python 与 TypeScript 的关键差异——最大的坑是它们根本是两套模型。
⚠️ 最大认知
compress() 是 TS 独有的顶层用法。Python 包裹真实 client 调 create(),或用 simulate() 预览。TS 必须先跑 Python proxy(它 POST 给 proxy 压缩,不在进程内压)。from headroom import HeadroomClient, OpenAIProvider
client = HeadroomClient(
original_client=OpenAI(),
provider=OpenAIProvider(enable_prefix_caching=True),
default_mode="optimize", # audit|optimize|simulate
)
resp = client.chat.completions.create(model="gpt-4o", messages=[...],
headroom_keep_turns=5,
headroom_tool_profiles={"important_tool": {"skip_compression": True}})plan = client.chat.completions.simulate(model="gpt-4o", messages=[...])
print(plan.tokens_before, "->", plan.tokens_after, plan.savings_percent)
print(plan.waste_signals) # json_bloat/whitespace/dynamic_date/repetition —— 诊断金矿import { withHeadroom } from 'headroom-ai/openai';
const client = withHeadroom(new OpenAI(), { model:'gpt-4o', baseUrl:'http://localhost:8787' });
// create() 自动压缩; embeddings/responses.create() 原样透传✅ 源码级纠正
官方文档说 get_summary() 返回 avg_compression_ratio/total_cost_saved_usd——源码里没这两个键。实际返回 total_requests/total_tokens_before/after/saved/avg_tokens_saved/avg_cache_alignment/audit_count/optimize_count。这是官方文档自身的 bug。fallback:true 的隐性代价
TS
fallback:true:proxy 挂了就发原始未压缩消息——app 不崩,但静默丢掉所有节省且无报错。监控 compressed:false 发现 proxy 坏。生产建议 fallback:true + retries:2。03
Proxy 模式
入门进阶零改代码接管全流量——最广兼容,任意语言。
headroom proxy --host 0.0.0.0 --port 8080 \
--log-file /var/log/headroom.jsonl --budget 100.0 # 每日 USD 预算
流程图 · Proxy 端到端
客户端 base URL→:8787→Stage1 CacheAligner→Stage2 ContentRouter→压缩器→Stage3 IntelligentContext→转发 provider→原样返回
header
x-headroom-bypass:true 单请求旁路;记录到 ~/.headroom/proxy_savings.json,经 /stats 暴露。⚠️ HEADROOM_STORE_URL 默认临时目录
不设的话 CCR/TOIN 学习数据重启就丢。生产设绝对 sqlite 路径。HEADROOM_TELEMETRY=off 关匿名遥测。三种模式
| 模式 | 行为 | 用途 |
|---|---|---|
audit | 只观察+记录,不改 payload | 基线测量/生产监控 |
optimize | 应用安全确定性变换(默认) | 真省 |
simulate | 返回压缩计划但不调 API | 成本估算 |
04
Agent Wrap
进阶一条命令包住 12 个 AI 工具。权威细节在 GitHub README(文档站只文档了 4 个)。
headroom wrap claude|codex|copilot|cursor|aider|opencode|cline|continue|goose|openhands|openclaw|vibe
headroom unwrap <tool> # 仅支持 claude/copilot/codex/opencode/openclaw
headroom wrap claude --memory --code-graph --1m --tool-search # Claude 专属 flag
⚠️ 12 个工具 = 3 种机制
env 注入+spawn(aider/copilot/goose/openhands/vibe,会话级)· 写配置文件(opencode/cline/continue)· 特殊(openclaw 装插件;cursor 是手动——只启 proxy 打印 base URL 让你粘贴,不是真·一条命令)。unwrap 只支持 5 个持久化的工具。⚠️ 两个企业坑
① 企业 TLS 拦截(Zscaler)破坏 wrap → 窄口子 HEADROOM_TLS_STRICT=0 headroom proxy。② npm 装的没有 headroom CLI,wrap 只来自 pip install "headroom-ai[all]"。wrap 的手动等价
ANTHROPIC_BASE_URL=http://localhost:8787 claude
OPENAI_BASE_URL=http://localhost:8787/v1 <client>
headroom doctor # wrap 后验证路由05
MCP Server
进阶给任意 MCP host 三个工具:compress / retrieve / stats。
pip install "headroom-ai[mcp]"
headroom mcp install # 写入 Claude Code 配置(stdio)
claude # /mcp 验证
| 工具 | 作用 | 关键返回 |
|---|---|---|
headroom_compress | 按需压缩大 blob | compressed, hash(取回用), savings_percent, transforms |
headroom_retrieve | 按 hash 取回原文 | original_content 或 results(给 query 时), source(local/proxy) |
headroom_stats | 会话压缩统计 | compressions, tokens_saved, sub_agents, combined, proxy |
⚠️ 两个 TTL 陷阱
local 存储 1 小时,proxy 存储只 5 分钟。retrieve 先查 local 再回退 proxy;同一 hash 可能 local 活着但 proxy 已死。"Entry not found or expired" = TTL 到了。💎 query 参数
headroom_retrieve({hash, query}) 在单个 hash 缓存内做 BM25 搜索,只返回匹配项——压 5000 行 grep,之后只按词取回相关行,不把整块拉回 context。流程图 · MCP 三种拓扑
仅按需?→[mcp] + mcp install + claude
全流量自动?→[proxy] + headroom proxy + ANTHROPIC_BASE_URL=...:8787
异机/Docker?→mcp install --remote http://host:8787/mcp
proxy 与 MCP 不重复压缩:proxy 在 HTTP 层压模型没见过的,MCP 在模型收到内容后压。
命令 / API 速查(实时搜索)
全部 CLI、SDK、MCP 工具速查——输入即过滤。
共 0 条
| 命令 / API | 别名 | 作用 | 分类 |
|---|
06
压缩引擎内部
精通三阶段 pipeline + SmartCrusher 的统计式压缩。
💡 三阶段 pipeline
每个请求流经三个独立、可跳过、优雅降级的阶段,任一失败都返回原内容不变。① CacheAligner(稳前缀,亚毫秒)② ContentRouter→压缩器(节省大头,1-50ms)③ IntelligentContext(适配窗口)。调优先调 SmartCrusher。流程图 · ContentRouter 分派
raw 内容→检测信号
file:line:content⇒SearchCompressor
JSON 数组⇒SmartCrusher
源代码⇒CodeAwareCompressor(tree-sitter)
否则散文⇒TextCompressor
SmartCrusher:统计式,不是截断
流程图 · SmartCrusher 5 维打分(1000 项→~50 项)
是 error?⇒永久保留(绝不丢)
首N/末N?⇒保留
>2σ 异常?⇒保留
BM25 相关?⇒保留 top-K
否则⇒统计采样
⚠️ max_items 是软上限
preserve_errors=True 让 error 项全留(加性),200 个 error 会远超 max_items。error-heavy payload 压得远不如 70-95% 头条。min_tokens_to_crush=200 以下不压;preserve_fields=['error','warning','failure'] 是硬编码关键词机制(别和 IntelligentContext 的 TOIN 学习式检测混)。✅ 纠正:不是 "Kompress-v2-base"
README badge 的 HF 模型名,文档实际把统计文本路径描述为 LLMLingua;内容检测用 Magika(Google 分类器)。别传播 Kompress-v2-base 当事实。💡 缓存对齐叠乘
SmartCrusher 砍 100K→20K(80%),稳定前缀再命中 Anthropic 90% 读折扣 → 有效节省 96.2%。硬门槛:OpenAI 前缀 ≥1024 token、Anthropic 首写 25% 溢价、Google ≥32,768 token。07
CCR 可逆压缩
精通Compress-Cache-Retrieve——压得狠也不丢数据。
💡 放心压狠
原文按 hash 存本地(LRU/SQLite),注入 headroom_retrieve 让 LLM 按需拉全量(~1ms)或用 query BM25 搜索。这就是 CCR 的全部意义。⚠️ 无损的真实边界
LRU + TTL:storeMaxEntries(默认 1000)、storeTtlSeconds(默认 3600s)。>1000 次压缩、>1h 后引用、或 proxy 重启(缓存本地内存)→ 原文可能没了。长会话调大这两个值。三个 CCR 组件粒度不同 + 两个工具名
- SmartCrusher 缓存原始 JSON 数组 → 标记 hash=abc123
- ContentRouter 按策略缓存原始内容
- IntelligentContext 缓存被丢弃的整条消息 → 引用
ccr_retrieve(注意:工具输出叫headroom_retrieve,消息级叫ccr_retrieve,两个名字!)
--no-ccr-expansion vs --no-ccr-responses。客户端透明:retrieve 往返你的日志/计费看不到,在 proxy 层调试。TOIN 反馈:每次取回训练打分,要隔离设 feedbackEnabled:false。08
配置全参考
精通六因子评分、三种"关"、优先级链。
⚠️ 是六因子,不是两个
ScoringWeights 自动归一化到 1.0,但只设 2 个会把其余 4 个归零。要调一个又保留其余,必须重述全部六个。| 因子 | 默认 | 含义 |
|---|---|---|
| toin_importance | 0.25 | TOIN 学的 CCR 取回率(跨用户) |
| recency | 0.20 | 从末尾指数衰减 |
| semantic_similarity | 0.20 | 与近期上下文 embedding 相似 |
| error_indicator | 0.15 | TOIN 学的字段语义,非关键词 |
| forward_reference | 0.15 | 被后续消息引用次数 |
| token_density | 0.05 | unique/total token |
三种"关"的区别
| 机制 | 怎么关 | 作用 |
|---|---|---|
| audit 模式 | headroom_mode="audit" | 只观察不改 |
| passthrough | proxy --no-optimize | 全关优化 |
| 语义缓存 | enable_semantic_cache=False / --no-cache | query 级去重(别和 cache_optimizer 混) |
⚠️ 配置优先级 + 模型推断
通用:defaults → env → SDK 构造器 → 每请求覆盖(后者赢)。未知模型按名推断:*opus*→200K、gpt-4o*→128K。fine-tune ft:gpt-4o:* 自动继承 gpt-4o 128K,限额不同必须在 models.json 覆盖。CacheAligner Python dynamic_patterns vs TS datePatterns——跨语言非 1:1。09
框架集成
进阶精通LangChain / LiteLLM / Agno / Strands / Vercel —— 每个一行接入。
pip install "headroom-ai[langchain]"
from headroom.integrations import HeadroomChatModel
llm = HeadroomChatModel(ChatOpenAI(model="gpt-4o")) # 像原 model 一样用
print(llm.get_metrics()) # {'tokens_saved':12500,'savings_percent':45.2,'requests':50}
# 另有: HeadroomChatMessageHistory(记忆) / HeadroomDocumentCompressor(检索,k=50→10) / wrap_tools_with_headroom(tool)import litellm
from headroom.integrations.litellm_callback import HeadroomCallback
litellm.callbacks = [HeadroomCallback()] # 一次注册,覆盖 100+ provider
litellm.completion(model="bedrock/claude-sonnet", messages=[...]) # 任意 provider 串都自动压pip install "headroom-ai[agno]" agno
from headroom.integrations.agno import HeadroomAgnoModel, HeadroomPostHook
model = HeadroomAgnoModel(OpenAIChat(id="gpt-4o"))
agent = Agent(model=model, post_hooks=[HeadroomPostHook(token_alert_threshold=10000)])
# ⚠️ 多会话服务器必须 model.reset() 否则 metrics 跨对话泄漏; async 方法名 aresponse# 两层可叠加(正交,同用最省)
model = HeadroomStrandsModel(wrapped_model=model) # 压全对话
hooks = HeadroomHookProvider(compress_tool_outputs=True) # SmartCrusher 压单个 tool 结果
agent = Agent(model=model, hooks=[hooks])// ⚠️ 硬依赖本地 Python proxy(#1 坑),先 headroom proxy
import { withHeadroom } from 'headroom-ai/vercel-ai';
const model = withHeadroom(openai('gpt-4o')); // === wrapLanguageModel + headroomMiddleware()决策流程图 · 选集成入口
是 LiteLLM?→注册 HeadroomCallback
TS/Vercel?→Python proxy + withHeadroom
Python 框架?→包 model + (tool 输出是主成本则再加 tool 层)
改不了代码?→ASGI CompressionMiddleware
⚠️ LangGraph 自定义图
StateGraph 里压缩是手动节点:必须插 create_compress_tool_messages_node(从更深路径 headroom.integrations.langchain 导入)并接边 tools→compress→agent。忘了 tool 输出就不压。10
记忆与 learn
精通三个独立机制 + headroom learn 从失败会话学习。
⚠️ premise 纠正
不存在"跨 Claude/Codex/Gemini 的自动去重共享 store"(文档里 dedup/merge/Gemini 一次都没出现)。实际是三个不相关机制。| 机制 | 持久性 | 用途 |
|---|---|---|
| SharedContext | 内存 only,TTL 3600s,LRU 100 | 单进程 agent 间 handoff;get() 默认返回压缩版,要原文传 full=True |
| MCP CompressionStore | hash 寻址 | 相同内容同 hash = 字节级去重(非语义) |
| HierarchicalMemory | 持久 SQLite+HNSW+FTS5,无 TTL | 跨会话跨 agent 召回该用这个 |
⚠️ dedup 缺口
事实变更靠手动 supersede。LLM 提取"在 Anthropic 工作"而你没对旧的"在 Google 工作"调 supersede,则两条都成为当前记忆——矛盾静默并存。headroom learn
✅ 源码级纠正
文档说写 CLAUDE.md+MEMORY.md,源码默认写 CLAUDE.local.md(个人、gitignored)。信源码/wiki。headroom learn # dry-run,看建议不改
headroom learn --apply # 写入(默认 CLAUDE.local.md)
headroom learn --apply --target CLAUDE.md # 显式写团队共享
⚠️ 三个坑
① 自动迁移可能 删你的 CLAUDE.md(若该文件只有 Headroom 块)。② 不自动加 .gitignore,你得自己加。③ re-run 是合并不是替换,真要重置手删 marker 块。无 API key 也能跑(shell out 到 CLI)。11
Benchmark·成本·部署·排障
进阶精通别夸大数字;判断值不值;排障树。
决策流程图 · 该引用哪个压缩数字
特定 tool-heavy 负载?→83-94%(构建日志 93.9%/JSON 90.6%)
混合真实套件(含代码)?→聚合 66.1%(代码/grep 0% 拖低)
通用/对话流量?→中位 4.8% / 均值 11.3%,重 tool-use 40-80%
💡 值不值(成本/延迟)
中/大 JSON(100-1K 项):压缩 189-2012ms 但 LLM 省 261-2969ms → 净 +72~+957ms 且每 1K 请求省 $26-297(vs Sonnet)。贵模型(Opus)收益放大。12 场景 11 个净正。流程图 · 为什么没压缩(排障)
mode 是 optimize?→含 tool 输出?→≥200 token 且数组 ≥5 项?→可压(JSON)vs 不可压(代码/grep)?→仍 0?DEBUG + simulate() 看 transforms_applied
多数"0 压缩"是设计如此(代码透传保正确性、小 payload 跳过)。
错误处理 & 安装排障
压缩失败(坏 JSON/不可压/缺依赖)→ 不抛异常,原文透传 + WARNING。LLMLingua OOM → RuntimeError(唯一硬失败)。TS 够不到 proxy → HeadroomConnectionError。proxy 起不来 → 端口占用(
lsof -i :8787)或缺依赖。validate_setup() 报存储打不开 → 修权限或用 sqlite:///:memory:。编译错(需 C++11)→ build-essential / xcode-select --install。12
术语 · 行动清单
入门精通深入浅出术语卡 + 精通 checklist。
术语表
精通行动清单
融会贯通:最佳实践(可复制为 prompt)
13
附录:核实方法
📋怎么研究的、纠正了什么、诚实声明。
研究方法
- 官方文档 + 源码:45 个 agent(14 领域 × 2 轮 map + 对抗 verify)抓 headroom-docs.vercel.app + github.com/headroomlabs-ai/headroom。产出 320 finding、195 示例、72 流程图、15 对抗判决。
- llms-full.txt(6696 行)5 个 agent 蒸馏成 17 主题。
- 基线:PyPI 0.28.0 / npm 0.22.4 / Apache-2.0,拉取 2026-06-30。由
deep-dive-portalskill 驱动,双 workflow 并行 ~50 agent。
对抗复核纠正的事实
| 声明 | 事实(源码/文档核实) |
|---|---|
| 87%/100%/6 algorithms 头条 | 编造。官方 60-95%;3 核心压缩器;精度 ±0.000~+0.030 |
| git diff 40-60% | 实为 60-80%(DiffCompressor) |
| 文本模型 Kompress-v2-base | 实为 LLMLingua;检测用 Magika |
| get_summary() 返回 avg_compression_ratio | 源码无此键(官方文档自身 bug) |
| headroom learn 写 CLAUDE.md | 源码默认写 CLAUDE.local.md |
| 跨 Claude/Codex/Gemini 自动去重 | 不存在;实为 SharedContext + MCP hash + 手动 supersede |
⚠️ 诚实声明
个别领域第一轮抓取受网络策略限制,但 round-2 + 源码核实补齐。标 ⚠️纠正 处为文档与源码冲突已采源码事实,🔶 参数以你当前版本为准。基线 headroom 0.28.0(2026-06-30)。官方源:headroom-docs.vercel.app · github.com/headroomlabs-ai/headroom · pypi.org/project/headroom-ai。