Skip to content

Latest commit

 

History

History
201 lines (131 loc) · 8.69 KB

File metadata and controls

201 lines (131 loc) · 8.69 KB
eXprompt

eXprompt

LLM のための逆 T9。 AI プロンプトとエージェントのための、無料・オープンソースの CLI プロキシ型プロンプト圧縮ツール。

Pure Go No ML No network MIT licensed

English · Español · Français · Deutsch · 日本語 · Українська


1 秒で体感する

$ exprompt 'Actually I think you should really check if the API returns correct JSON'

  → chk if the API rtrns crct JSON

  ███████████░░░░░░░░░  56% saved · 31 chars · 2 passes · <1ms

  ✓ copied to clipboard

結果はクリップボードに入っているので、そのまま ChatGPT、Claude、その他どこにでも貼り付けられます。


eXprompt とは

モデルに送る前の AI プロンプトを 25〜50% 短くする小さな CLI ツールです。フィラー(間投詞・冗長な言い回し)を取り除き、よく使われる単語を短縮形に置き換え、技術用語(APIJSONcamelCasefunc()、数値、ファイル名)は絶対に変えないように保護します。

完全ローカル モデルは動かさず、ネットワーク通信もせず、データはマシンの外に出ません。テキスト入力、テキスト出力。
決定論的 辞書ベース。同じ入力なら必ず同じ出力。
組み合わせ可能 実行ごとにフィルタを切り替えたり、exprompt config set で設定を保存できます。
小さい 単一の静的 Go バイナリ。現実的なプロンプトなら 1 ms 未満で処理します。
開かれている MIT ライセンス。すべての変換は読める JSON ファイルで、フォークや拡張が自由です。

目的としないこと: 意味の書き換え(LLM による書き換えはしません)、翻訳、推論プロキシとして振る舞うこと。


こんなときに嬉しい

  • API 課金を圧縮。 トークンは課金対象。eXprompt は入力側を 1/3 ほど削っても、モデルの回答は変えません。
  • コンテキストウィンドウに余白。 同じ予算でより多くの情報を入れられる。長い会話、コードレビュー、RAG に効きます。
  • プロンプトが速い。 小さいテキストはネットを早く通り、モデル側のプリフィルも速くなります。
  • コマンド 1 つ、ロックインなし。 出力はただのテキストなので、ChatGPT・Claude・Gemini・Llama など、どの LLM でも使えます。
  • 邪魔をしない。 Claude Code に一度フックすれば、その存在を忘れていられます。

どう動くか

決定論的な固定チェーンがテキスト全体に適用されます。出力が変化しなくなるまで(最大 3 パス)チェーン全体を繰り返し実行します。これにより、単語単位の除去によって複数語のフレーズが再び連続したとき、次のパスでそれを捕まえられます。

flowchart TD
    Input([あなたのプロンプト]) --> P[<b>Anchors.Protect</b><br/>func、大文字語、ファイル名、<br/>camelCase、数値などを<br/>§A0 §A1 … に置換]
    P --> Punct[<b>句読点</b> 除去<br/>, . ! ? ; : ' &quot;]
    Punct --> AbbP[<b>略語.フレーズ</b><br/>多語、元のテキスト上で実行<br/><i>that is → i.e.</i>]
    AbbP --> Fil[<b>フィラー</b><br/>フレーズ → 単語 → フレーズ再実行<br/>+ 代名詞クリーンアップ]
    Fil --> AbbW[<b>略語.単語</b><br/>1 語、フィラー除去のあと<br/><i>you→u, should→shld, and→&amp;</i>]
    AbbW --> Vow[<b>母音抜き</b><br/>BETA、既定オフ]
    Vow --> Rest[<b>Anchors.Restore</b><br/>§A0 → 元のテキスト]
    Rest --> Orph[<b>孤立した "I" のクリーンアップ</b><br/><i>I tht the X → the X</i>]
    Orph --> WS[<b>空白の圧縮</b>]
    WS --> Conv{前パスと<br/>同一か?}
    Conv -- いいえ、変化あり --> P
    Conv -- はい、収束 --> Out([圧縮済みプロンプト])
Loading

ループが必要な理由: "I honestly think that the createUserTable() function should be documented" の場合、パス 1 では "I think that" は連続していません("honestly" が間にある)。パス 1 で "honestly" を除去すると、パス 2 では "I think that" が連続したフィラーフレーズとして検出され、削除されます。パス 3 で変化なしを確認 — 完了です。


インストール

ゴール:どのフォルダからでも exprompt が使えること。

macOS / Linux — Homebrew(推奨)

brew install bladysh/tap/exprompt
exprompt -v

更新:brew upgrade exprompt。削除:brew uninstall exprompt

Windows — Scoop(推奨)

scoop bucket add bladysh https://github.com/bladysh/scoop-bucket
scoop install exprompt
exprompt -v

更新:scoop update exprompt。削除:scoop uninstall exprompt

ビルド済みバイナリ

最新リリースページ から対応するアーカイブをダウンロードして展開し、expromptPATH に配置してください。

ソースから

git clone https://github.com/bladysh/exprompt.git
cd exprompt
make install          # /usr/local/bin/ にコピー(sudo を要求)
exprompt -v

基本的な使い方

⚠️ プロンプトは必ずクォートで囲んでください。 シングルクォートが最も安全です — そうしないとシェルが ( ) $ ! " などを exprompt に渡す前に解釈してしまいます。

exprompt 'あなたのプロンプト'             # 既定動作: 圧縮
echo 'プロンプト' | exprompt              # stdin から読み込む
exprompt --stdin -q --no-copy < prompt.txt
exprompt '...' --no-copy                 # クリップボードを触らない
result=$(exprompt '...' -q)              # 圧縮結果を変数へ
exprompt '...' --disable fillers         # 特定フィルタを無効化

エディタ連携

Claude Code

cd プロジェクト
exprompt hook claude        # .claude/settings.json に UserPromptSubmit フックを書き込む

これでそのフォルダで Claude Code に送るプロンプトはすべて事前に圧縮されます。フックはバイナリの 絶対パス を保存するので、PATH に依存しません。解除:exprompt hook remove。状態確認:exprompt hook status


ライブラリとして

pkg/exprompt は公開 Go パッケージです — CLI を介さず、自分のコードからパイプラインを使えます。

go get github.com/bladysh/exprompt
import "github.com/bladysh/exprompt/pkg/exprompt"

p := exprompt.NewPipeline("en")
r, _ := p.Compress("Actually you should test the API")

fmt.Println(r.Text)     // "test the API"
fmt.Println(r.Savings)  // 0.42(0.0〜1.0)
fmt.Println(r.Passes)   // 2(実際に動いたパス数)

実行可能なサンプルは examples/ にあります。


さらに詳しく

詳細な設定、母音抜きフィルタ(BETA)、savings コマンド、セキュリティ、プロジェクト構成、貢献ガイドは 英語版 README にあります。


ライセンス

MIT — 完全にオープンソース、制限なし。

巨人の肩の上に

英語のフィラー/ヘッジ辞書は、Titus Wormer さんの MIT ライセンスの単語リストを出発点にしています。その後プロンプト圧縮向けに大幅に拡張・整理・再構成しましたが、元のリポジトリがこのプロジェクトを可能にした種でした。大いに感謝します:

元の MIT ライセンス全文(私たちが採用したエントリのために保持)は、対応するデータの隣にある pkg/filters/dictionaries/README.md にあります。


Go 製 · LLM に丁寧すぎるあなたに。