この記事ではLLMプロンプト圧縮ツール Headroom に特化して解説します。LLMそのものの仕組み・主要モデル比較・ローカル実行から整理したい方は LLMとは?仕組み・主要モデル比較・ローカル実行・量子化を一気にまとめる2026年版 を、トークン最適化の全体像(RTK・Graphify・メモリ階層化など)は AIエージェントのトークン最適化|コスト削減とコンテキスト管理の5アプローチ2026 をご覧ください。

この記事のポイント
・Headroomはツール出力・ログ・RAGチャンク・会話履歴をLLMに渡す前に60〜95%圧縮するプロンプト圧縮ミドルウェア(Apache 2.0、Python約80%+Rust約15%)
・トークンコスト削減・レイテンシ短縮・RAG精度維持を同時に狙う。ライブラリ/プロキシ/MCPサーバ/wrap一発で既存スタックに後付けできる
・LLMLingua系の汎用枝刈りと違い、コンテンツ種別ごとの専用圧縮器+可逆圧縮(CCR)で構造化データに強い。2026年1月公開から半年で約5.5万★へ急伸
headroomがログ10,144トークンを1,260トークンに圧縮しても同じFATALエラーを検出する公式デモGIF
公式デモ:ログ 10,144 → 1,260 トークン(約88%削減)でも同じ FATAL を検出する。圧縮しても答えは変わらない、が一目でわかる。出典 chopratejas/headroom(README)

30秒でわかるheadroom(何ができるか)

headroomは、AIエージェントが読むものすべて——ツール出力・ログ・ファイル・RAGチャンク・会話履歴——を、LLMに届く前に圧縮するミドルウェアだ。要点を先に押さえる。

・headroomはLLM入力を「60〜95% fewer tokens, same answers」を掲げて圧縮するOSS(Apache 2.0、作者 chopratejas)
・狙いはトークンコスト削減・レイテンシ短縮・RAG精度維持の三立。入力を削るだけでなく原文をローカル保持して取り戻せる
ライブラリ(compress())/HTTPプロキシ(コード変更ゼロ)/MCPサーバ/wrap一発の複数形態で導入できる
・JSON・コード・ログ・検索結果・散文を種別判定して別々の圧縮器に振り分けるのが設計の核
・GitHubは約55,800★・約4,000フォーク(2026年7月時点)、構成はPython約80%/Rust約15%/TypeScript約3%

headroomの要点:入力トークン60〜95%削減、proxyなら改修0行、lib/proxy/MCPの3形態
headroomが答える読者の1問目「結局何ができるのか」。入力を60〜95%削り、proxyなら既存コードを触らず、導入は3形態から選べる。

商用API依存のコストとレイテンシに悩むエージェント/RAG運用者に直撃する内容だ。本記事は圧縮の仕組み・精度のトレードオフ・競合との違い・実運用での置き場所を、公式READMEとドキュメントのベンダー記載値を一次ソースとして整理する。数値はすべてベンダー記載であり、本記事の独自実測ではない点を先に断っておく。

なぜ今「LLM入力圧縮」なのか

LLM入力圧縮が2026年に注目を集める理由は3つに集約できる。これが「何を解決するのか」への答えだ。

トークンコストの爆発:エージェントは1タスクで何十回もLLMを呼び、その都度ツール出力・ログ・ファイルを丸ごと文脈に積む。入力トークンは出力より桁違いに多くなりやすく、月額API料金の主因になる
長文脈モデルでも残る実用レイテンシ:1Mトークン級の文脈窓があっても、毎リクエストで巨大な入力を処理すれば応答は遅くなり、KVキャッシュも崩れる。窓が広いことと安く速いことは別問題だ
エージェント時代の入力肥大:MCPツール出力やログは「干し草の山の中の針(needle in haystack)」を生み、無関係トークンが推論精度まで下げる

文脈窓を広げて払う従来アプローチと、入力を圧縮するheadroomの対比図
入力圧縮は「文脈窓を広げる」の逆方向。窓を広げてコストを払うのではなく、渡す情報を絞ってコスト・レイテンシ・ノイズを同時に下げる。

