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绕过, 系统调用监控, 缩放定律, 评估基准, 逆向工具