
يحتوي هذا المستودع على التنفيذ الرسمي للورقة البحثية "[Safety in Batches? Understanding and Mitigating Safety Failures in Batch Prompting]"
Kihyun Kim, Hee-Seon Kim, Wonjun Lee, Changick Kim
معهد كوريا المتقدم للعلوم والتكنولوجيا (KAIST)
2026.09 تم قبول ورقتنا في AACL-IJCNLP 2026 (Main)! 🎉2026.08 الورقة متاحة على arXiv!2026.08 تم إصدار الكود!Batch prompting هي استراتيجية استدلال عملية تقوم بتجميع عدة استعلامات في استدعاء واحد. نوضح أن نجاحها من حيث الفائدة لا يمتد إلى السلامة: فالسؤال الضار الذي يُرفض بشكل موثوق عند تقديمه منفردًا يمكن أن يستدعي استجابة ضارة عند تضمينه في دفعة من الأسئلة الحميدة.
يوفر هذا المستودع الكود الرسمي من أجل:
git clone https://github.com/96kihyun/batch_jailbreak.git
cd batch_jailbreak
conda create -n batch python=3.10 -y
conda activate batch
pip install -r requirements.txt
مطلوب GPU لاستدلال النماذج المحلية ولنماذج التحكيم الثلاثة. تم الاختبار باستخدام Python 3.10 + PyTorch 2.4 + transformers==5.2.
ملاحظة: يحتوي
src/evaluate/llamaguard4/على نسخة مضمّنة منtransformersالخاصة بـ LlamaGuard-4 (Llama4ForConditionalGeneration). تُضاف إلىsys.pathفقط أثناء تحميل LlamaGuard.
حرّر configs/models.yaml بمسارات نقاط تفتيش HuggingFace المحلية (المولّدات + المحكّمين)، واضبط مفاتيح API في configs/api.yaml (أو عبر متغيرات البيئة OPENAI_API_KEY / GEMINI_API_KEY / ANTHROPIC_API_KEY / HF_TOKEN).
البيانات والنماذج المطلوبة
data/context_dataset/gsm8k.jsonl (كل سطر يحتوي على مفتاح "question")JailbreakBench/JBB-Behaviors، walledai/StrongREJECTPKU-Alignment/beaver-dam-7b، allenai/wildguardالافتراضي: --harmful_dataset JBB، حجم الدفعة n = 1..10، 313 عيّنة. تُملأ الخانات الحميدة من GSM8K (single_math).
python -m src.utils.generate_batch_question_prompt
تُكتب المخرجات تحت data/batch_prompt/single_math/{n}/pos_{k}.jsonl.
python scripts/inference/run_inference_batch_prompt.py \
--model_name qwen \
--case single_math --n 9 --pos 2 \
--harmful_dataset JBB
مسح دفعي على (model, case, batch_size, pos):
bash scripts/inference/run_inference_batch_prompt_eval.sh \
--dataset jbb --gpu_id 0 \
--models phi qwen --cases single_math \
--batch_sizes 12 --pos_values 1 2
python scripts/inference/run_inference_api.py \
--api gpt \
--input_file data/batch_prompt_jbb/single_math/12/pos_2.jsonl \
--model_name gpt --output_subdir batch_prompt_jbb/single_math/12/pos_2 \
--harmful_dataset JBB --extract_pos 2
تُحفظ المخرجات تحت result/inference/<model>/... بصيغة JSONL مع أزواج {prompt, response}.
يُقيَّم كل رد بواسطة LlamaGuard-4 وWildGuard وBeaver-Dam، ثم تُدمج النتائج بتصويت الأغلبية:
python scripts/eval/run_ensemble.py \
--input_file result/inference/qwen/batch_prompt_jbb/single_math/12/qwen_single_math_n12_pos_2_response.jsonl \
--output_dir result/evaluation/batch_prompt_jbb/qwen/single_math/12/pos_2
يمكنك أيضًا تشغيل التقييم في نفس حلقة الاستدلال:
bash scripts/inference/run_inference_batch_prompt_eval.sh \
--dataset jbb --gpu_id 0 \
--models qwen --cases single_math \
--batch_sizes 12 --pos_values 2 \
--conda_env batch
# 1. data
python -m src.utils.generate_batch_question_prompt \
--harmful_dataset JBB --min_n 12 --max_n 12 --num_samples 100
# 2. inference
python scripts/inference/run_inference_batch_prompt.py \
--model_name llama --case single_math --n 12 --pos 2 --harmful_dataset JBB
# 3. evaluation
python scripts/eval/run_ensemble.py \
--input_file result/inference/llama/batch_prompt/llama_single_math_n12_pos_2_response.jsonl
يرجى التفكير في الاستشهاد بورقتنا إذا كان عملنا يساعد بحثك.
@article{kim2026safety,
title={Safety in Batches? Understanding and Mitigating Safety Failures in Batch Prompting},
author={Kim, Kihyun and Kim, HeeSeon and Lee, Wonjun and Kim, Changick},
journal={arXiv preprint arXiv:2608.02681},
year={2026}
}
لأي أسئلة حول ورقتنا أو الكود، يرجى مراسلة [email protected].
| Flag | Default | Description |
|---|
--harmful_dataset | JBB | JBB أو StrongREJECT |
--min_n / --max_n | 1 / 10 | نطاق شامل لحجم الدفعة N |
--num_samples | 313 | عدد المطالبات الضارة |
--seed | 42 | بذرة RNG |
--output_dir | ./data/batch_prompt | جذر المخرجات |