Open-Prompt-Injection は、プロンプトインジェクション(プロンプトインジェクション)の攻撃と防御のための オープンソースのツールキットであり、MIT ライセンスで公開されている。その目的は、研究者が攻撃、防御、そしてそれらが 適用される LLM 統合アプリケーションやエージェントを実装・評価・拡張できるようにすることだとされている。また、 このリポジトリは LLM におけるプロンプトインジェクションの攻撃と防御のベンチマークを提供するものとも説明されている。
このツールキットが扱う抽象化は、ターゲットタスク(target task)とインジェクションタスク(injected task)の 組み合わせである。アプリケーションは本来実行すべきタスクを中心に構築され、攻撃者はアプリケーションが処理する データに別のタスクを注入する。README の実例では、ターゲットタスクを SST-2 上の感情分析、インジェクションタスクを SMS スパムデータセット上のスパム検出としている。
機能
ライブラリは、各部品を組み立てるファクトリ関数を通じて使用する。モデル設定からモデルを作る create_model、
ターゲットタスクと(for_injection=True を指定した場合の)インジェクションタスクの両方を作る create_task、
攻撃戦略のための create_attacker、タスクとモデルを指定された防御でラップする create_app、そして結果を
スコアリングする create_evaluator である。報告される指標は ASV と呼ばれ、評価器がターゲットタスクの応答、
インジェクションタスクの応答、攻撃の応答から算出する。README はこの略語を展開せずに用いている。測定する防御、
攻撃戦略、ターゲットタスクを変更するには、コードを編集するのではなく、設定ファイルとそれらのファクトリ関数への
引数を差し替えればよい。
モデルの設定は configs/model_configs/ 以下の JSON ファイルで行い、API キーはユーザーが記入する。README は
キーの入手先を説明する際に PaLM 2、Meta の Llama モデル、OpenAI の GPT モデルを挙げており、検出器と
箇所特定器の例では Mistral の設定を読み込んでいる。
関連論文の実験一式は run.py から実行され、これは configs/experiment_matrix.json にある宣言的なマトリクスを
読み込む。別のマトリクスは --matrix-config で指定でき、--dry-run はモデルのプロセスを起動せずにパスを検証し、
すべてのコマンドを表示する。ランナーは各子プロセスを直接追跡し、いずれかの実験が失敗すると非ゼロで終了する。
応答アーカイブには設定のフィンガープリントが付与され、それが現在の実験と一致する場合にのみ再利用される。
そのメタデータを持たない古いアーカイブも読み込めるが、警告が出る。
防御コンポーネント
ツールキットには名前付きの防御コンポーネントが 2 つ含まれており、いずれもファインチューニング済みの チェックポイントとして別途ダウンロードする形で配布されている。
DataSentinel はプロンプトインジェクションの検出器である。モデル設定とファインチューニング済みチェックポイントの
パスから DataSentinelDetector を構築し、その detect メソッドをプロンプトに対して呼び出す。PromptLocate は
プロンプトインジェクションの箇所特定器(localizer)であり、LoRA アダプタから読み込まれる。その
locate_and_recover(prompt, target_instruction) は復元されたプロンプトと箇所を特定したプロンプトの両方を返す。
つまり、「Prompt Injection Localization」という節見出しのもとで、インジェクションが存在するかどうかだけでなく、
それが入力のどこにあるかも答える。
リポジトリはこれらを組み合わせて防御パイプラインを構成できるものとして提示している。まず DataSentinel が プロンプトが汚染されているかどうかを判定し、汚染が検出された場合にのみ PromptLocate を適用して箇所の特定と データの復元を行う。README は、今後さらなる検出器とファインチューニング用のコードを公開するとしている。
導入とエコシステム
リポジトリは、攻撃クラスそのものの背景知識として、プロンプトインジェクションに関するスライド一式を紹介している。
これは Safer with Google Summit 2025 で行われたプレゼンテーションの拡張版と説明されている。セットアップは、
リポジトリの environment.yml から作成する conda 環境で行う。