
الكود وسجلات الاستجابة والتسميات الخاصة بالورقة البحثية "Jailbreaking Open-Weight LLMs via Random Embedding Perturbations"
شيفرة وبيانات الورقة البحثية Jailbreaking Open-Weight LLMs via Random Embedding Perturbations.
رابط النسخة الأولية من الورقة البحثية - https://arxiv.org/abs/2610.07125
من تأليف الأشخاص الرائعين في قسم علوم الحاسوب النظرية بجامعة كاليفورنيا، سانتا كروز.
يحمل هذا العمل مساهمات كبيرة من Scott Sirri، والأستاذ Vaggos Chatziafratis، والأستاذ C. Seshadhri، وأنا.
يحتوي المستودع على كل استجابة نموذج تم توليدها للورقة البحثية، وتصنيف كل استجابة كآمنة / غير آمنة /
منحطة، ودفاتر Colab التي أنتجتها، ونصوص الاستدلال
التي تستوردها الدفاتر. يغطي هذا هجوم متجه التضمين المُضطرب (PEV) وطرق كسر الحماية الخمس الأخرى
المقارنة في الورقة البحثية. تُحسب جميع معدلات كسر الحماية وأوقات التنفيذ الفعلي في
الورقة البحثية من الملفات الموجودة في results/.
code/
inference/ run_<model>.py: model loading, prompt construction and the manual
generation loop that every PEV notebook imports
ours/<model>/ PEV notebooks for one model
ours/<model>/fixed_peak_sigma/
notebooks for the fixed peak sigma runs (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B); their logs are in results/<model>/ours/fixed_peak_sigma/
igcg/ I-GCG, one notebook per model
latentfusion/ LatentFusion, one notebook per model
refusalcones/ RefusalCones, one notebook per model
softprompt/ SoftPrompt notebooks (Llama-3.1-8B and Mistral-7B)
figures/ notebook that draws the paper figures
results/<model>/
baseline/ direct responses to the unperturbed prompts (.txt log) and their
labels (.xlsx / .csv); these give the baseline jailbreak rate
ours/raw_responses/ PEV response logs from the sigma sweeps, split by prompt range
ours/classified/ labels for those responses, split the same way
ours/fixed_peak_sigma/ PEV runs at the fixed peak sigma of the model (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B): the full 100-prompt sweep and the SELECT re-runs
igcg/ latentfusion/ neurostrike/ refusalcones/ softprompt/
responses (.txt) and labels (.xlsx) for the other methods
النماذج: Qwen2.5-1.5B، SmolLM3-3B، Phi-4-mini، Mistral-7B-Instruct، Llama-3.1-8B،
GLM-4-9B، والمتغيرات المحادثة المضبوطة بالتعليمات المذكورة في القسم 4 من الورقة.
أين توجد شيفرة كل طريقة:
| الطريقة | الموقع |
|---|---|
| PEV | code/ours/<model>/؛ تشغيلات sigma الثابتة للذروة في code/ours/<model>/fixed_peak_sigma/؛ شيفرة الاستدلال المشتركة في code/inference/ |
| I-GCG | code/igcg/، دفتر ملاحظات واحد لكل نموذج |
| LatentFusion | code/latentfusion/، دفتر ملاحظات واحد لكل نموذج |
| RefusalCones | code/refusalcones/، دفتر ملاحظات واحد لكل نموذج |
| SoftPrompt | code/softprompt/، Llama-3.1-8B وMistral-7B |
| NeuroStrike | داخل دفاتر ملاحظات PEV code/ours/Llama-3.1-8B/LLama31_perturbation_p76_to_p100.ipynb (خلية الإعداد موجودة أيضاً في LLama31_perturbation_p1_to_p25.ipynb) وcode/ours/SmolLM3-3B/run_smollm3_batched_p26_p50.ipynb؛ تُكتب الاستجابات في results/<model>/neurostrike/ |
code/inference/run_<model>.py هو ملف واحد لكل نموذج (run_qwen.py، run_smollm3.py،
run_phi4mini.py، run_mistral.py، run_llama.py، run_glm.py). يحمّل كل منها النموذج باستخدام
HuggingFace Transformers، ويطبّق قالب المحادثة برسالة نظام فارغة، ويكشف الدوال
load_model() وbuild_prompt() وencode_prompt()، ويشغّل حلقة توليد تلقائي انحداري يدوياً
مع خطاف على تضمينات الإدخال. تستورد دفاتر الملاحظات السكربت الخاص بنموذجها
وتحقن ضوضاء غاوسية عبر ذلك الخطاف. عند تشغيله منفرداً، يفتح السكربت
طرفية تفاعلية لنموذج واحد؛ وتطبع الأوامر /verbose و/embedfile جداول
الرموز ومتجهات التضمين. مفاتيح تبديل الجهاز والسلوك هي متغيرات بيئة
موثّقة في ترويسة كل ملف. يحتاج سكربت Llama إلى رمز Hugging Face لأن
نقطة التحقق محمية؛ يُقرأ الرمز من البيئة ولا يُخزَّن أبداً.
.txt) هي سجلات إضافية فقط تُكتب بواسطة دفاتر الملاحظات. يسجّل كل إدخال
فهرس المطالبة، ومستوى الضوضاء sigma حيث ينطبق، ورقم التشغيل، والاستجابة
الكاملة للنموذج. تحمل أسماء الملفات نطاق المطالبات (p001_to_p025 يعني المطالبات من 1 إلى 25 من
مطالبات JailbreakBench الضارة البالغ عددها 100) والطابع الزمني UTC للتشغيل. يُكتب الوقت الفعلي
بعد كل دفعة من 20 تشغيلاً لكل مطالبة وفي نهاية التجربة..xlsx، .csv) تحتوي على صف واحد لكل استجابة مع تصنيفها، آمنة أو غير آمنة أو
منحطة، كما هو معرّف في القسم 4 من الورقة. تُحتسب المطالبة كأنها جرى كسر حمايتها إذا صُنّف أي من
تشغيلاتها على أنه غير آمن. الملفات المسماة *_categorization* أو بنمط *_p01_25 هي
النسخ المصنّفة من السجل بنفس نطاق المطالبات.ours/fixed_peak_sigma/) مسماة
JBB_<model>_sigma0pXXX_..._<timestamp>.txt؛ sigma0p003 يعني sigma = 0.003. ملف
p001_to_p100 هو المسح الكامل لـ 100 مطالبة و20 تشغيلاً عند قيمة sigma تلك. ملفات
SELECT_..._nNN هي تشغيلات متابعة عند نفس sigma على المطالبات المدرجة في
اسم الملف، مع NN تشغيلاً لكل مطالبة.HIGHSIGMA هي التشغيلات عند sigma أكبر التي نوقشت في القسم 4.1.SELECT هي تشغيلات إضافية على المطالبات المدرجة في اسم الملف، من أجل
المطالبات التي احتاجت أكثر من 20 تشغيلاً لكسر حمايتها. يسجّل سطر الترويسة في كل سجل
قيم sigma، وعدد التشغيلات، ومعرّفات المطالبات، والبذرة العشوائية.Llama-3.1-8B/baseline/fixed_baseline.xlsx وملفات التصنيف fixed_* هي ملفات التصنيف
بعد التحقق اليدوي وتحل محل الإصدارات السابقة.صُنّفت الاستجابات بواسطة Claude Opus 4.6 باستخدام تعليمات حكم JailbreakBench، مع إعطائه
ملف السجل الذي يتضمن المطالبة ورقم التشغيل والاستجابة. ثم جرى فحص كل استجابة
صُنّفت على أنها غير آمنة يدوياً. ملفات التصنيف في results/ هي التصنيفات المتحقق منها.
تم تشغيل كل دفتر ملاحظات ضمن code/ours/<model>/ على وحدة NVIDIA A100-SXM4-80GB واحدة في Google
Colab. يستورد دفتر الملاحظات الملف المطابق run_<model>.py، ويحمّل مطالبات JailbreakBench الضارة،
ويمرّر كل مطالبة عبر طبقة التضمين المدخلة الخاصة بالنموذج، ويضيف ضوضاء غاوسية مستقلة
N(0, sigma^2) إلى تضمين المطالبة الكامل، ثم يمرّر التضمين المُشوَّش إلى
طبقات المحوّل. ولكل مطالبة، يأخذ عينات من 20 مصفوفة ضوضاء في دفعة واحدة ويُلحق كل
استجابة بالسجل. تُدرَج معاملات فك الترميز وقيمة sigma الخاصة بكل نموذج في القسم 4 و
الجدول 3 من الورقة، وتُضبط في أعلى كل دفتر ملاحظات. يُطلب رمز Hugging Face
تفاعليًا ولا يُخزَّن في هذا المستودع. تتبع دفاتر الملاحظات الخاصة بالطرق الأخرى
النمط نفسه مع استبدال الهجوم المقابل.
يمكن إعادة حساب معدلات كسر الحماية (jailbreak) الواردة في الورقة من ملفات التسميات وحدها، دون تشغيل أي نموذج.