<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>上下文工程 on KnightLi的博客</title>
        <link>https://knightli.com/tags/%E4%B8%8A%E4%B8%8B%E6%96%87%E5%B7%A5%E7%A8%8B/</link>
        <description>Recent content in 上下文工程 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sat, 06 Jun 2026 22:22:56 +0800</lastBuildDate><atom:link href="https://knightli.com/tags/%E4%B8%8A%E4%B8%8B%E6%96%87%E5%B7%A5%E7%A8%8B/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Headroom 怎么用？给 AI Agent 省上下文的本地压缩层</title>
        <link>https://knightli.com/2026/06/06/headroom-ai-context-compression/</link>
        <pubDate>Sat, 06 Jun 2026 22:22:56 +0800</pubDate>
        
        <guid>https://knightli.com/2026/06/06/headroom-ai-context-compression/</guid>
        <description>&lt;p&gt;&lt;code&gt;chopratejas/headroom&lt;/code&gt; 是一个给 AI Agent 做上下文压缩的工具。它解决的问题很现实：Agent 一边跑命令、一边读日志、一边搜索代码、一边塞 RAG 片段，很快就会把上下文窗口填满，成本和延迟一起上来。&lt;/p&gt;
&lt;p&gt;Headroom 的思路是：在内容进入 LLM 之前，先把工具输出、日志、文件、RAG 片段和会话历史压缩一遍。README 里写的目标很直接：减少 &lt;code&gt;60-95%&lt;/code&gt; token，同时尽量保持回答质量。&lt;/p&gt;
&lt;h2 id=&#34;它解决什么问题&#34;&gt;它解决什么问题
&lt;/h2&gt;&lt;p&gt;现在很多 Agent 工具不是模型不够聪明，而是上下文太脏：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt;、&lt;code&gt;rg&lt;/code&gt;、日志查询一次返回几百上千行；&lt;/li&gt;
&lt;li&gt;RAG 检索片段重复、冗余、格式混乱；&lt;/li&gt;
&lt;li&gt;JSON、stack trace、SQL 结果里有大量低价值字段；&lt;/li&gt;
&lt;li&gt;多轮调试后，旧输出占着上下文不走；&lt;/li&gt;
&lt;li&gt;Claude Code、Codex、Cursor、Aider 等工具各自维护上下文，难以共享记忆。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Headroom 做的是“进入模型前的清洁工”。它不替代 LLM，也不替代 RAG，而是在 LLM 前面加一层压缩、路由、缓存和可回溯检索。&lt;/p&gt;
&lt;h2 id=&#34;核心能力&#34;&gt;核心能力
&lt;/h2&gt;&lt;p&gt;从 README 看，Headroom 主要有几种使用形态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Library：在 Python 或 TypeScript 里直接调用 &lt;code&gt;compress(messages)&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;Proxy：通过 &lt;code&gt;headroom proxy --port 8787&lt;/code&gt; 做 OpenAI-compatible 代理；&lt;/li&gt;
&lt;li&gt;Agent wrap：用 &lt;code&gt;headroom wrap claude|codex|cursor|aider|copilot&lt;/code&gt; 包一层现有 Agent；&lt;/li&gt;
&lt;li&gt;MCP Server：提供 &lt;code&gt;headroom_compress&lt;/code&gt;、&lt;code&gt;headroom_retrieve&lt;/code&gt;、&lt;code&gt;headroom_stats&lt;/code&gt; 给 MCP 客户端使用；&lt;/li&gt;
&lt;li&gt;Cross-agent memory：让 Claude、Codex、Gemini 等工具共享本地记忆并自动去重；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;headroom learn&lt;/code&gt;：从失败会话里挖经验，写入 &lt;code&gt;CLAUDE.md&lt;/code&gt; 或 &lt;code&gt;AGENTS.md&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;Reversible compression：原文不删除，需要时可以通过检索工具取回。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这几个形态很关键。它不是只能嵌入代码里的 SDK，也不是只能当代理。你可以从最轻的 wrap 模式开始试，再决定要不要接到自己的应用里。&lt;/p&gt;
&lt;h2 id=&#34;它怎么压缩&#34;&gt;它怎么压缩
&lt;/h2&gt;&lt;p&gt;Headroom 的架构里有几个关键词：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ContentRouter：识别内容类型，选择对应压缩器；&lt;/li&gt;
&lt;li&gt;SmartCrusher：偏向处理 JSON 等结构化内容；&lt;/li&gt;
&lt;li&gt;CodeCompressor：偏向处理代码和 AST；&lt;/li&gt;
&lt;li&gt;Kompress-base：用于文本压缩；&lt;/li&gt;
&lt;li&gt;CacheAligner：让 prompt 前缀更稳定，提高提供商 KV cache 命中率；&lt;/li&gt;
&lt;li&gt;CCR：保存原文，需要时再通过 retrieve 找回来。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;换成人话说，它不是把所有内容都粗暴摘要成一段话，而是先判断内容类型，再选不同压缩策略。代码、JSON、普通文本、日志和 RAG 片段，压缩方式不应该一样。&lt;/p&gt;
&lt;h2 id=&#34;快速安装&#34;&gt;快速安装
&lt;/h2&gt;&lt;p&gt;README 给出的安装方式很直接：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install &lt;span class=&#34;s2&#34;&gt;&amp;#34;headroom-ai[all]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install headroom-ai
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Python 侧需要 &lt;code&gt;Python 3.10+&lt;/code&gt;。安装后可以先试这几个命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headroom wrap claude
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headroom proxy --port &lt;span class=&#34;m&#34;&gt;8787&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headroom perf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果你用的是 MCP 客户端，可以走：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headroom mcp install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果你只是想验证效果，最简单的是先跑 &lt;code&gt;headroom perf&lt;/code&gt;，看它对典型工作负载能省多少 token。确认可用后，再把它接到 Claude Code、Codex、Cursor 或自己的 OpenAI-compatible 客户端里。&lt;/p&gt;
&lt;h2 id=&#34;和普通摘要有什么区别&#34;&gt;和普通摘要有什么区别
&lt;/h2&gt;&lt;p&gt;普通摘要最大的问题是不可逆。日志被总结成“数据库连接失败”，你就看不到原始错误码、时间戳、调用栈和上下文了。Agent 后面如果需要细节，只能重新查。&lt;/p&gt;
&lt;p&gt;Headroom 的一个重点是 reversible：原始内容保存在本地，压缩后传给模型；如果模型需要原文，再通过 &lt;code&gt;headroom_retrieve&lt;/code&gt; 取回。这个设计更适合调试、代码搜索和生产日志分析，因为这些场景经常需要回到细节。&lt;/p&gt;
&lt;p&gt;当然，这也意味着你要管理本地存储和隐私边界。虽然 README 强调 local-first，但只要你把压缩后的内容发给云端模型，仍然要按自己的数据安全要求处理。&lt;/p&gt;
&lt;h2 id=&#34;适合哪些场景&#34;&gt;适合哪些场景
&lt;/h2&gt;&lt;p&gt;我觉得 Headroom 最适合这些场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code、Codex、Cursor 经常因为工具输出太长而变慢；&lt;/li&gt;
&lt;li&gt;用 Agent 分析大仓库，搜索结果和文件片段很容易爆上下文；&lt;/li&gt;
&lt;li&gt;SRE 排障时要把日志、trace、配置和命令输出交给模型看；&lt;/li&gt;
&lt;li&gt;做 RAG 应用，检索结果冗余严重；&lt;/li&gt;
&lt;li&gt;想在多个 Agent 工具之间共享本地记忆；&lt;/li&gt;
&lt;li&gt;想把 MCP 工具接入已有 AI 工作流。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你只是偶尔问几句聊天，或者 prompt 很短，就不一定需要它。Headroom 的价值主要在“Agent 真正在干活”的时候出现。&lt;/p&gt;
&lt;h2 id=&#34;使用时要注意什么&#34;&gt;使用时要注意什么
&lt;/h2&gt;&lt;p&gt;上下文压缩不是魔法。它能省 token，但也可能带来新问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;压缩策略不合适时，模型可能拿不到关键细节；&lt;/li&gt;
&lt;li&gt;代码和日志场景要测试 retrieve 是否可靠；&lt;/li&gt;
&lt;li&gt;接代理模式时，要确认请求到底经过哪些本地和云端环节；&lt;/li&gt;
&lt;li&gt;团队使用时，要定义好本地缓存、会话记录和敏感数据保留策略；&lt;/li&gt;
&lt;li&gt;不要只看 token savings，也要看任务完成率和误判率。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的建议是用真实任务测试，而不是只看 demo。比如拿一组历史 bug、CI 日志、RAG 查询和代码搜索任务，分别比较“直接喂模型”和“经过 Headroom”后的成本、速度和答案质量。&lt;/p&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;Headroom 是一个很典型的“上下文工程”工具。它不追求再造一个 Agent，而是站在 Agent 和 LLM 中间，把进入模型的内容压干净、压短，并保留取回原文的能力。&lt;/p&gt;
&lt;p&gt;它适合已经在用 Claude Code、Codex、Cursor、Aider、Copilot CLI 或 MCP 工具的人。如果你的痛点是“模型上下文经常被日志和工具输出撑爆”，Headroom 值得试；如果你的问题只是模型能力不够，单纯压缩上下文就不一定能解决。&lt;/p&gt;
&lt;h2 id=&#34;参考来源&#34;&gt;参考来源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/chopratejas/headroom&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;chopratejas/headroom - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
