これはimprompter
のコードベースです。これは、論文で示されている攻撃を再現してテストするための重要なコンポーネントを提供します。 その上に独自の攻撃を作成することもできます。
攻撃者が敵対的なプロンプトを使用して、現実世界の LLM 製品 (Mistral LeChat) でユーザーの PII を漏洩する方法を示すスクリーンキャスト:
その他のビデオデモは当社の Web サイトでご覧いただけます。一方、このプロジェクトをカバーする素晴らしいストーリー (WIRED、サイモンのブログ) を書いてくれた『WIRED』のマット・バージェスとサイモン・ウィリソンに深く感謝します。
pip install .
またはpdm install
(pdm)。仮想環境 (例: conda
とpdm venv
) を使用することをお勧めします。
GLM4-9b
およびMistral-Nemo-12B
の場合は、48GB VRAM GPU が必要です。 Llama3.1-70b
の場合、3x 80GB VRAM が必要です。
アルゴリズムを実行する前に注意が必要な構成ファイルが 2 つあります。
./configs/model_path_config.json
、システム上のハグフェイス モデルのパスを定義します。おそらくこれをそれに応じて変更する必要があります。
./configs/device_map_config.json
、マルチ GPU にモデルをロードするためのレイヤー マッピングを構成します。 3x Nvidia A100 80G GPU に LLama-3.1-70B をロードする構成のケースを示します。コンピュータ環境に応じてこれを調整する必要がある場合があります。
実行スクリプトの例 ( ./scripts/T*.sh
など) に従ってください。各議論の説明は、論文のセクション 4 にあります。
最適化プログラムは、 .pkl
ファイルに結果を生成し、 ./results
フォルダーにログを生成します。 pickle ファイルは実行中のすべてのステップを更新し、常に現在の上位 100 の敵対的プロンプト (損失が最も少ないもの) を保存します。これは最小ヒープとして構造化されており、その最上部は損失が最も少ないプロンプトです。ヒープの各要素は(<loss>, <adversarial prompt in string>, <optimization iteration>, <adversarial prompt in tokens>)
のタプルです。元の実行スクリプトに--start_from_file <path_to_pickle>
引数を追加することで、いつでも既存の pickle ファイルから再開できます。
評価は、 evaluation.ipynb
を通じて行われます。データセットのテスト、メトリクスの計算などについては、世代に対する詳細な手順に従ってください。
特殊なケースの 1 つは、PII プレック/リコール メトリックです。これらはpii_metric.py
を使用してスタンドアロンで計算されます。 --verbose
デバッグ用に各会話エントリの完全な PII 詳細を提供し、Web 上の実際の製品から結果を取得する場合は--web
を追加する必要があることに注意してください。
使用例 (Web 以外の結果、つまりローカル テスト):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/local_evaluations/T11.json
使用例 (Web 結果、つまり実際の製品テスト):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/product_evaluations/N6_lechat.json --web --verbose
当社では Selenium を使用して、実際の製品 (Mistral LeChat および ChatGLM) のテスト プロセスを自動化しています。コードは、 browser_automation
ディレクトリに提供されます。これは Windows 10 および 11 のデスクトップ環境でのみテストしたことに注意してください。Linux/MacOS でも動作するはずですが、保証されていません。いくつかの小さな調整が必要になるかもしれません。
使用例: python browser_automation/main.py --target chatglm --browser chrome --output_dir test --dataset datasets/pii_conversations_rest25_gt.json --prompt_pkl results/T12.pkl --prompt_idx 1
--target
製品を指定します。現在、 chatglm
とmistral
2 つのオプションがサポートされています。
--browser
使用するブラウザを定義します。 chrome
またはedge
いずれかを使用する必要があります。
--dataset
、テストする会話データセットを指します。
--prompt_pkl
プロンプトを読み取る pkl ファイルを参照し、 --prompt_idx
pkl から使用するプロンプトの順序付きインデックスを定義します。あるいは、 main.py
でプロンプトを直接定義し、これら 2 つのオプションを提供しないこともできます。
この論文で説明するプロンプト (T1 ~ T12) を取得するためのすべてのスクリプト ( ./scripts
) とデータセット ( ./datasets
) を提供します。さらに、コピーと評価結果 ( ./evaluations
) を、 evaluation.ipynb
を通じて取得したまま保持している限り、各プロンプトの pkl 結果ファイル ( ./results
) も提供します。 PII 抽出攻撃の場合、トレーニング データセットとテスト データセットには現実世界の PII が含まれることに注意してください。これらは公開の WildChat データセットから取得したものですが、プライバシー上の懸念から直接公開しないことにしました。参照用に、これらのデータセットの単一エントリのサブセットを./datasets/testing/pii_conversations_rest25_gt_example.json
で提供します。これら 2 つのデータセットの完全なバージョンをリクエストするには、お問い合わせください。
当社は、それぞれ 2024 年 9 月 9 日にミストラル チーム、2024 年 9 月 18 日に ChatGLM チームへの開示を開始しました。ミストラル セキュリティ チームのメンバーはすぐに対応し、この脆弱性が中程度の重大度の問題であることを認めました。彼らは、2024 年 9 月 13 日に外部画像のマークダウン レンダリングを無効にすることでデータ漏洩を修正しました (Mistral の変更ログで確認を見つけてください)。修正が機能することを確認しました。 ChatGLM チームは、さまざまなチャネルを通じて複数のコミュニケーションを試みた後、2024 年 10 月 18 日に私たちに返信し、作業を開始したと述べました。
この研究に価値があると思われる場合は、私たちの論文を引用することを検討してください。
@misc{fu2024impromptertrickingllmagents、 title={インプロンプター: LLM エージェントをだまして不適切なツールを使用させる}, 著者={Xiaohan Fu、Shuheng Li、Zihan Wang、Yihao Liu、Rajesh K. Gupta、Taylor Berg-Kirkpatrick、Earlence Fernandes}、 年={2024}、 eprint={2410.14923}、 archivePrefix={arXiv}、 プライマリクラス={cs.CR}、 URL={https://arxiv.org/abs/2410.14923}、 }