context-compression について
context-compression は、タスクに必要な情報を保ちながらプロンプトのコンテキストを短縮するエージェントスキルです。予算の計算、圧縮方法の選択、情報保持の確認を扱います。
主な機能
- 01トークン予算の計算
- 02情報密度の評価
- 034種類の圧縮戦略
- 04情報保持の検証
- 05複数ソースへの予算配分
活用シーン
- 01長文書をモデルのコンテキストに収める
- 02会話履歴の短縮
- 03RAGの検索チャンクへの予算配分
- 04技術文書の重要な事実の保持
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ seb1n/ awesome-ai-agent-skills --skill context-compressionインストール後、Claude Code で/context-compressionを入力して読み込まれたか確認します。
詳細
コンテキスト圧縮
コンテキスト圧縮とは、タスクに最も不可欠な情報を保持しながら、言語モデルに提供するテキストコンテキストのサイズを小さくするプロセスです。会話が長くなり、取得したドキュメントが大きくなるにつれて、回答の品質を損なわずにトークン制限内に収め、推論コストを管理可能な範囲に保つうえで、圧縮が重要になります。
ワークフロー
-
トークン予算を測定する:モデルのコンテキストウィンドウの合計(例:4K、32K、128K トークン)を確認し、システムプロンプト、指示、モデルの生成出力用に確保するトークン数を差し引きます。残りが利用可能なコンテキスト予算です。元のコンテキストがすでに収まる場合は、圧縮は不要なことがあります。
-
情報密度を評価する:元のコンテキストの各段落、文、またはチャンクを分析し、トークンあたりに含まれるタスク関連の事実の数に基づいて情報密度スコアを割り当てます。文体上の装飾にすぎない文、冗長な文、または話題から外れた文のスコアは低くなります。これは、ヒューリスティック(クエリとのキーワードの重複)や軽量な分類器を使って実行できます。
-
圧縮戦略を選択する:必要な圧縮率とコンテンツの性質に基づいて、最も適切な手法を選びます。
- 抽出型要約 — 最も重要な文を原文のまま選択します。
- 生成型要約 — 意味を保ちながら、より少ない語数で内容を書き直します。
- 要点抽出 — 固有表現、事実、数値のみを取り出します。
- 選択的削減 — 情報密度の低い文、定型文、重複する情報を削除します。
-
圧縮を適用する:選択した手法を実行します。大幅な圧縮(80% 超)では、複数の手法を組み合わせます。たとえば、まず定型文を削除し、その後、残った内容を生成型要約でまとめます。中程度の圧縮(40~60%)では、抽出型の選択で十分なことが多く、言い換えによる誤りも避けられます。
-
情報が保持されているか検証する:圧縮後の出力を元のテキストと比較し、重要な事実が失われていないことを確認します。簡単な検証では、元のテキストにある重要な固有表現、数値、結論が圧縮後のテキストにも含まれているかを確認できます。
-
最終コンテキストを組み立てる:元のコンテキストの代わりに、圧縮したテキストをプロンプトに挿入します。コンテキストが要約されていることをモデルに伝える注記を含め、モデルがそれに応じて確信度を調整できるようにします。
手法
- 抽出型要約:関連性スコアに基づき、ソーステキストから重要度の高い上位 n 件の文を選択します。正確な表現を保持するため、精度が重要な分野(法律、医療、コード)に適しています。ツール:TextRank、LexRank、または LLM ベースの抽出。
- 生成型要約:同じ意味を保ちながら、テキストをより短い新しい文章にまとめます。より自然で簡潔な出力を生成できますが、不正確さが生じるリスクがあります。信頼性の高い LLM と検証ステップを併用するのが最適です。
- 要点抽出:テキストを、事実、固有表現、データポイントをまとめた構造化リストにします。非常に省スペースですが(圧縮率が 90% を超えることもよくあります)、文章の流れやニュアンスは失われます。
- 選択的削減:内容のある情報を保ちながら、埋め草の文、重複した説明、挨拶、定型文を削除します。情報が失われるリスクが低く、ルールベースのヒューリスティックで簡単に実装できます。
- トークン予算の管理:複数のコンテキストソースに対して、トークン予算を動的に割り当てます。たとえば、取得したチャンクが 5 件ある RAG パイプラインでは、関連性の高いチャンクにより多くのトークンを割り当て、関連性の低いチャンクを積極的に圧縮します。
使用方法
元のコンテキストテキストと目標のトークン予算を指定します。このスキルは、予算内に収まる圧縮後のテキストを返します。必要に応じて、圧縮戦略(extractive、abstractive、key-points、auto)や、必ず保持するキーワードまたは固有表現のリストも指定できます。
例
例1:Q&A タスク向けに文書を圧縮する
入力(抜粋、約800トークン):
Acme Corporation は1987年、Jane Doe によってテキサス州オースティンで設立されました。環境コンプライアンスを専門とする小規模なコンサルティング会社としてスタートしました。その後、廃棄物管理技術へと事業を拡大し、1994年には自動仕分けシステムで初の特許を取得しました。2005年までに、Acme は全米12か所のオフィスで従業員500人を擁するまでに成長しました。2010年に株式を公開し、IPO の価格は1株あたり18ドルでした。2018年には GreenTech Solutions を2億4,000万ドルで買収し、リサイクル自動化を事業ポートフォリオに加えました。2024年現在、Acme の年間売上高は12億ドル、従業員数は3,400人です。2020年から CEO を務める Michael Chen は、以前 CTO を務めていました。Acme は2021年に本社をコロラド州デンバーに移転しました。同社のミッションステートメントでは、持続可能な産業慣行と2030年までのカーボンニュートラルな事業運営を重視しています。
圧縮後の出力(要点の抽出、約150トークン):
- Acme Corporation:1987年に Jane Doe がテキサス州オースティンで設立。現在の本社はコロラド州デンバー(2021年に移転)
- 事業:環境コンプライアンスコンサルティング → 廃棄物管理技術 → リサイクル自動化
- 主な節目:1994年に初の特許取得(自動仕分け)、2010年に IPO(1株18ドル)、2018年に GreenTech Solutions を買収(2億4,000万ドル)
- 現在:CEO は Michael Chen(2020年から)、従業員3,400人、年間売上高12億ドル
- 目標:2030年までに事業運営をカーボンニュートラル化
例2:会話履歴を圧縮する
入力(長時間にわたるチャット、18件のメッセージで約3,000トークン):
ユーザーが Python 仮想環境のセットアップについて質問します。エージェントは venv の作成方法、pip の使い方、requirements.txt について説明します。次に、ユーザーは Docker によるコンテナ化について質問します。エージェントは Dockerfile、docker-compose、ボリュームマウントについて説明します。ユーザーはポートのバインドエラーに遭遇します。エージェントは競合するプロセスがないか確認するなど、デバッグを支援します。ユーザーは問題を解決します。その後、ユーザーは AWS ECS へのデプロイについて質問します。
圧縮後の出力(抽象型の要約、約400トークン):
**会話の要約:**ユーザーは Python アプリケーションを Docker でセットアップし、AWS にデプロイしようとしています。主な状況:
- Python 環境は venv と requirements.txt で構成済みです(解決済み)。
- Docker のセットアップでは、ボリュームマウントを使用する Dockerfile と docker-compose を使用しています(解決済み)。
- ポート8080でのポートバインドの競合は、競合するプロセスを終了して解決しました。
- **現在のトピック:**ユーザーは現在、Docker 化した Python アプリを AWS ECS にデプロイする方法について質問しています。ローカルでは Docker のセットアップが動作しており、ECS のタスク定義、サービス構成、ロードバランシングについてのガイダンスを必要としています。
ベストプラクティス
- 段階的に圧縮する — まず軽めに削減して結果を測定し、それでも予算を超える場合にのみ、より強い手法を適用します。これにより、不要な情報損失を最小限に抑えられます。
- 数値と名前を保持する — 定量データ、固有名詞、日付、コード識別子は特に重要度が高いため、強く圧縮する場合でも保持する必要があります。
- 圧縮済みのコンテキストであることを明記する — 詳細が失われている可能性がある場合にモデルが適切に留保を示せるよう、コンテキストが圧縮済みであることを必ず伝えます。
- コードには抽出型の手法を優先する — 抽象型の要約では、コードスニペットに微妙な誤りが入り込む可能性があります。技術的な内容には、抽出による選択や選択的な削減を使用します。
- 直近のやり取りを残す — 会話履歴を圧縮するときは、最後の2〜3件のやり取りをそのまま保持し、それ以前のやり取りを要約します。新しさは関連性を示す強い手がかりです。
- 情報損失を測定する — 圧縮後に、内容に関する重要な質問への回答が引き続き正しいか確認します。タスクに必要な事実が失われている場合は、圧縮しすぎです。
エッジケース
- コンテキストがすでに予算内に収まっている場合:圧縮は完全にスキップします。不要な圧縮は必ず情報を一部失わせます。生のコンテキストが利用可能なトークン数を超える場合にのみ圧縮してください。
- 高度に技術的、または構造化されたコンテンツの場合:表、JSON、コードブロックは抽象的な手法ではうまく圧縮できません。要約するのではなく、選択的な削除を行うか、関連する行やフィールドのみを抽出してください。
- コンテキスト内に複数の言語が含まれる場合:圧縮モデルは言語によって性能にばらつきが生じることがあります。言語ごとのセグメントを個別に圧縮するか、多言語対応の要約モデルを使用してください。
- 重要な安全情報の場合:安全上の警告、法的免責事項、医薬品の用量情報を圧縮によって削除してはいけません。圧縮を適用する前に、必ず保持する情報として指定してください。
- 予算に近いコンテキストの場合:コンテキストが予算をわずか10~15%超えているだけなら、全面的な要約よりも、空白、定型的なヘッダー、重複した文を単純に削除するほうが安全です。