นี่คือ codebase ของ imprompter
โดยให้องค์ประกอบที่จำเป็นในการทำซ้ำและทดสอบการโจมตีที่นำเสนอในรายงาน คุณสามารถสร้างการโจมตีของคุณเองได้เช่นกัน
ภาพหน้าจอที่แสดงให้เห็นว่าผู้โจมตีสามารถเจาะข้อมูล PII ของผู้ใช้ในผลิตภัณฑ์ LLM ในโลกแห่งความเป็นจริง (Mistral LeChat) ได้อย่างไรด้วยการแจ้งเตือนจากฝ่ายตรงข้าม:
สามารถดูวิดีโอสาธิตเพิ่มเติมได้ที่เว็บไซต์ของเรา ในขณะเดียวกัน ขอขอบคุณ Matt Burges จาก WIRED และ Simon Willison อย่างยิ่งสำหรับการเขียนเรื่องราวดีๆ (WIRED, Simon's Blog) ที่ครอบคลุมโครงการนี้
ตั้งค่าสภาพแวดล้อมหลามด้วย pip install .
หรือ pdm install
(pdm) เราขอแนะนำให้ใช้สภาพแวดล้อมเสมือนจริง (เช่น conda
กับ pdm venv
)
สำหรับ GLM4-9b
และ Mistral-Nemo-12B
ต้องใช้ GPU VRAM ขนาด 48GB สำหรับ Llama3.1-70b
ต้องใช้ VRAM 3x 80GB
มีไฟล์กำหนดค่าสองไฟล์ที่ต้องได้รับการดูแลก่อนที่คุณจะเรียกใช้อัลกอริทึม
./configs/model_path_config.json
กำหนดพาธของโมเดล Huggingface บนระบบของคุณ คุณน่าจะต้องแก้ไขสิ่งนี้ตามนั้น
./configs/device_map_config.json
กำหนดค่าการแมปเลเยอร์สำหรับการโหลดโมเดลบน multi-gpu เราแสดงกรณีการกำหนดค่าของเราสำหรับการโหลด LLama-3.1-70B บน 3x Nvidia A100 80G GPU คุณอาจต้องปรับเปลี่ยนสิ่งนี้ให้สอดคล้องกับสภาพแวดล้อมการคำนวณของคุณ
ทำตามตัวอย่างสคริปต์การดำเนินการ เช่น . ./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>
ให้กับสคริปต์การดำเนินการดั้งเดิม
การประเมินผลทำได้ผ่าน evaluation.ipynb
ปฏิบัติตามคำแนะนำโดยละเอียดจากรุ่นสู่รุ่นโดยเทียบกับชุดข้อมูลการทดสอบ การคำนวณเมตริก ฯลฯ
กรณีพิเศษประการหนึ่งคือตัววัด PII prec/recall มีการคำนวณแบบสแตนด์อโลนด้วย pii_metric.py
โปรดทราบว่า --verbose
จะให้รายละเอียด PII แบบเต็มของรายการสนทนาแต่ละรายการสำหรับการดีบัก และ --web
ควรเพิ่มเมื่อได้รับผลลัพธ์จากผลิตภัณฑ์จริงบนเว็บ
ตัวอย่างการใช้งาน (ผลลัพธ์ที่ไม่ใช่เว็บ เช่น การทดสอบในเครื่อง):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/local_evaluations/T11.json
ตัวอย่างการใช้งาน (ผลลัพธ์จากเว็บ เช่น การทดสอบผลิตภัณฑ์จริง):
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
สองตัวเลือก
--browser
กำหนดเบราว์เซอร์ที่จะใช้ คุณควรใช้ chrome
หรือ edge
--dataset
ชี้ไปที่ชุดข้อมูลการสนทนาที่จะทดสอบ
--prompt_pkl
อ้างถึงไฟล์ pkl เพื่ออ่านพร้อมท์จาก และ --prompt_idx
กำหนดดัชนีลำดับของพร้อมท์ที่จะใช้จาก pkl อีกทางหนึ่ง อาจกำหนดพรอมต์ใน main.py
โดยตรง และไม่มีตัวเลือกทั้งสองนี้ให้
เราจัดเตรียมสคริปต์ทั้งหมด ( ./scripts
) และชุดข้อมูล ( ./datasets
) เพื่อรับคำแนะนำ (T1-T12) ที่เรานำเสนอในรายงาน นอกจากนี้ เรายังจัดเตรียมไฟล์ผลลัพธ์ pkl ( ./results
) สำหรับแต่ละพร้อมท์ ตราบใดที่เรายังคงเก็บสำเนาและผลการประเมิน ( ./evaluations
) ที่ได้รับจาก evaluation.ipynb
โปรดทราบว่าสำหรับการโจมตีด้วยการกรอง PII ชุดข้อมูลการฝึกอบรมและการทดสอบจะมี PII ในโลกแห่งความเป็นจริง แม้ว่าข้อมูลเหล่านั้นจะได้มาจากชุดข้อมูล WildChat สาธารณะ แต่เราตัดสินใจที่จะไม่เปิดเผยข้อมูลเหล่านี้ต่อสาธารณะโดยตรงเนื่องจากข้อกังวลด้านความเป็นส่วนตัว เราจัดเตรียมชุดข้อมูลชุดย่อยรายการเดียวไว้ที่ ./datasets/testing/pii_conversations_rest25_gt_example.json
เพื่อเป็นข้อมูลอ้างอิง โปรดติดต่อเราเพื่อขอเวอร์ชันที่สมบูรณ์ของชุดข้อมูลทั้งสองนี้
เราเริ่มการเปิดเผยข้อมูลต่อทีม Mistral และ ChatGLM ในวันที่ 9 กันยายน 2024 และ 18 กันยายน 2024 ตามลำดับ สมาชิกในทีมรักษาความปลอดภัย Mistral ตอบสนองทันทีและยอมรับว่าช่องโหว่นี้เป็น ปัญหาระดับความรุนแรงปานกลาง พวกเขาแก้ไขการขโมยข้อมูลด้วยการปิดใช้งานการเรนเดอร์มาร์กดาวน์ของรูปภาพภายนอกเมื่อวันที่ 13 กันยายน 2024 (ค้นหาการรับทราบในบันทึกการเปลี่ยนแปลงของ Mistral) เรายืนยันว่าการแก้ไขใช้งานได้ ทีม ChatGLM ตอบกลับเราเมื่อวันที่ 18 ต.ค. 2024 หลังจากพยายามสื่อสารหลายครั้งผ่านช่องทางต่างๆ และระบุว่าได้เริ่มทำงานแล้ว
โปรดพิจารณาอ้างอิงบทความของเราหากคุณพบว่างานนี้มีคุณค่า
@misc{fu2024impromptertrickingllmagents, title={Imprompter: หลอกตัวแทน LLM ให้ใช้เครื่องมือที่ไม่เหมาะสม}, ผู้เขียน={Xiaohan Fu และ Shuheng Li และ Zihan Wang และ Yihao Liu และ Rajesh K. Gupta และ Taylor Berg-Kirkpatrick และ Earlence Fernandes}, ปี={2024}, eprint={2410.14923}, archivePrefix={arXiv}, primaryClass={cs.CR}, url={https://arxiv.org/abs/2410.14923}, -