コンテンツにスキップ

Token Compression: 数ヶ月分の Agent 記憶を1つのプロンプトに収める

AI agent のメモリには常にジレンマがあります: agent にはすべてを記憶してほしいけれど、AI モデルには一度に処理できるテキスト量に厳密な制限があります。履歴が増えれば増えるほど、収まる量は減っていきます。

Token compression がこの問題を解決します。 重要なものを残し、残りを圧縮し、制御可能な予算内に履歴を収めます。

1枚の図でわかる課題

Agent の完全な履歴: 50,000 トークン
    ↓
AI モデルのコンテキストウィンドウ: 4,000 トークン
    ↓
圧縮なしの場合: 最後の 4,000 トークンだけが生き残る
    (それより古いものはすべて消える — 重要な決定やエラーも含めて)

以前のアプローチは tail window — 最新のイベントだけを残し、それ以外はすべて破棄する。予測可能ですが無駄が多い: 昨日の重要なエラーを捨てて、5分前の冗長なログを残すかもしれません。

圧縮の仕組み

新しいアプローチはもっと賢い:

  1. 残す 重要なもの: エラー、決定、ファイルパス、最近の状態
  2. 圧縮する ノイズ: 繰り返しのログ、スタックトレース、冗長な出力
  3. 削る 低優先度のコンテンツは、圧縮だけでは足りない場合のみ
npm run contextdb -- context:pack \
  --session <id> \
  --limit 80 \
  --token-budget 1200 \
  --token-strategy balanced

結果

以前:

❌ 旧アプローチ: 最後の20イベントを残す → イベント #5 の重要なバグを見逃す

今:

✅ 新アプローチ: 全80イベントを残し、ノイズを圧縮 → バグはまだそこにある

3つのストラテジー

ストラテジー 使うタイミング 何をするか
balanced デフォルト ノイズを圧縮し、シグナルを残す。日常利用に最適。
aggressive 非常に小さい予算 厳しい制約向けの最大圧縮。
legacy 互換性 旧来の tail-window 動作。必要な場合のみ使用。

balanced から始めてください。 90% のケースで正しい選択です。

保護されるもの

次のものは 絶対に削られません:

  • エラーメッセージと失敗シグナル
  • ファイルパスとコマンド出力
  • 最近の状態と決定
  • 次のアクションシグナル

次のものが 最初に圧縮されます(短縮されますが、必ずしも削除されるとは限りません):

  • 繰り返しのログ行
  • スタックトレース
  • 冗長なツール出力

パケットにはテレメトリが含まれているため、何が起きたか正確に確認できます: 何トークンがそのまま残り、何が圧縮され、何イベントが削られたか。

最も必要なシーン

Token compression は次のようなシナリオで力を発揮します:

  • 数ヶ月の履歴がある 長期プロジェクト
  • 同じ ContextDB を共有する 複数の agent
  • 大量のログを生成する 夜間 harness 実行
  • コンパクトなコンテキストが必要な agent 間の切り替え

遅延読み込みの起動とも相性が良い — agent は小さなサマリーで即座に起動し、必要なときだけ圧縮された完全な履歴を読み込みます。

試してみる

npm run contextdb -- context:pack \
  --session <your-session-id> \
  --token-budget 1200 \
  --token-strategy balanced \
  --out memory/context-db/exports/compressed.md

出力を確認すると、何トークン節約できたかのサマリーが表示されます。


Token compression は ContextDB に組み込まれており、Harness CLI の一部です。追加ツールは不要です。