facebookresearch/prompt-siren
GitHub: facebookresearch/prompt-siren
专注于大语言模型提示注入攻击与防御研究的工作台,用于开发和测试针对LLM的安全攻击场景。
Stars: 47 | Forks: 17
# Prompt Injection 工作台
[](https://github.com/facebookresearch/prompt-siren/actions/workflows/ci.yml)
一个用于开发和测试针对大型语言模型攻击的研究工作台,重点关注 prompt injection 漏洞和防御。
## 核心功能
- **状态机设计**:对 agent 执行进行细粒度控制,以实现高级攻击场景
- **SWE-bench 支持**:在 SWE-bench 的真实代码编辑任务上对 agent 进行基准测试
- **Hydra 配置**:通过参数扫描实现强大的实验编排
- **可扩展架构**:用于自定义 agent、攻击和环境的插件系统
- **使用限制**:内置成本和资源控制
- **实验追踪**:自动缓存和结果整理
## 快速开始
### 安装
安装核心包及所需的可选功能:
```
# 完整安装(所有功能)
uv sync --all-extras
# 或仅安装所需组件:
uv sync --extra agentdojo # AgentDojo benchmark support
uv sync --extra swebench # SWE-bench support
uv sync --extra docker # Docker sandbox manager
uv sync --extra playwright # Web automation environment
# 组合多个扩展
uv sync --extra agentdojo --extra docker
```
**可用的可选依赖项:**
| 附加组件 | 描述 |
|-------|-------------|
| `agentdojo` | AgentDojo 数据集、环境和攻击 |
| `swebench` | 用于代码编辑基准测试的 SWE-bench 数据集 |
| `docker` | Docker 沙箱管理器 |
| `playwright` | Web 自动化环境 |
设置环境变量:
```
cp .env.example .env # Fill in API keys
```
导出默认配置:
```
# 导出到 ./config(默认)
uv run prompt-siren config export
# 导出到自定义目录
uv run prompt-siren config export ./my_config
```
运行实验:
```
# 运行仅良性评估
uv run prompt-siren run benign +dataset=agentdojo-workspace
# 运行攻击
uv run prompt-siren run attack +dataset=agentdojo-workspace +attack=template_string
# 运行 SWE-bench 评估(需要 Docker)
uv run prompt-siren run benign +dataset=swebench
# 运行 SWE-bench Lite(较小 benchmark)
uv run prompt-siren run benign +dataset=swebench dataset.config.dataset_name="SWE-bench/SWE-bench_Lite"
# 覆盖参数
uv run prompt-siren run benign +dataset=agentdojo-workspace agent.config.model=azure:gpt-5
# 参数扫描(multirun)
uv run prompt-siren run benign --multirun +dataset=agentdojo-workspace agent.config.model=azure:gpt-5,azure:gpt-5-nano
# 验证配置而不运行
uv run prompt-siren config validate +dataset=agentdojo-workspace
# 使用包含环境/攻击的配置文件(无需覆盖)
uv run prompt-siren run attack --config-dir=./my_config
```
**提示**:环境和攻击可以通过 CLI 覆盖指定,也可以直接包含在配置文件中。有关详细信息,请参阅 [配置指南](docs/configuration.md)。
## 分析结果
运行实验后,使用 `results` 命令聚合和分析结果:
```
# 使用默认设置查看结果(pass@1,按所有配置分组)
uv run prompt-siren results
# 指定自定义 jobs 目录
uv run prompt-siren results --jobs-dir=./jobs
# 按不同维度对结果分组
uv run prompt-siren results --group-by=model
uv run prompt-siren results --group-by=env
uv run prompt-siren results --group-by=agent
uv run prompt-siren results --group-by=attack
# 计算 pass@k 指标(k>1)
uv run prompt-siren results --k=5
uv run prompt-siren results --k=10
# 同时计算多个 pass@k 指标
uv run prompt-siren results --k=1 --k=5 --k=10
# 不同的输出格式
uv run prompt-siren results --format=json
uv run prompt-siren results --format=csv
```
### 理解 pass@k 指标
- **pass@1**(默认):对每个任务的所有运行分数取平均值。这是一个显示平均性能的连续指标。
- **pass@k** (k>1):二进制成功指标。如果 k 次运行中至少有一次达到满分 (1.0),则任务“通过”。当有超过 k 个样本可用时,使用统计估算。
### 结果列
结果表包括:
- **配置列**:`dataset`、`agent_type`、`agent_name`、`attack_type`
- **指标列**:`benign_pass@k`、`attack_pass@k` - pass@k 分数
- **元数据列**:
- `n_tasks` - 聚合的任务总数
- `avg_n_samples` - 每个任务的平均运行次数
- `k` - k 值(当计算多个 pass@k 指标时)
## 平台要求
- **Python**:3.10+
- **用于开发的包管理器**:`uv`(用于依赖管理)
- **操作系统**:Linux 或 macOS(不支持 Windows)
- **Docker**:SWE-bench 集成和某些环境所需
- 必须正在运行且可访问
- 基础镜像应具有可用的 `/bin/bash`(Alpine 镜像需要 `bash` 包)
## 文档
- **[配置指南](docs/configuration.md)** - Hydra 配置和参数覆盖
- **[使用限制](docs/usage_limits.md)** - 资源限制和成本控制
- **[插件](docs/plugins/README.md)** - 添加自定义 agent、攻击和环境
## 开发
### 代码检查、格式化和类型检查
```
# Lint 和格式化
uv run ruff check --fix
uv run ruff format
uv run ty check
# 测试
uv run pytest -v
```
### 为 SWE-bench 预构建 Docker 镜像
主要的 `prompt-siren` CLI 仅适用于预构建的 Docker 镜像。要构建 SWE-bench 评估所需的所有镜像,请使用 `prompt-siren-build-images` 命令:
推送的默认注册表:`ghcr.io/ethz-spylab/prompt-siren-images`。使用 `--registry ""`
禁用推送或使用您自己的注册表覆盖。
```
# 构建所有镜像(良性、恶意服务容器及 pairs)
uv run prompt-siren-build-images
# 仅为特定实例构建镜像
uv run prompt-siren-build-images --instance-ids django__django-11179 --instance-ids astropy__astropy-12907
# 限制要构建的实例数量(适用于测试)
uv run prompt-siren-build-images --max-instances 5
# 使用 SWE-bench Lite 数据集
uv run prompt-siren-build-images --dataset "SWE-bench/SWE-bench_Lite"
# 跳过构建某些镜像类型
uv run prompt-siren-build-images --skip-benign # Skip benign task images
uv run prompt-siren-build-images --skip-malicious # Skip malicious task service images
uv run prompt-siren-build-images --skip-pairs # Skip combined pair images
# 重建现有镜像而非跳过
uv run prompt-siren-build-images --rebuild-existing
# Tag 并推送镜像到 registry
uv run prompt-siren-build-images --registry my-registry.com/myrepo
# 启用详细日志记录以进行调试
uv run prompt-siren-build-images --verbose
# 指定自定义 cache 目录
uv run prompt-siren-build-images --cache-dir /path/to/cache
```
**常用工作流:**
```
# 快速测试:为单个实例构建镜像
uv run prompt-siren-build-images --instance-ids django__django-11179
# 生产环境完整构建:构建所有镜像并推送到 registry
uv run prompt-siren-build-images --registry my-registry.com/swebench
# 更新后重建:强制重建现有镜像
uv run prompt-siren-build-images --rebuild-existing
# 仅构建良性镜像(无攻击场景)
uv run prompt-siren-build-images --skip-malicious --skip-pairs
```
# 许可证
Prompt Siren 根据 [MIT 许可证](https://github.com/facebookresearch/prompt-siren/blob/main/LICENSE.md) 授权。
标签:AgentDojo, AIGC安全, Apex, DLL 劫持, Facebook Research, Hydra配置, Python, SWE-bench, Web自动化, 人工智能, 代码编辑, 大语言模型, 实验管理, 提示注入, 攻击模拟, 无后门, 机器学习, 沙箱环境, 漏洞分析, 特征检测, 状态机, 用户模式Hook绕过, 请求拦截, 调试插件, 路径探测, 逆向工具, 集群管理, 驱动签名利用