CompactPrompt について
CompactPromptは、構造と意味を保ちながらプロンプト、文書、エージェントスキルを短縮するPythonライブラリ兼MCPサーバーです。可逆のフレーズ短縮、数値圧縮、例の選定、ファイルのレビューと圧縮にも対応します。
主な機能
- 01価値の低い表現の削除
- 02繰り返しフレーズの可逆短縮
- 03数値データの精度削減
- 04代表例の選定
- 05ファイルとスキルのレビュー・圧縮
活用シーン
- 01LLMへの送信前にプロンプトを短縮
- 02Markdown文書やエージェントスキルを圧縮
- 03復元用辞書を保ちながら反復表現を短縮
MCP 対応
オプションのMCPサーバーを通じて、MCP対応AIエージェントがプロンプト、文書、スキルをレビュー・圧縮できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
CompactPrompt
CompactPrompt は、意味を保ちながら、AI モデルに送るテキストを短縮します。実行コストを抑え、応答を速くし、モデルの入力上限を超える可能性を下げます。一般的な用途では関数を 1 回呼び出すだけでよく、機械学習の知識も必要ありません。
背景
AI モデルは入力(プロンプト)を読み取り、応答を返します。プロバイダーは処理したテキスト量に応じて課金し、その量はトークンで測定されます(各トークンはおよそ単語の 4 分の 3 に相当します)。また、すべてのモデルには入力サイズの上限があります。そのため、指示、ドキュメント、表、例を組み合わせた長いプロンプトは、コストが高くなり、応答が遅くなり、入力できない場合もあります。
CompactPrompt は、重要な情報を保ちながらプロンプトのサイズを縮小し、内容を維持したまま余分な部分を取り除きます。
はじめに
ライブラリをインストールします。
pip install compactprompt
プロンプトを短縮します。
from compactprompt import CompactPrompt
result = CompactPrompt.compact(
"Please could you very kindly go ahead and provide a really concise "
"summary of the quarterly report."
)
print(result.text)
print(f"{result.ratio:.1f}x smaller "
f"({result.tokens_before} -> {result.tokens_after} tokens)")
出力:
a really concise summary of the quarterly report.
1.7x smaller (22 -> 13 tokens)
埋め草の "Please could you very kindly go ahead and" が削除され、意味は変わりません。
できること
CompactPrompt には、プロンプトのサイズを縮小する方法が複数用意されています。それぞれ単独でも、組み合わせても使用できます。以下では、各方法を平易な言葉で説明し、必要に応じて技術的な詳細も記載します。
重要度の低い表現を削除する
会話上の埋め草など、意味をほとんど持たない単語を取り除き、意味を担う単語を残します。この方法は不可逆です。削除した単語は復元できませんが、結果はそのまま使用できます。
from compactprompt import CompactPrompt
# Remove approximately 40% of the tokens
result = CompactPrompt.compact(prompt, ratio=0.4)
# Or target a specific size
result = CompactPrompt.compact(prompt, budget=64)
技術的な詳細
各単語には、一般的な希少性(静的自己情報量)と、文脈内での予測しやすさ(小規模言語モデルによる動的自己情報量)を組み合わせた情報スコアが割り当てられます。スコアの低い単語は削除されます。spaCy を使って文法上のまとまりを単位に削除するため、結果の読みやすさが保たれ、固有名詞と数字も保護されます。これは CompactPrompt 論文で提案された融合ルールを実装したものです。
繰り返し表現を可逆的に短縮する
同じ表現が繰り返される場合は短いプレースホルダーに置き換え、各プレースホルダーが何を表すかをキーに記録します。この方法は可逆で、いつでも元のテキストを正確に復元できます。
import compactprompt as cp
doc = "operating cash flow rose. operating cash flow fell. operating cash flow held."
abbr = cp.abbreviate(doc, n=3)
print(abbr.text) # '@0 rose. @0 fell. @0 held.'
print(abbr.dictionary) # {'@0': 'operating cash flow'}
print(abbr.restore()) # the exact original
後でプレースホルダーを展開できるように、abbr.dictionary は保持してください。
数値データのサイズを縮小する
数値を含む大きな表は、多くのトークンを消費します。これは既知の上限を超えないように丸めながら、精度を下げてサイズを節約します。
import compactprompt as cp
q = cp.quantize([1.0, 2.5, 3.3, 4.8, 9.2, 10.0], bits=8)
q.reconstruct() # the rounded values
q.max_error # the guaranteed maximum error
代表的な例を選ぶ
モデルは少数の例を示すと、より良い性能を発揮します。候補となる例が多数ある場合は、全体の範囲を反映する多様な少数の例を選び、すべてではなく代表的な例だけを送信できます。
from compactprompt import select_examples
chosen = select_examples(my_examples)
chosen.examples
表現の短縮方法を選ぶ
表現を短縮するステップには、互換性のある3種類のエンジンを使用できます。どのエンジンもテキストを短くしますが、削除する内容の決め方と、実行に必要なものが異なります。engine 引数で1つ選択してください。それ以外のコードを変更する必要はありません。
| エンジン | 方法 | 要件 |
|---|---|---|
| 組み込み(デフォルト) | 各単語をスコア付けし、有用性が最も低いものを削除します。ローカルで動作します。 | なし |
| LLMLingua | Microsoft の実績あるツールです。小型モデルを使って、削除する内容を決定します。 | モデルをダウンロードします |
| Caveman | コード、リンク、見出しを保持しながら、簡潔なスタイルでテキストを書き換えます。 | 言語モデルへのアクセス |
CompactPrompt.compact(prompt) # built-in, no extra install
CompactPrompt.compact(prompt, engine="llmlingua") # pip install 'compactprompt[llmlingua]'
CompactPrompt.compact(prompt, engine="caveman") # pip install 'compactprompt[caveman]'
組み込みエンジンとその他の主要機能は、 CompactPrompt 研究論文を実装しています。LLMLingua と Caveman は、このライブラリが統合する独立したオープンソースツールです。謝辞をご覧ください。
ファイルとスキルの圧縮
CompactPrompt は、文字列だけでなく、ドキュメント、CLAUDE.md、メモ、Claude Code のスキル(SKILL.md)など、Markdown ファイル全体も圧縮できます。まずファイルやフォルダーをレビューして、どこを短縮できるかを報告することもできます。
安全性を考慮した設計です。YAML フロントマターはそのまま保持され、フェンス付きコードブロックとリンクは変更されません。見出し、コードブロック、URL が変更される場合は結果が拒否されます。また、--apply を指定しない限り、何も書き込まれません(適用前に .bak バックアップが保存されます)。コード、設定ファイル、シークレットに見えるファイルは自動的にスキップされます。
コマンドラインから実行する場合:
# See where the savings are (read-only)
compactprompt review ./skills
# Preview the compaction of one skill (writes nothing)
compactprompt compact ./skills/my-skill/SKILL.md --engine builtin
# Apply it (saves SKILL.md.bak, then rewrites the file)
compactprompt compact ./skills/my-skill/SKILL.md --engine caveman --apply
--engine は必須です。毎回 builtin、llmlingua、caveman のいずれかを選択してください(文章を書き換える caveman は、人が読むファイルに通常最適です)。
Python から実行する場合:
from compactprompt import review_file, compact_file
report = review_file("SKILL.md")
print(report.tokens, report.issues)
result = compact_file("SKILL.md", engine="caveman", apply=True)
print(result.tokens_before, "->", result.tokens_after)
Streamlit アプリの ファイルとスキル タブからも、同じ操作を対話形式で行えます。
オプション機能
基本インストールではセットアップは不要です。追加機能には追加コンポーネントが必要で、必要に応じてインストールできます。
pip install compactprompt # core: trimming and reversible shortening
pip install 'compactprompt[ml]' # numeric reduction and example selection
pip install 'compactprompt[llmlingua]' # the LLMLingua engine
pip install 'compactprompt[caveman]' # the Caveman engine
pip install 'compactprompt[mcp]' # the MCP server for AI agents
pip install 'compactprompt[app]' # the interactive application
pip install 'compactprompt[all]' # everything
機能に必要なコンポーネントがインストールされていない場合、CompactPrompt はインストールが必要なものを正確に報告します。
インタラクティブアプリケーション
小さなウェブアプリケーションにプロンプトを貼り付けると、短縮結果を確認できます。短縮の進行に合わせて、削減量も表示されます。
pip install 'compactprompt[app]'
streamlit run compactprompt_app.py
ブラウザーで開きます。サイドバーでエンジンを選び、削除する量を設定してください。
AI エージェントから使用する
CompactPrompt には MCP サーバー が付属しており、AI コーディングツール(Claude Code、Codex、Cursor、Gemini、および MCP 対応エージェント)からプロンプト、ドキュメント、スキルを直接レビューして圧縮できます。
pip install 'compactprompt[mcp]' # provides the `compactprompt-mcp` command
claude mcp add compactprompt -- compactprompt-mcp # e.g. for Claude Code
agent-skills/ ディレクトリには、同じツールで使える軽量なスキル/ルールファイルと install.sh もあります。ツールごとの設定については、READMEをご覧ください。
意味が保持されていることを確認する
短縮後のプロンプトが元と同じ意味を保っているか確認するには、元のプロンプトと結果の類似度を測定できます。1.0 は意味が同一であることを示します。
from compactprompt import cosine_fidelity # pip install 'compactprompt[embeddings]'
score = cosine_fidelity(original_text, result.text)
print(score.mean)
リファレンス
CompactPrompt.compact(...) は、次のフィールドを持つ結果オブジェクトを返します。
| フィールド | 意味 |
|---|---|
.text | 短縮後のプロンプトです。 |
.original | 入力です。 |
.tokens_before / .tokens_after | 短縮前後のサイズです。 |
.ratio | 何倍小さくなったかを示します(例:2.3)。 |
.savings | 削減されたトークンの割合です(例:0.4)。 |
.dictionary | 使用した場合、短縮したフレーズを復元するためのキーです。 |
.restore() | 可逆な短縮ステップを元に戻します。 |
主なオプション:
CompactPrompt.compact(
prompt,
ratio=0.5, # how much to remove: 0.5 targets about half the tokens
budget=None, # alternatively, a specific target token count
prune=True, # trim the wording (default)
abbreviate=False, # also shorten repeated phrases (reversible)
engine="builtin", # "builtin", "llmlingua", or "caveman"
)
詳細オプションを含む完全なリファレンスは、ドキュメントをご覧ください。
開発
テストを実行します。
pip install pytest
pytest
テストスイートは依存関係のないコアを対象に実行されます。オプション機能のコンポーネントが存在しない場合、それらのテストは自動的にスキップされます。
ドキュメントをローカルでビルドします。
pip install 'compactprompt[docs]'
mkdocs serve
引用
このライブラリは、以下の手法を実装しています。
@article{choi2025compactprompt,
title={CompactPrompt: A Unified Pipeline for Prompt and Data Compression in LLM Workflows},
author={Choi, Joong Ho and Zhao, Jiayang and Shah, Jeel and Sonawane, Ritvika and
Singh, Vedant and Appalla, Avani and Flanagan, Will and Condessa, Filipe},
journal={arXiv preprint arXiv:2510.18043},
year={2025}
}
独立した実装であり、この論文の著者とは関係ありません。
謝辞
Caveman エンジン(compactprompt/caveman.py)は、Julius Brussee 氏による
Caveman(MIT ライセンス)を基にしています。
LLMLingua エンジンは、Microsoft による LLMLingua(MIT ライセンス)を使用しています。サードパーティに関するすべての謝辞およびライセンス表記は、
THIRD_PARTY_NOTICES.md に記載されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。