XHMY/AutoDefense
GitHub: XHMY/AutoDefense
AutoDefense 是一种基于多智能体协作的 LLM 防御框架,旨在检测并拦截针对大语言模型的越狱攻击。
Stars: 68 | Forks: 20
# AutoDefense:抵御越狱攻击的多智能体 LLM 防御机制
[**博客**](https://microsoft.github.io/autogen/0.2/blog/2024/03/11/AutoDefense/Defending%20LLMs%20Against%20Jailbreak%20Attacks%20with%20AutoDefense/)
## 安装说明
```
pip install vllm autogen pandas retry openai
```
## 使用 [vLLM](https://docs.vllm.ai/) 准备推理服务
vLLM 提供了一个兼容 OpenAI 的 API 服务器,具备高效的推理能力,并支持跨多个 GPU 的内置负载均衡。
### 启动 vLLM 服务器
使用您所需的模型启动 vLLM 服务器。对于多 GPU 设置,请使用 `--data-parallel-size` 来启用自动负载均衡:
**单 GPU:**
```
vllm serve Qwen/Qwen3-1.7B --port 8000
```
**多 GPU(例如:带有数据并行的 2 个 GPU):**
```
vllm serve Qwen/Qwen3-1.7B --port 8000 --data-parallel-size 2
```
**对更大模型使用张量并行:**
```
vllm serve --port 8000 --tensor-parallel-size 4
```
**张量并行与数据并行结合(8 个 GPU,2路 TP × 4路 DP):**
```
vllm serve --port 8000 --tensor-parallel-size 2 --data-parallel-size 4
```
有关具有内部负载均衡的数据并行部署的更多详细信息,请参阅 [vLLM 文档](https://docs.vllm.ai/en/latest/serving/data_parallel_deployment/)。
### 验证服务器
您可以通过检查 models 端点来验证服务器是否正在运行:
```
curl http://localhost:8000/v1/models
```
## 生成响应
响应由 vLLM 提供服务的目标模型(默认:`Qwen/Qwen3-1.7B`)生成。在执行以下命令之前,请确保您的 vLLM 服务器正在运行。
### 攻击提示词(有害)
```
python attack/attack.py --model Qwen/Qwen3-1.7B --host 127.0.0.1 --port 8000
```
此命令将使用从 `data/prompt/attack_prompt_template.json` 加载的攻击提示词模板(默认:`--template v1`)生成响应。
要运行多次重复,请多次调用脚本并更改 `--output-suffix` 和/或 `--cache-seed`。
### 安全提示词(良性)
要为安全/良性提示词生成响应(用于假阳性评估):
```
python attack/attack.py \
--model Qwen/Qwen3-1.7B \
--template placeholder \
--prompts data/prompt/safe_prompts.json \
--output-prefix safe
```
`placeholder` 模板会在不使用任何攻击框架的情况下传递提示词,而 `v1` 则使用越狱指令包装提示词。
## 运行防御实验
以下命令运行 1-Agent、2-Agent 和 3-Agent 防御实验。`--chat-file` 应指向由 `attack/attack.py` 生成的有害输出(默认保存在 `data/harmful_output//` 下,例如 `data/harmful_output/Qwen-Qwen3-1.7B/attack-dan_0.json`)。
```
export AUTOGEN_USE_DOCKER=0
python defense/run_defense_exp.py \
--model Qwen/Qwen3-1.7B \
--chat-file data/harmful_output/Qwen-Qwen3-1.7B/attack-dan_0.json
```
### 命令行参数
| 参数 | 描述 | 默认值 |
|----------|-------------|---------|
| `--model` | vLLM 服务的目标模型 | `Qwen/Qwen3-1.7B` |
| `--chat-file` | 包含有害输出的聊天文件路径 | 必填 |
| `--port` | vLLM 服务器运行的端口 | `8000` |
| `--host` | vLLM 服务器的主机名 | `127.0.0.1` |
| `--output-dir` | 输出目录 | `data/defense_output/` |
| `--output-suffix` | 输出目录的后缀 | `""` |
| `--strategies` | 要运行的防御策略 | `ex-2 ex-3 ex-cot` |
| `--workers` | 并行 worker 数量 | `128` |
| `--frequency_penalty` | 生成的频率惩罚 | `0.0` |
| `--presence_penalty` | 生成的存在惩罚 | `0.0` |
| `--temperature` | 生成的温度 | `0.7` |
完成防御实验后,输出将出现在 `data/defense_output//` 中(例如 `data/defense_output/Qwen-Qwen3-1.7B/`)。
## GPT 评估(论文使用 GPT-4)
评估有害输出防御:
```
python evaluator/gpt4_evaluator.py \
--defense_output_dir data/defense_output/Qwen-Qwen3-1.7B \
--ori_prompt_file_name prompt_dan.json
```
完成评估后,输出将出现在 `data/defense_output/Qwen-Qwen3-1.7B/asr.csv` 中。
在输出的 `json` 文件中,每个防御输出也会显示一个 `score` 值。
`evaluator/gpt4_evaluator.py` 使用 GPT 模型作为评估器(原论文使用 GPT-4)。通过环境变量(或 CLI 标志)设置您的 OpenAI 凭证,您可以通过 `--model` 将评估器替换为较新的 GPT 模型(例如 GPT-5)。
```
export OPENAI_API_KEY=...
# 可选(仅当你使用 OpenAI 兼容的 endpoint 时):
# export OPENAI_BASE_URL=...
python evaluator/gpt4_evaluator.py \
--defense_output_dir data/defense_output/Qwen-Qwen3-1.7B \
--ori_prompt_file_name prompt_dan.json \
--model gpt-4-1106-preview
```
基于 GPT 的评估可能成本高昂;我们启用了缓存以避免重复评估。
对于安全响应评估,有一种不使用 GPT-4 的高效方法。如果您知道数据集中的所有提示词都是常规用户提示词且不应被拒绝,您可以使用以下命令来评估防御输出的假阳性率 (FPR)。
```
python evaluator/evaluate_safe.py
```
这将在 `data/defense_output` 中找到所有包含关键字 `-safe` 的输出文件夹,并评估假阳性率 (FPR)。
FPR 将保存在 `data/defense_output/defense_fp.csv` 文件中。
标签:AI安全, Chat Copilot, DLL 劫持, Naabu, Petitpotam, 人工智能, 内容安全, 多智能体, 大语言模型, 用户模式Hook绕过, 请求拦截, 逆向工具