
Ce dépôt contient l'implémentation officielle de l'article « [Safety in Batches? Understanding and Mitigating Safety Failures in Batch Prompting] »
Kihyun Kim, Hee-Seon Kim, Wonjun Lee, Changick Kim
Korea Advanced Institute of Science and Technology (KAIST)
2026.09 Notre article a été accepté à AACL-IJCNLP 2026 (Main) ! 🎉2026.08 L'article est disponible sur arXiv !2026.08 Le code est publié !Le batch prompting est une stratégie d'inférence pratique qui regroupe plusieurs requêtes en un seul appel. Nous montrons que son succès en termes d'utilité ne s'étend pas à la sécurité : une question nuisible qui est systématiquement refusée de manière isolée peut susciter une réponse nuisible lorsqu'elle est intégrée dans un lot de questions bénignes.
Ce dépôt fournit le code officiel pour :
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
Un GPU est requis pour l'inférence des modèles locaux et pour les trois modèles juges. Testé avec Python 3.10 + PyTorch 2.4 + transformers==5.2.
Remarque :
src/evaluate/llamaguard4/fournit une copie vendored detransformerspour LlamaGuard-4 (Llama4ForConditionalGeneration). Elle est ajoutée àsys.pathuniquement pendant le chargement de LlamaGuard.
Modifiez configs/models.yaml avec les chemins locaux des checkpoints HuggingFace (générateurs + juges), et définissez les clés API dans configs/api.yaml (ou via les variables d'environnement OPENAI_API_KEY / GEMINI_API_KEY / ANTHROPIC_API_KEY / HF_TOKEN).
Données et modèles requis
data/context_dataset/gsm8k.jsonl (chaque ligne possède une clé "question")JailbreakBench/JBB-Behaviors, walledai/StrongREJECTPKU-Alignment/beaver-dam-7b, allenai/wildguardPar défaut : --harmful_dataset JBB, taille de lot n = 1..10, 313 échantillons. Les emplacements bénins sont remplis à partir de GSM8K (single_math).
python -m src.utils.generate_batch_question_prompt
Les sorties sont écrites sous 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
Balayage par lots sur (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
Les sorties sont enregistrées sous result/inference/<model>/... au format JSONL avec des paires {prompt, response}.
Chaque réponse est notée par LlamaGuard-4, WildGuard et Beaver-Dam, puis combinée par vote majoritaire :
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
Vous pouvez également exécuter l'évaluation dans la même boucle que l'inférence :
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
N'hésitez pas à citer notre article si notre travail vous aide dans vos recherches.
@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}
}
Pour toute question concernant notre article ou notre code, veuillez envoyer un e-mail à [email protected].
| Option | Valeur par défaut | Description |
|---|
--harmful_dataset | JBB | JBB ou StrongREJECT |
--min_n / --max_n | 1 / 10 | plage inclusive de la taille de lot N |
--num_samples | 313 | nombre de prompts nuisibles |
--seed | 42 | graine RNG |
--output_dir | ./data/batch_prompt | racine de sortie |