この文脈で、入力を減らすこと自体がコスト・速度・精度の三方向に効く。トークンを盗まれて課金を破壊される攻撃面まで含めて「入力をどう扱うか」が運用設計の中心になりつつあり、防御の観点は トークン窃取を多層で止める——セッション・AI推論・課金まで含めた防御パターン で整理した。コンテキスト供給の枠組みとしては、Microsoftが Microsoft IQの4層を読み解く——Work/Web/Foundry/FabricとMCP・RAGの関係 で示した「単発RAGを多段・権限対応に進化させる」流れとも地続きだ。headroomはその供給パイプの「入口で削る」側を担う。

入力圧縮は「文脈窓を広げる」アプローチの逆方向だ。窓を広げてコストを払うのではなく、渡す情報を絞ってコストとノイズを同時に下げる。長文脈と圧縮は競合ではなく併用できる。

headroomの仕組み:コンテンツ種別判定と可逆圧縮(CCR)

headroomの中核は、コンテンツ種別を判定して最適な圧縮器に振り分ける ContentRouter と、その前後に置かれる CacheAligner・CCR だ。公式ドキュメントは、入力を受け取り→キャッシュ整列→種別判定→圧縮→原文記憶→送信という一連のパイプラインとして説明している。

flowchart TD A["入力
ツール出力 / ログ / RAGチャンク
コード / 会話履歴"] --> B["CacheAligner
プレフィクス安定化
プロバイダKVキャッシュをヒットさせる"] B --> C["ContentRouter
コンテンツ種別を自動判定"] C --> D1["SmartCrusher
JSON / 配列 / ネスト"] C --> D2["CodeCompressor
AST認識 tree-sitter"] C --> D3["Kompress-v2-base
散文 HuggingFace学習済み"] C --> D4["LogCompressor
失敗・エラーを残し成功行を捨てる"] C --> D5["SearchCompressor
クエリ関連度でランキング"] D1 --> E["IntelligentContext
文脈上限超過時に重要度スコアリング"] D2 --> E D3 --> E D4 --> E D5 --> E E --> F["CCR
原文をローカル保持
headroom_retrieve で取り戻し可能"] F --> G["LLMへ送信
圧縮済み入力"]

各コンポーネントの役割を分解する。

CacheAligner:メッセージのプレフィクスを安定化させ、Anthropic/OpenAI側のKVキャッシュが実際にヒットするようにする。圧縮で文頭が毎回変わるとキャッシュが無効化されるため、その逆を担保する層
ContentRouter:入力のコンテンツ種別を検出し、最適な圧縮器へ振り分ける司令塔
SmartCrusher:JSON(配列・ネスト・混在型)を統計的に解析し、エラーや異常値を保持したまま冗長部を畳む
CodeCompressor:Python・JavaScript/TypeScript・Go・Rust・Java・C/C++・PerlをASTで認識し、構文構造を壊さずに圧縮
Kompress-v2-base:散文をHuggingFace公開の学習済みモデルで圧縮(エージェント実行トレースで学習と記載)
LogCompressor:ビルド/テストログから失敗・エラーを残し、成功(passing)出力を落とす
SearchCompressor:検索結果をユーザクエリへの関連度でランキングして絞る
IntelligentContext:文脈上限を超える場合にメッセージを重要度でスコアリングして取捨選択
CCR(Compress-Cache-Retrieve):圧縮した原文をローカルに保存し、LLMには headroom_retrieve ツールを渡す。詳細が必要になればLLM自身がハッシュ指定で原文を取り戻せる「可逆圧縮」

この種別別ルーティングと可逆性が、単一アルゴリズムでプロンプト全体を枝刈りする方式との設計上の分岐点になる。圧縮し過ぎても原文に戻せるため、攻めた圧縮率を許容しやすい。

なぜ「種別ごとに別の圧縮器」なのかは、データ構造の違いを考えると腑に落ちる。JSONは木構造で、冗長なのはキーの繰り返しや配列要素の定型部分だから統計的に畳める。コードは構文木があるので、AST単位で意味を保ったまま空白やボイラープレートを落とせる。ログは時系列で大半が正常行、見たいのは例外だけだから「失敗を残す」フィルタが効く。これらを単一の自然言語圧縮器にかけると、構造を壊すか、構造を守って圧縮率が出ないかのどちらかになる。headroomが種別判定を最上流(ContentRouter)に置くのは、圧縮アルゴリズムの選択そのものが圧縮率と安全性を決めるからだ。

圧縮率と精度のトレードオフ

headroomが掲げる「60〜95%削減・same answers」は、実ワークロード別のベンダー記載値で裏付けられている。以下はすべて公式README/ドキュメント記載の数値で、独自実測ではない点に注意してほしい。

実ワークロード別のトークン削減率:SRE障害調査92%、コード検索92%、issueトリアージ73%、コードベース探索47%
実ワークロードのトークン削減率(公式READMEの Proof 記載値)。冗長・反復の多いログ/検索ほど削減率が高く、ユニークなコードベース探索は47%にとどまる。

コード検索(100件):17,765 → 1,408トークン(92%削減)
SREインシデント調査:65,694 → 5,118トークン(92%削減)
GitHub issueトリアージ:54,174 → 14,761トークン(73%削減)
コードベース探索:78,502 → 41,254トークン(47%削減)
ログ100件(67番目に致命的エラー):10,144 → 1,260トークン(約88%削減)、設問4/4を正答維持(冒頭のデモGIFがこのケース)

精度面では、圧縮を挟んでもベンチスコアが落ちないことを示している。次の表は公式READMEの Accuracy preserved セクションの記載値だ。

ベンチ カテゴリ ベースライン headroom適用 補足
GSM8K 数学 0.870 0.870 ±0.000
TruthfulQA 事実性 0.530 0.560 +0.030
SQuAD v2 QA 97% 19%圧縮時
BFCL ツール呼び出し 97% 32%圧縮時

重要なのは、圧縮率がデータの性質に強く依存する点だ。Hacker NewsのShow HNで作者は、繰り返しの多いサーバログは90%超、行が一意なコード差分(diff)は0%、密度の高い散文では約-0.3%(わずかなオーバーヘッド)と明言している。

公表ベンチの読み方にも注意がいる。GSM8K・TruthfulQA・SQuAD v2はいずれも英語の標準QA/推論タスクで、「圧縮しても正答が落ちない」ことは示せても、「あなたのドメイン固有の長文で重要な一文が消えない」ことまでは保証しない。特にTruthfulQAが0.530→0.560とわずかに上がっているのは、ノイズ除去で精度が上振れる現象(無関係トークンが減って干し草の山問題が緩和される)を示唆するが、これも英語・特定タスクの傾向だ。自社のゴールデンセットで「圧縮あり/なし」を並べて回帰確認するのが、ベンダー数値を鵜呑みにしない唯一の方法になる。

教訓:headroomは「冗長・反復・構造化されたデータ」ほど効き、「ユニークで情報密度の高い散文」では効かないか逆効果になりうる。万能圧縮ではなく、エージェントのツール出力・ログ・検索結果という"水増しされやすい入力"を狙い撃つツールだと理解するのが正しい。

出力トークンまで削る新機能(Output token reduction)

ここまでは「LLMへ送る入力」の圧縮だが、READMEには出力トークン削減が新しく加わった。課金は入力だけでなくモデルが書き戻すトークンにも発生し、Opus級のモデルでは出力単価が入力の約5倍になる。その出力の多くは「では、〜しましょう」という前置き、直前に見せたコードの再掲、ファイルを読むだけの定型手番での過剰な「思考」に費やされる。ここを削るのが出力トークン削減だ。

出力トークン削減の2機構:verbosity steeringとeffort routing、そして推定+信頼区間での報告
入力だけでなく出力も削る。冗長さ抑制(verbosity steering)と努力度ルーティング(effort routing)の2機構で、モデルが書き戻す側のトークンを圧縮する。

verbosity steering:システムプロンプトの末尾に「簡潔に、文脈を再掲しない」という短い指示を追記する。末尾に足すことでプロンプトキャッシュのヒットを崩さない
effort routing:ツール結果(ファイル読み込みやテスト成功)を受けてモデルが再開するだけの手番では思考努力を下げ、新しい質問やエラー時にはフル努力を保つ
正直な推定値で報告:出力削減は「本来なら何を書いていたか」が観測できない反実仮想なので、headroomは断定値を作らず信頼区間つきの推定値(例:Reduction 約31.7%、95%CI)で報告する。10%を非適用の対照群に回せば(HEADROOM_OUTPUT_HOLDOUT)実測値も得られる

有効化はプロキシから環境変数 HEADROOM_OUTPUT_SHAPER=1 を立てるだけで(既定はオフ)、コード変更は要らない。headroom learn --verbosity を使えば過去セッションから利用者に合った簡潔さのレベルを自動で学習させることもできる。入力圧縮とは独立に効くので、入力60〜95%削減の上にさらに出力側の削減が乗る構図になる。

LLMLinguaとの違いと競合比較

入力圧縮には複数の系統がある。LLMLingua系(Microsoft Research)はプロンプト文をトークン重要度で枝刈りする汎用手法、headroomはコンテンツ種別ごとの専用圧縮+可逆性に振った実装、という違いがある。これが読者の3問目「何を代替できるのか」への答えだ。アプローチ・対応データ・統合性で整理する。

ツール アプローチ 主な対応データ 可逆性 統合形態 ライセンス
headroom コンテンツ種別判定→専用圧縮器 JSON・コード・ログ・検索・散文・画像 あり(CCR) ライブラリ/プロキシ/MCP/wrap Apache 2.0
LLMLingua 小型LMの perplexity でトークン枝刈り 主に自然言語プロンプト なし Pythonライブラリ MIT
LLMLingua-2 BERT級エンコーダのトークン分類(GPT-4蒸留) タスク非依存の自然言語 なし Pythonライブラリ MIT
SemanticCompression 意味単位での要約的圧縮 自然言語中心 なし ライブラリ 実装依存
Self-Extend 等の文脈拡張 圧縮せず窓を広げる(逆方向) 任意 該当なし モデル側手法 実装依存

ベンダー記載ベースの傾向として、LLMLinguaは最大20倍(約95%)圧縮を達成する一方で対象は自然言語が主、LLMLingua-2は2〜5倍圧縮だがタスク非依存で3〜6倍高速・GPUメモリも約2.1GBと軽い、という特性がある。headroomの差別化は「JSON/ログ/コードのような構造化・半構造化データへの種別最適化」と「原文をローカルに残してLLMが取り戻せる可逆性」、さらに「出力トークン削減」まで含む点だ。散文の純粋な意味圧縮率だけを比べるならLLMLingua系の方が研究実績は厚い。用途で使い分けるのが現実的で、エージェントのツール出力圧縮ならheadroom、長文プロンプトの一括圧縮ならLLMLingua、という棲み分けになる。

ユースケース別の使い方(RAG・エージェント・ログ)

headroomはどの圧縮器がどのデータに効くかがはっきりしている。代表的なユースケースを「どの圧縮器が担うか」「典型的な削減レンジ」とセットで整理する。

ユースケース 主に効く圧縮器 典型削減 効く理由
RAGチャンクの中段圧縮 SearchCompressor 中〜高 上位kの重複・定型句をクエリ関連度で絞る
エージェントのツール出力 SmartCrusher 高(73〜92%) 巨大JSON・ls全結果の冗長部を畳む
長文ログの前処理 LogCompressor 高(〜92%) 成功行を捨て失敗・例外だけ残す
コードベース探索 CodeCompressor 中(47%前後) ASTで構造を保ちつつ空白・定型を削る
学習データの前処理 種別別+learn データ依存 信号対雑音比を上げてから学習セットへ

RAGパイプラインの中段に置く

検索で取ってきたチャンクは重複や定型句が多く、上位kを丸ごと積むとノイズになる。headroomの SearchCompressor をretrieverとLLMの間に挟み、クエリ関連度でランキング・圧縮してから渡す。RAGの精度を保ちつつ入力を削れるため、kを増やして再現率を上げても文脈予算が破綻しにくい。ツリー型RAGなど検索構造側の工夫とも併用でき、検索の作り込みは PageIndex|ベクトル不要のツリー推論RAG も参考になる。

エージェントのツール出力圧縮

エージェントの最大の水増し源はツール出力だ。lsの全結果、巨大なJSONレスポンス、MCPツールの戻り値が毎ターン文脈に積まれる。プロキシかMCPサーバ形態で挟めば、SmartCrusher がJSONの冗長部を畳み、エラーや異常値だけ残す。コード変更ゼロで効くため、Claude Code・Codex・Cursor・Aider・Copilot CLI といった既存エージェントにそのまま被せられる。

長文ログの要約前処理

ビルドログ・テストログ・SREのインシデントログは、成功行が大半で本当に見たいのは失敗箇所だけ、という構造をしている。LogCompressor は passing 出力を落として failures/errors を残すため、65,694→5,118トークン(92%)のような圧縮を実現する。要約LLMに渡す前段の前処理として置けば、要約自体のコストと取りこぼしを同時に減らせる。

3つの導入形態と headroom wrap

導入はライブラリ/プロキシ/MCPの3形態、加えて既存エージェントに一発で被せる headroom wrap から選ぶ。同じ圧縮エンジンを別の入口で使う形で、改修コストと制御の細かさがトレードオフになる。

headroom wrapで被せられるエージェント一覧:Claude Code, Codex, Cursor, Aider, Copilot CLI, Cline, Continue, Goose, OpenHands, Mistral Vibe
`headroom wrap <ツール>` 一発で被せられる対応エージェント。undoは `headroom unwrap`。OpenAI互換クライアントは `headroom proxy` で網羅する。</figcaption></figure> | 形態 | コード変更 | 向く対象 | 制御の細かさ | 典型ユース | |---|---|---|---|---| | ライブラリ(`compress()` / ラッパ) | あり(数行) | 自社コードからLLMを呼ぶアプリ | 高い(種別・閾値を呼び出し側で指定) | RAGサーバ・自前エージェント | | プロキシ(HTTP) | ゼロ | OpenAI互換の既存クライアント全般 | 中(プロキシ設定で一括) | 任意言語・任意ツール | | MCPサーバ | ゼロ〜小 | MCP対応エージェント | 中〜高(ツールとして圧縮・取り戻し) | CCRを能動的に使う構成 | | `headroom wrap` | ゼロ | 主要コーディングエージェント | 中 | Claude Code・Codex等を一発被せ | 導入コマンドは最小限で済む。インストールは用途別のextrasを付ける(要 Python 3.10+)。 ```bash # Python(全部入り・headroom CLIも入る) pip install "headroom-ai[all]" # 必要な分だけ: [proxy] [mcp] [ml] [code] [memory] [langchain] [agno] [evals] # TypeScript / Node(SDKのみ・CLIなし) npm install headroom-ai # Docker(プロキシ/MCPをコンテナで) docker pull ghcr.io/chopratejas/headroom:latest ``` 実行は「エージェントに一発被せる」か「プロキシを立てて向き先を変える」かのどちらかが最短だ。 ```bash # 既存のコーディングエージェントに一発で被せる headroom wrap claude # undoは headroom unwrap claude # または: コード変更ゼロのプロキシを起動して向き先を変える headroom proxy --port 8787 export HEADROOM_OUTPUT_SHAPER=1 # 出力トークン削減も効かせるなら(任意) # セットアップ確認と削減量の可視化 headroom doctor # ルーティングが効いているか健全性チェック headroom dashboard # 削減量のライブダッシュボード ``` ### 使い方:3つの入口のコード例 「結局どう書けばいいのか」を入口別に最小コードで示す。同じ圧縮エンジンを、改修コストの小さい順に**wrap → プロキシ → ライブラリ**の3経路で呼べる。 **(1) ライブラリ形態**:自社コードからLLMを呼んでいるなら、`compress()` をLLM呼び出しの前段に挟む。コンテンツ種別の判定は自動なので、巨大なツール出力・ログ・検索結果をそのまま渡すだけでよい。 ```python # ライブラリ形態:LLM呼び出しの前段で compress() を挟む(概念例) from headroom import compress # 巨大なツール出力・ログ・検索結果を圧縮してからLLMへ渡す compressed = compress(huge_tool_output) # コンテンツ種別を自動判定して圧縮 response = your_llm_call(compressed) # 圧縮済み入力でAPIを呼ぶ ``` **(2) プロキシ形態**:既存のOpenAI互換クライアントは、向き先(base URL)をローカルのheadroomプロキシに差し替えるだけで圧縮が効く。アプリ側のコードは1行も変えない。 ```bash # プロキシ形態:OpenAI互換クライアントの向き先を差し替えるだけ headroom proxy --port 8787 export OPENAI_BASE_URL="http://localhost:8787/v1" # 既存クライアントはここを向くだけ export HEADROOM_OUTPUT_SHAPER=1 # 出力トークン削減も効かせるなら(任意) ``` **(3) wrap 形態**:Claude Code や Codex のようなコーディングエージェントを使っているだけなら、`headroom wrap <ツール名>` が最短だ。設定ファイルを触らずに圧縮を挟み、`headroom unwrap` で元に戻せる。 いずれの形態でも圧縮エンジンは共通なので、まず wrap かプロキシで効果を測り、効きの大きい経路だけライブラリ化する、という順序で移行コストを抑えられる。 判断の目安はこうだ。アプリのコードを触れるならライブラリが最も細かく効く。既存のエージェントCLIに後付けしたいだけならwrap かプロキシがコード変更ゼロで最短。LLMに `headroom_retrieve` を能動的に呼ばせてCCRを活かしたいならMCPサーバ形態が素直だ。この他に Vercel AI SDK・LiteLLM・Agno・Strands・ASGIミドルウェアなどのアダプタも用意されている(フレームワークアダプタは `[langchain]` など個別に導入)。
迷ったらまず wrap かプロキシで全体の圧縮率と精度をA/B計測し、効果の大きい経路だけライブラリ/MCPに置き換える、という段階導入が安全。最初から全経路をライブラリ化すると改修コストばかり先行する。
## クロスエージェントメモリと headroom learn headroomは単発の圧縮にとどまらず、エージェント運用の文脈を継続的に洗練する機能を持つ。これが「入力を削る」以上の価値になる部分だ。3つの継続機能を整理する。 | 機能 | 何をするか | 効果 | |---|---|---| | クロスエージェントメモリ | Claude・Codex・Geminiをまたいだ共有ストア+自動重複排除 | 同じ事実を各エージェントが別々に積む無駄を一元化 | | `headroom learn` | 失敗セッションを採掘し修正を書き戻す | 同じミスの再発を防ぎ指示文脈を更新 | | local-first | ストア・原文を利用者マシン上に保持 | 原文・メモリを外部に出さず圧縮と学習を完結 | ・クロスエージェントメモリ:Claude・Codex・Gemini など複数エージェントをまたいだ共有ストアを持ち、自動で重複排除(auto-dedup)する。同じ事実を各エージェントが別々に文脈へ積む無駄を、ストア側で一元化して削る
`headroom learn`:失敗したセッションを採掘し、修正内容を `CLAUDE.local.md`(既定・gitignore対象)や `CLAUDE.md` / `AGENTS.md` / `GEMINI.md` に書き戻す。エージェントが同じミスを繰り返さないよう、運用ループの中で指示文脈を更新していく発想
local-first:これらのストアも含めてデータは利用者のマシン上に置かれる。原文・メモリを外部に出さずに圧縮と学習を完結できる つまりheadroomは「1リクエストの入力圧縮器」であると同時に、「複数エージェント・複数セッションをまたいだ文脈管理レイヤ」としての顔も持つ。トークン最適化を単発の圧縮で終わらせず、メモリ階層化まで含めて設計したいなら、この継続学習・共有メモリの側面が効いてくる。トークン最適化全体の中での位置づけは [AIエージェントのトークン最適化ガイド](/explain/ai-agent-token-optimization-guide-2026/) の分類軸(圧縮/グラフ化/メモリ階層化)に照らすと整理しやすい。 ## コスト試算:圧縮率がそのまま月額削減率 圧縮効果を金額に落とすと効き目が直感的になる。ここでは入力単価を仮に$3.00/百万トークンと置き、エージェントが1日10万リクエスト・平均入力2万トークンを処理する運用を想定する(単価・規模はあくまで試算用の仮定値)。 | 圧縮率 | 1リクエスト入力 | 月間入力トークン | 月額入力コスト($3/1M仮定) | 削減額 | |---|---|---|---|---| | 0%(圧縮なし) | 20,000 | 60,000M | $180,000 | — | | 47%(コードベース探索級) | 10,600 | 31,800M | $95,400 | -$84,600 | | 73%(issueトリアージ級) | 5,400 | 16,200M | $48,600 | -$131,400 | | 92%(ログ/検索級) | 1,600 | 4,800M | $14,400 | -$165,600 | 削減率はモデルや通貨単価に依存しないため、GPT-5.5・Claude・Gemini いずれの料金体系でも「入力トークンを何%削れるか」がそのまま月額削減率になる。出力トークンは従来は圧縮対象外だったが、前述の出力トークン削減(`HEADROOM_OUTPUT_SHAPER`)を有効化すれば出力側にも削減が乗る。実額はベンダー単価と自分のワークロードの圧縮率で再計算してほしい。
試算のコツ:まず自分の代表的な入力(ツール出力・ログ・RAGチャンク)でheadroomの実圧縮率を計測し、その%を現在の月額入力コストに掛ける。散文中心なら数%、構造化データ中心なら70〜90%が現実的なレンジになる。
## よくある落とし穴 導入時にハマりやすい点を4つ挙げる。可逆圧縮(CCR)があるとはいえ、設計を誤ると精度や挙動を壊す。
圧縮を効かせる安全な使い方と、事故る使い方の対比図
圧縮を効かせるか壊すか。冗長・構造化データに狙い撃ち、CCRで原文を残し、実トラフィックで計測するのが安全側。
圧縮率を上げ過ぎて重要情報が落ちる:攻めた圧縮は冗長データには有効だが、ユニークな事実が密な入力では肝心の一行が消えうる。CCRの `headroom_retrieve` をLLMが呼べる構成にして、必要時に原文へ戻せる経路を必ず残す
構造化データのスキーマ破壊:SmartCrusherはJSON構造を保つ設計だが、後段で厳密なスキーマ検証をするパイプラインでは、圧縮後の形がバリデーションを通るか確認する。圧縮はLLM入力用と割り切り、機械処理に渡すデータは原文を使う
ストリーミング応答との相性:入力圧縮は出力ストリームの書き換えではない(出力削減は別機構)。プロキシ経由でSSEが透過するか、自分のスタックで挙動確認する
LLM側キャッシュの無効化:圧縮で文頭が毎回変わるとプロバイダのプロンプトキャッシュが効かなくなる。headroomは CacheAligner でこれを防ぐ設計だが、自前で前後に文字列を足すとキャッシュ境界がずれる。キャッシュ前提の運用ではヒット率を計測する これらはいずれも「圧縮を入力前処理に限定し、原文を残し、効果を実測する」という原則で回避できる。万能圧縮として無条件に挟むのではなく、効くデータに狙って当てるのが安全だ。 ## headroomを評価すべきチーム
導入を検討すべきケース
  • エージェント/RAGでツール出力・ログ・検索結果が文脈を水増しし、月額API入力コストが膨らんでいるチーム
  • コード変更を最小化したい(wrap/プロキシ/MCPで後付けしたい)運用
  • 圧縮はしたいが原文の取りこぼしリスクを許容できず、可逆性(CCR)が欲しい場合
  • 入力だけでなく出力トークンのコストも削りたいチーム
  • ローカル完結で原文を外部に出さずに圧縮したいオンプレ志向
慎重に評価すべきケース
  • 入力が密度の高いユニークな散文中心で、圧縮が効きにくい(むしろオーバーヘッド)用途
  • 日本語中心で精度要件が厳しく、英語ベンチしか公表がない現状で十分な事前検証ができない場合
  • 出力トークン比率が高く、入力削減の総額インパクトが小さいワークロード(出力削減は別途要検討)
掲載した性能・精度の数値はすべて公式README/ドキュメント/Hacker Newsの作者発言に基づくベンダー記載値で、本記事の独自実測ではない。GitHubスター数(約55,800★)は2026年7月時点の値で、リポジトリの成長は速い。実運用での効きはデータの性質に強く依存するため、代表入力での圧縮率と精度を小さく計測してから本番投入するのが確実だ。 --- ## 参照ソース - [chopratejas/headroom(GitHub公式リポジトリ・README)](https://github.com/chopratejas/headroom) - [Headroom 公式ドキュメントサイト(アーキテクチャ・CCR・ベンチ)](https://headroom-docs.vercel.app/docs) - [Headroom Benchmarks & methodology(公式ドキュメント)](https://headroom-docs.vercel.app/docs/benchmarks) - [Kompress-v2-base モデルカード(HuggingFace)](https://huggingface.co/chopratejas/kompress-v2-base) - [Show HN: Headroom (OSS): Cuts LLM costs by 85%(Hacker News)](https://news.ycombinator.com/item?id=46663757) - [Show HN: Headroom – Reversible context compression for LLMs(Hacker News)](https://news.ycombinator.com/item?id=46628278) - [LLMLingua Series — Microsoft Research(競合手法)](https://www.microsoft.com/en-us/research/project/llmlingua/) - [LLMLingua-2: Data Distillation for Efficient and Faithful Task-Agnostic Prompt Compression(arXiv)](https://arxiv.org/pdf/2403.12968)