I-Halder/Jailbreak-Scaling-Laws-for-Large-Language-Models

GitHub: I-Halder/Jailbreak-Scaling-Laws-for-Large-Language-Models

基于论文《大语言模型的越狱扩展定律》的完整实验框架,用于生成GCG和AutoDAN对抗攻击并通过多次采样评测攻击成功率随k的扩展行为,同时提供自旋玻璃理论分析。

Stars: 0 | Forks: 0

# 大语言模型的越狱扩展定律:多项式-指数交叉 本仓库包含了伴随我们的论文《大语言模型的越狱扩展定律:多项式-指数交叉》的代码。它涵盖了完整的流程:生成对抗性攻击字符串(GCG 和 AutoDAN),使用 *k* 样本推理时采样查询受害模型,判断响应结果以计算攻击成功率(ASR),以及解释观察到的扩展行为的理论自旋玻璃分析。 ## 仓库结构 ``` jailbreak-scaling-laws/ ├── datasets/ # Prompt datasets with harm categories ├── generate_gcg_attack/ # Generate GCG adversarial suffix strings ├── generate_autodan_attack/ # Generate AutoDAN adversarial suffix strings ├── generate_score_victim_response/ # Query victim models and compute ASR vs k using a judge model ├── generation_results/ # Output folder for generated model responses ├── lm_eval/ # lm-evaluation-harness framework (extended) └── spin_glass_theory_results/ # Theoretical & numerical spin-glass results ``` ## 数据集 **路径:** `datasets/` 包含从多个基准测试中提取的有害提示的 CSV 文件,并标注了危害类别。 ## 生成 GCG 攻击字符串 **路径:** `generate_gcg_attack/` 使用贪婪坐标梯度(GCG)攻击在开源受害模型上生成对抗性后缀。基于 `[llm-attacks](https://github.com/llm-attacks/llm-attacks)` 库构建。有关详细的说明和用法,请参阅该目录特定的 README。 ## 生成 AutoDAN 攻击字符串 **路径:** `generate_autodan_attack/` 使用 AutoDAN 遗传算法(HGA 变体)生成对抗性越狱提示。基于 `[AutoDAN](https://github.com/SheltonLiu-N/AutoDAN)` 库构建。有关详细的说明和用法,请参阅该目录特定的 README。 ## 生成受害模型响应并计算 ASR 与 *k* 的关系 **路径:** `generate_score_victim_response/` 这是本文的核心模块。它使用推理时的 *k* 样本生成(即,每个提示生成 *k* 个独立的响应)查询受害模型,判断每个响应是否越狱成功,并计算作为 *k* 的函数的攻击成功率。我们将攻击成功定义为 *k* 次生成中至少有一次被越狱。 ### 脚本 | 脚本 | 描述 | | ---------------------------------- | ---------------------------------------------------- | | `compute_asr_vs_k_gcg.py` | GCG 攻击;通过 vLLM 攻击开源模型 | | `compute_asr_vs_k_gcg_api.py` | GCG 攻击;通过 API 攻击专有模型(例如,GPT-4) | | `compute_asr_vs_k_autodan.py` | AutoDAN 攻击;通过 vLLM 攻击开源模型 | | `compute_asr_vs_k_autodan_api.py` | AutoDAN 攻击;通过 API 攻击专有模型 | | `compute_asr_vs_k_categorywise.py` | 按危害类别细分的 ASR 与 *k* 的关系 | | `prompts_asr_distribution.py` | 每个提示的 ASR 分布和对数-对数分析 | 生成的模型响应保存在 `generation_results/` 下。 ### 用法示例 **GCG 攻击,开源模型:** ``` python generate_score_victim_response/compute_asr_vs_k_gcg.py \ --k_min 1 --k_max 6 --k_step 4 \ --model_args "pretrained=meta-llama/Meta-Llama-3-8B-Instruct,tensor_parallel_size=1,data_parallel_size=1,gpu_memory_utilization=0.9" \ --output_path ./generation_results/ \ --tasks advbench \ --yaml_path "./lm_eval/tasks/advbench/advbench.yaml" \ --use_judge_model \ --limit 0.01 ``` **AutoDAN 攻击,开源模型:** ``` python generate_score_victim_response/compute_asr_vs_k_autodan.py \ --k_min 1 --k_max 6 --k_step 4 \ --model_args "pretrained=meta-llama/Meta-Llama-3-8B-Instruct,tensor_parallel_size=1,data_parallel_size=1,gpu_memory_utilization=0.9" \ --output_path ./generation_results/ \ --tasks advbench_high_level_injection \ --yaml_path "./lm_eval/tasks/advbench/advbench_high_level_injection.yaml" \ --use_judge_model --limit 0.01 \ --jailbreak_file "./generate_score_victim_response/vicuna_0_advbench.json" \ --jailbreak_prompt_field "goal" \ --jailbreak_attack_field "final_suffix" ``` **GCG 攻击,专有模型(API):** ``` python generate_score_victim_response/compute_asr_vs_k_gcg_api.py \ --k_min 1 --k_max 3 --k_step 4 \ --model_args "model=gpt-4-turbo" \ --output_path ./generation_results/ \ --tasks advbench \ --yaml_path "./lm_eval/tasks/advbench/advbench.yaml" \ --use_judge_model \ --limit 0.01 ``` **AutoDAN 攻击,专有模型(API):** ``` python generate_score_victim_response/compute_asr_vs_k_autodan_api.py \ --k_min 1 --k_max 6 --k_step 4 \ --model_args "pretrained=meta-llama/Meta-Llama-3-8B-Instruct,tensor_parallel_size=1,data_parallel_size=1,gpu_memory_utilization=0.9" \ --output_path ./generation_results/ \ --tasks advbench_high_level_injection \ --yaml_path "./lm_eval/tasks/advbench/advbench_high_level_injection.yaml" \ --use_judge_model --limit 0.01 \ --jailbreak_file "./generate_score_victim_response/vicuna_0_advbench.json" \ --jailbreak_prompt_field "goal" \ --jailbreak_attack_field "final_suffix" ``` **按提示类别的 ASR 计算:** 请注意,在这种情况下,我们期望受害模型的响应已经使用上述代码生成完毕。 ``` python generate_score_victim_response/compute_asr_vs_k_categorywise.py \ --k_min 1 --k_max 10 --k_step 4 \ --output_path generation_results \ --tasks advbench_high_level_injection \ --categories_csv datasets/harmful_behaviors_with_categories_advbench.csv ``` **每个提示的 ASR 分布:** ``` python generate_score_victim_response/prompts_asr_distribution.py \ --root_dir "./generation_results/" \ --scores_glob "**/*task_advbench_run*/**/judge_scores_k*.json" \ --bin_width 0.01 \ --output_png ./per_prompt_analysis/prompts_P_distribution.png \ --output_loglog_png ./per_prompt_analysis/prompts_logP_distribution.png \ --output_json ./per_prompt_analysis/prompts_asr_distribution_summary.json ``` ### 判断 默认情况下,脚本使用**拒绝字符串检测器**来标记响应。传入 `--use_judge_model` 以启用基于 LLM 的判断(使用单独的判断模型,例如 Mistral-7B-Instruct)。结果以 `.jsonl` 和 `.json` 文件的形式保存在 `generation_results/` 中。 ## LM 评估工具 **路径:** `lm_eval/` `[lm-evaluation-harness](https://github.com/EleutherAI/lm-evaluation-harness)` 框架的扩展版本。支持的数据集的自定义任务配置位于: Advbench 数据集: ``` lm_eval/tasks/advbench/ advbench.yaml advbench_high_level_injection.yaml ``` Harmbench 数据集(标准提示): ``` lm_eval/tasks/harmbench_standard/ harmbench_standard.yaml harmbench_standard_high_level_injection.yaml ``` 这些 YAML 配置在生成/评分脚本中由 `--yaml_path` 参数引用。 ## 自旋玻璃理论结果 **路径:** `spin_glass_theory_results/` 包含基于自旋玻璃理论的理论分析和数值验证的代码,该理论解释了 ASR 随 *k* 的幂律扩展行为。 ### 文件 | 文件 | 描述 | | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------- | | `spin-glass-theory_multigpu.py` | 主模拟:带有无序平均的有限 *N* 自旋玻璃模型,支持通过 `torchrun` 进行多 GPU 运算 | | `plot_loggap_from_logs.py` | 绘制 \log(-\log(\Pi_k)) 与 \log k 的数值结果,并与定理 4 的理论结果进行比较 | | `plot_loggap_from_logs_curvefit_constrained_loglogpi.py` | 绘制带有曲线拟合的 \log(-\log(\Pi_k)) 与 \log k 的关系图 | | `spin-glass-theory-multigpu-N24-disorder1024-m1-curvefit_logs.json` | 预计算的模拟日志(N=24,1024 个无序样本) | ### 用法示例 **多 GPU** ``` torchrun --nproc_per_node=2 spin-glass-theory_multigpu.py \ --N 24 --beta 10.0 --j0 1.0 --m_unsafe 1 \ --h_values 0,0.05,0.1,0.15,0.2 \ --k_values 1,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64 \ --n_disorder 1024 --n_sel 8 \ --pd_B 8 --pd_num_perms 32 \ --device cuda --threads 1 \ --max_states_per_rank 20000000 \ --out ./spin-glass-theory-multigpu-N24-disorder1024-m1-curvefit.png ``` **绘制模拟日志:** ``` python spin_glass_theory_results/plot_loggap_from_logs.py \ --logs spin_glass_theory_results/spin-glass-theory-multigpu-N24-disorder1024-m1-curvefit_logs.json \ --out spin_glass_theory_results/figure5A.png \ ``` ``` python spin_glass_theory_results/plot_loggap_from_logs_curvefit_constrained_loglogpi.py \ --logs spin_glass_theory_results/spin-glass-theory-multigpu-N24-disorder1024-m1-curvefit_logs.json \ --out spin_glass_theory_results/figure5B.png \ ``` ## 环境设置 关键依赖: - Python 3.10.15 - PyTorch 2.9.0 (CUDA 12.8) - `transformers==4.57.3` - `accelerate==1.9.0`、`peft==0.17.0`、`datasets==3.1.0` - `fschat==0.2.23` - `openai==2.31.0`、`anthropic==0.71.0` - `vllm==0.11.2` - `matplotlib==3.10.0`、`numpy==2.2.6`、`scipy==1.15.2` ### API 密钥 在运行基于 API 的脚本之前,请设置以下环境变量: ``` export OPENAI_API_KEY="your-openai-key" export ANTHROPIC_API_KEY="your-anthropic-key" export HF_TOKEN="your-huggingface-token" export HF_HOME="/path/to/hf/cache" ```
标签:AI安全, Apex, AutoDAN, Chat Copilot, DLL 劫持, GCG, NLP, Petitpotam, Spin-glass理论, 人工智能, 凭据扫描, 大语言模型, 对抗样本, 推理时采样, 攻击成功率, 机器学习, 用户模式Hook绕过, 系统调用监控, 缩放定律, 评估基准, 逆向工具