Ini adalah basis kode dari imprompter
. Ini menyediakan komponen penting untuk mereproduksi dan menguji serangan yang disajikan dalam makalah. Anda juga dapat membuat serangan Anda sendiri di atasnya.
Screencast yang menunjukkan bagaimana penyerang dapat mengambil PII pengguna di produk LLM dunia nyata (Mistral LeChat) dengan perintah permusuhan kami:
Demo video lainnya dapat ditemukan di situs web kami. Sementara itu, terima kasih banyak kepada Matt Burges dari WIRED dan Simon Willison karena telah menulis cerita keren (WIRED, Blog Simon) yang meliput proyek ini!
Siapkan lingkungan python dengan pip install .
atau pdm install
(pdm). Kami merekomendasikan menggunakan lingkungan virtual (misalnya conda
dengan pdm venv
).
Untuk GLM4-9b
dan Mistral-Nemo-12B
diperlukan GPU VRAM 48GB. Untuk Llama3.1-70b
diperlukan VRAM 3x 80GB.
Ada dua file konfigurasi yang memerlukan perhatian potensial sebelum Anda menjalankan algoritme
./configs/model_path_config.json
mendefinisikan jalur model pelukan di sistem Anda. Kemungkinan besar Anda perlu mengubahnya.
./configs/device_map_config.json
mengonfigurasi pemetaan lapisan untuk memuat model pada multi-gpu. Kami menunjukkan konfigurasi kami untuk memuat LLama-3.1-70B pada 3x GPU Nvidia A100 80G. Anda mungkin perlu menyesuaikannya dengan lingkungan komputasi Anda.
Ikuti contoh skrip eksekusi misalnya ./scripts/T*.sh
. Penjelasan masing-masing argumen dapat ditemukan di Bagian 4 makalah kami.
Program optimasi akan menghasilkan hasil dalam file .pkl
dan log di folder ./results
. File acar memperbarui setiap langkah selama eksekusi dan selalu menyimpan 100 permintaan permusuhan teratas saat ini (dengan kerugian terendah). Ini disusun sebagai tumpukan minimum, yang bagian atasnya adalah perintah dengan kerugian terendah. Setiap elemen heap adalah tuple dari (<loss>, <adversarial prompt in string>, <optimization iteration>, <adversarial prompt in tokens>)
. Anda selalu dapat memulai ulang dari file acar yang ada dengan menambahkan argumen --start_from_file <path_to_pickle>
ke skrip eksekusi aslinya.
Evaluasi dilakukan melalui evaluation.ipynb
. Ikuti instruksi terperinci di sana dari generasi ke generasi terhadap pengujian kumpulan data, penghitungan metrik, dll.
Salah satu kasus khusus adalah metrik prec/recall PII. Mereka dihitung secara mandiri dengan pii_metric.py
. Perhatikan bahwa --verbose
memberikan detail PII lengkap Anda dari setiap entri percakapan untuk debugging dan --web
harus ditambahkan ketika hasilnya diperoleh dari produk nyata di web.
Contoh penggunaan (hasil non web yaitu tes lokal):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/local_evaluations/T11.json
Contoh penggunaan (hasil web yaitu pengujian produk nyata):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/product_evaluations/N6_lechat.json --web --verbose
Kami menggunakan Selenium untuk mengotomatiskan proses pengujian pada produk nyata (Mistral LeChat dan ChatGLM). Kami menyediakan kode di direktori browser_automation
. Perhatikan bahwa kami hanya menguji ini pada lingkungan desktop di Windows 10 dan 11. Ini seharusnya berfungsi juga di Linux/MacOS tetapi tidak dijamin. Mungkin perlu beberapa perubahan kecil.
Contoh penggunaan: 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
menentukan produk, saat ini kami mendukung chatglm
dan mistral
dua opsi.
--browser
mendefinisikan browser yang akan digunakan, Anda harus menggunakan chrome
atau edge
.
--dataset
menunjuk ke kumpulan data percakapan yang akan diuji
--prompt_pkl
merujuk file pkl untuk membaca prompt dari dan --prompt_idx
mendefinisikan indeks perintah dari prompt yang akan digunakan dari pkl. Alternatifnya, seseorang dapat mendefinisikan prompt di main.py
secara langsung dan tidak menyediakan dua opsi ini.
Kami menyediakan semua skrip ( ./scripts
) dan kumpulan data ( ./datasets
) untuk mendapatkan petunjuk (T1-T12) yang kami sajikan di makalah. Selain itu, kami juga menyediakan file hasil pkl ( ./results
) untuk setiap prompt selama kami masih menyimpan salinannya dan hasil evaluasinya ( ./evaluations
) diperoleh melalui evaluation.ipynb
. Perhatikan bahwa untuk serangan Eksfiltrasi PII, kumpulan data pelatihan dan pengujian berisi PII dunia nyata. Meskipun data tersebut diperoleh dari Kumpulan Data WildChat publik, kami memutuskan untuk tidak mempublikasikannya secara langsung karena alasan privasi. Kami menyediakan subkumpulan entri tunggal dari kumpulan data ini di ./datasets/testing/pii_conversations_rest25_gt_example.json
untuk referensi Anda. Silakan hubungi kami untuk meminta versi lengkap kedua dataset ini.
Kami memulai pengungkapan kepada tim Mistral dan ChatGLM masing-masing pada tanggal 9 September 2024 dan 18 September 2024. Anggota tim keamanan Mistral merespons dengan cepat dan mengakui kerentanan tersebut sebagai masalah dengan tingkat keparahan sedang . Mereka memperbaiki eksfiltrasi data dengan menonaktifkan rendering penurunan harga gambar eksternal pada 13 Sep 2024 (temukan pengakuan di log perubahan Mistral). Kami mengonfirmasi bahwa perbaikan berhasil. Tim ChatGLM menanggapi kami pada 18 Oktober 2024 setelah berbagai upaya komunikasi melalui berbagai saluran dan menyatakan bahwa mereka telah mulai mengerjakannya.
Silakan pertimbangkan untuk mengutip makalah kami jika Anda menganggap karya ini berharga.
@misc{fu2024impromptertrickingllmagents, title={Penyebab: Menipu Agen LLM agar Menggunakan Alat yang Tidak Tepat}, penulis={Xiaohan Fu dan Shuheng Li dan Zihan Wang dan Yihao Liu dan Rajesh K. Gupta dan Taylor Berg-Kirkpatrick dan Earlence Fernandes}, tahun={2024}, eprint={2410.14923}, arsipAwalan={arXiv}, Kelas utama={cs.CR}, url={https://arxiv.org/abs/2410.14923}, }