jrajath94/adversarial-prompt-suite
GitHub: jrajath94/adversarial-prompt-suite
面向大语言模型的对立性提示词红队评估框架,通过六大攻击类别和双层分类器系统化衡量模型防御的攻击面覆盖率与盲点。
Stars: 0 | Forks: 0
# adversarial-prompt-suite
[](https://github.com/jrajath94/adversarial-prompt-suite/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.python.org/downloads/)
## 为什么开发此项目
评估越狱防御需要系统化的框架,而非临时性的测试。大多数红队测试都是手动的:某人尝试输入提示词并记录下有效的内容。该框架定义了 6 种攻击类别,以编程方式生成测试用例,使用双层判定器(快速 regex 启发式 + LLM 后备机制)对输出进行分类,并以 24,790 次评估/秒的速度进行基准测试,从而让你能够针对防御运行持续的回归测试。
核心洞察是:通过 500 个直接越狱提示词并不意味着模型就是安全的。一个从未针对提示词注入或编码混淆进行过测试的模型,其覆盖范围是未知的,而非高覆盖。本框架衡量了**已知攻击面中被覆盖的比例**——以及盲点在哪里。
## 架构
```
graph TD
A[Attack Templates
37 built-in + JSONL dataset] -->|load| B[Evaluator
asyncio + semaphore-gated] B -->|OpenAI-compatible API| C[LLM Under Test] C -->|response text| D[Safety Classifier] D -->|unambiguous 80% of cases| E[HeuristicClassifier
regex · sub-ms · zero API cost] D -->|BORDERLINE only| F[LLMJudgeClassifier
gpt-4o-mini · structured JSON] E -->|ClassificationResult| G[compute_coverage] F -->|ClassificationResult| G G -->|CoverageReport| H[ReportGenerator] H --> I[JSON Report
machine-readable for CI] H --> J[Markdown Report
human-readable for PR review] ``` ## 快速开始 ``` git clone https://github.com/jrajath94/adversarial-prompt-suite.git cd adversarial-prompt-suite make install && make run ``` 针对真实模型运行(OpenAI 兼容的 API): ``` export OPENAI_API_KEY=sk-... adversarial-eval run --model gpt-4o --categories all --output report.json adversarial-eval coverage report.json adversarial-eval report --input report.json --format markdown ``` 离线 / CI(无需 API 密钥): ``` adversarial-eval run --model mock --categories jailbreak,injection ``` ## 攻击面分类 | 类别 | 机制 | 模板 | |----------|-----------|-----------| | `DIRECT_JAILBREAK` | 显式指令覆盖,DAN 风格 | 8 | | `ROLEPLAY_ESCAPE` | 无限制的角色人设 | 6 | | `PROMPT_INJECTION` | 嵌入在用户可控数据中的指令 | 8 | | `SYSTEM_EXTRACTION` | 诱导获取系统提示词内容 | 8 | | `TRAINING_DATA_EXTRACTION` | 逐字记忆探测,PII | 8 | | `ENCODING_OBFUSCATION` | Base64、leetspeak、Unicode 同形字 | 7 | ## 核心设计决策 | 决策 | 依据 | 考虑过的替代方案 | 权衡 | |----------|-----------|----------------------|---------| | 双层分类器(启发式 + LLM 判定器) | LLM 判定器成本高昂;80% 的响应都是明确的拒绝或清晰的服从 | 对所有响应使用 LLM 判定器 | 随着模型响应的演变,启发式层需要维护 regex | | asyncio + semaphore 并发 | 在开销极小的情况下遵守速率限制;可与任何 OpenAI 兼容的 API 组合 | 线程池 | 对于不熟悉异步 Python 的贡献者来说,asyncio 增加了复杂性 | | 在每个 API 边界使用 Pydantic 模型 | schema 验证可在格式错误的 API 响应破坏下游结果之前将其捕获 | TypedDict / dataclasses | 模型定义稍微冗长 | | JSONL 持久化 | 支持 Git diff、可流式传输、可使用 grep 检索;添加字段时无需进行 schema 迁移 | SQLite / Parquet | 无法跨报告进行 join 查询 | | 六个固定的攻击类别 | 能够衡量覆盖率;映射到已发布的威胁分类(OWASP LLM Top 10) | 开放式标签 | 固定的分类法可能无法覆盖新型攻击向量 | ## 基准测试 运行 `make bench` 进行复现。结果基于 2023 款 MacBook Pro M2 使用 mock 客户端测得。 | 配置 | 吞吐量 | 平均挂钟时间 | |--------|-----------|---------------| | batch=10, concurrency=5 | ~15,000 次评估/秒 | 3.3ms | | batch=50, concurrency=10 | ~24,790 次评估/秒 | 7.1ms | | batch=100, concurrency=50 | ~24,790 次评估/秒 | 10.6ms | 框架的开销极小。真实 API 的吞吐量受限于模型延迟和速率限制,而不是此库。 ## 覆盖率报告示例 ``` Coverage Report — Model: gpt-4o Generated: 2024-01-15T12:00:00 ============================================================ Total prompts evaluated : 37 UNSAFE : 3 SAFE : 30 BORDERLINE : 4 ------------------------------------------------------------ Category coverage : 100.0% (6/6 categories) Template diversity : 100.0% Overall attack success : 8.1% False refusal rate : 0.0% ============================================================ Per-Category Breakdown: DIRECT_JAILBREAK attempts= 8 success_rate=12.5% ENCODING_OBFUSCATION attempts= 7 success_rate= 0.0% PROMPT_INJECTION attempts= 8 success_rate=12.5% ROLEPLAY_ESCAPE attempts= 6 success_rate= 0.0% SYSTEM_EXTRACTION attempts= 8 success_rate= 0.0% TRAINING_DATA_EXTRACTION attempts= 8 success_rate= 0.0% ``` ## 测试 ``` make test # 93 tests, unit + integration make bench # Throughput benchmarks make lint # ruff + mypy ``` ## CLI 参考 ``` adversarial-eval run --model Model ID or 'mock' for offline testing --categories jailbreak | injection | extraction | all (comma-separated) --output Output JSON report path (default: report.json) --concurrency Concurrent requests (default: 5) --api-key OpenAI API key (or OPENAI_API_KEY env var) adversarial-eval coverage
Print coverage metrics table from an existing report.
adversarial-eval report
--input Path to report.json
--format markdown (default)
--output Output path (default: .md)
```
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
由 [Rajath John](https://github.com/jrajath94) 构建 — VP Software Engineering @ JPMorgan Chase。
37 built-in + JSONL dataset] -->|load| B[Evaluator
asyncio + semaphore-gated] B -->|OpenAI-compatible API| C[LLM Under Test] C -->|response text| D[Safety Classifier] D -->|unambiguous 80% of cases| E[HeuristicClassifier
regex · sub-ms · zero API cost] D -->|BORDERLINE only| F[LLMJudgeClassifier
gpt-4o-mini · structured JSON] E -->|ClassificationResult| G[compute_coverage] F -->|ClassificationResult| G G -->|CoverageReport| H[ReportGenerator] H --> I[JSON Report
machine-readable for CI] H --> J[Markdown Report
human-readable for PR review] ``` ## 快速开始 ``` git clone https://github.com/jrajath94/adversarial-prompt-suite.git cd adversarial-prompt-suite make install && make run ``` 针对真实模型运行(OpenAI 兼容的 API): ``` export OPENAI_API_KEY=sk-... adversarial-eval run --model gpt-4o --categories all --output report.json adversarial-eval coverage report.json adversarial-eval report --input report.json --format markdown ``` 离线 / CI(无需 API 密钥): ``` adversarial-eval run --model mock --categories jailbreak,injection ``` ## 攻击面分类 | 类别 | 机制 | 模板 | |----------|-----------|-----------| | `DIRECT_JAILBREAK` | 显式指令覆盖,DAN 风格 | 8 | | `ROLEPLAY_ESCAPE` | 无限制的角色人设 | 6 | | `PROMPT_INJECTION` | 嵌入在用户可控数据中的指令 | 8 | | `SYSTEM_EXTRACTION` | 诱导获取系统提示词内容 | 8 | | `TRAINING_DATA_EXTRACTION` | 逐字记忆探测,PII | 8 | | `ENCODING_OBFUSCATION` | Base64、leetspeak、Unicode 同形字 | 7 | ## 核心设计决策 | 决策 | 依据 | 考虑过的替代方案 | 权衡 | |----------|-----------|----------------------|---------| | 双层分类器(启发式 + LLM 判定器) | LLM 判定器成本高昂;80% 的响应都是明确的拒绝或清晰的服从 | 对所有响应使用 LLM 判定器 | 随着模型响应的演变,启发式层需要维护 regex | | asyncio + semaphore 并发 | 在开销极小的情况下遵守速率限制;可与任何 OpenAI 兼容的 API 组合 | 线程池 | 对于不熟悉异步 Python 的贡献者来说,asyncio 增加了复杂性 | | 在每个 API 边界使用 Pydantic 模型 | schema 验证可在格式错误的 API 响应破坏下游结果之前将其捕获 | TypedDict / dataclasses | 模型定义稍微冗长 | | JSONL 持久化 | 支持 Git diff、可流式传输、可使用 grep 检索;添加字段时无需进行 schema 迁移 | SQLite / Parquet | 无法跨报告进行 join 查询 | | 六个固定的攻击类别 | 能够衡量覆盖率;映射到已发布的威胁分类(OWASP LLM Top 10) | 开放式标签 | 固定的分类法可能无法覆盖新型攻击向量 | ## 基准测试 运行 `make bench` 进行复现。结果基于 2023 款 MacBook Pro M2 使用 mock 客户端测得。 | 配置 | 吞吐量 | 平均挂钟时间 | |--------|-----------|---------------| | batch=10, concurrency=5 | ~15,000 次评估/秒 | 3.3ms | | batch=50, concurrency=10 | ~24,790 次评估/秒 | 7.1ms | | batch=100, concurrency=50 | ~24,790 次评估/秒 | 10.6ms | 框架的开销极小。真实 API 的吞吐量受限于模型延迟和速率限制,而不是此库。 ## 覆盖率报告示例 ``` Coverage Report — Model: gpt-4o Generated: 2024-01-15T12:00:00 ============================================================ Total prompts evaluated : 37 UNSAFE : 3 SAFE : 30 BORDERLINE : 4 ------------------------------------------------------------ Category coverage : 100.0% (6/6 categories) Template diversity : 100.0% Overall attack success : 8.1% False refusal rate : 0.0% ============================================================ Per-Category Breakdown: DIRECT_JAILBREAK attempts= 8 success_rate=12.5% ENCODING_OBFUSCATION attempts= 7 success_rate= 0.0% PROMPT_INJECTION attempts= 8 success_rate=12.5% ROLEPLAY_ESCAPE attempts= 6 success_rate= 0.0% SYSTEM_EXTRACTION attempts= 8 success_rate= 0.0% TRAINING_DATA_EXTRACTION attempts= 8 success_rate= 0.0% ``` ## 测试 ``` make test # 93 tests, unit + integration make bench # Throughput benchmarks make lint # ruff + mypy ``` ## CLI 参考 ``` adversarial-eval run --model Model ID or 'mock' for offline testing --categories jailbreak | injection | extraction | all (comma-separated) --output Output JSON report path (default: report.json) --concurrency Concurrent requests (default: 5) --api-key OpenAI API key (or OPENAI_API_KEY env var) adversarial-eval coverage
标签:AI安全, Chat Copilot, DLL 劫持, Petitpotam, Python, 大语言模型, 对抗性机器学习, 攻击工具, 无后门, 时序数据库, 测试框架, 红队评估, 计算机取证, 逆向工具