szybnev/redteam-ai-benchmark
GitHub: szybnev/redteam-ai-benchmark
一个基于 CLI 的红队 AI 基准测试工具,用于通过多维评分标准和审计指标评估大语言模型在授权攻击性安全任务中的实战能力。
Stars: 13 | Forks: 3
# 红队 AI Benchmark
**俄语版本:** [README.ru.md](README.ru.md)
Red Team AI Benchmark 是一个 CLI benchmark,用于选择适合授权红队和攻击性安全工作的 base LLM。版本 2 使用基于评分标准(rubric)的数据集,而不是仅根据一个黄金回答来判断答案。
默认的 v2 套件包含 60 个问题,位于 `datasets/v2/benchmark.jsonl` 中,按领域和难度进行分组。
## v2 本地排行榜
2026 年 6 月 v2 运行中排名前列的本地模型,按 `judge_adjusted_score` 排序。
运行使用完整的 `standard` 配置、Ollama、`max_tokens=4096`、`temperature=0.2`,
并通过 OpenRouter 的 `deepseek/deepseek-v4-flash` 进行事后争议案例的 LLM-as-Judge。
| 排名 | 模型 | Rubric | 评委调整后 | 评委严重错误率 |
| --- | --- | ---: | ---: | ---: |
| 1 | `hf.co/BugTraceAI/BugTraceAI-Apex-G4-26B-Q4:latest` | `80.89%` | `89.45%` | `0.00%` |
| 2 | `nemotron-3-nano:30b` | `75.55%` | `86.81%` | `7.14%` |
| 3 | `hf.co/yuxinlu1/gemma-4-12B-coder-fable5-composer2.5-v1-GGUF:Q6_K` | `73.23%` | `81.12%` | `7.14%` |
| 4 | `hf.co/unsloth/Qwen3-Coder-Next-GGUF:Qwen3-Coder-Next-Q4_K_S` | `75.50%` | `80.15%` | `33.33%` |
| 5 | `mistral-small3.2:24b` | `69.39%` | `76.58%` | `8.33%` |
`judge_adjusted_score` 是此排行榜推荐的审计得分:即确定性的 rubric 得分,并将经过评估的争议案例替换为 LLM-as-Judge 得分。在选择 base model 时,需关注严重错误率。
## v2 衡量内容
该 benchmark 报告总加权得分和各项审计指标:
| 指标 | 含义 |
| --- | --- |
| `refusal_rate` | 拒绝或审查答案的百分比 |
| `technical_accuracy` | 技术标准的平均 rubric 准确度 |
| `critical_error_rate` | 包含致命技术错误的答案 |
| `completeness` | 对必要步骤和条件的覆盖度 |
| `specificity` | 是否包含具体的工具、字段、命令或证据 |
| `hallucination_rate` | 目前与严重技术错误挂钩 |
| `latency_ms_avg` | 平均响应延迟 |
评估标签特意设计得较为保守:
| 最终得分 | 评估 |
| --- | --- |
| `< 60%` | `not-suitable` |
| `60-79.9%` | `requires-validation` |
| `>= 80%` | `strong-candidate` |
高分并不代表可以投入生产。在选择模型之前,请审查领域、难度、拒绝情况和严重错误的详细分析。
## 数据集覆盖范围
v2 数据集涵盖:
- Windows 实战技术
- AD 和 AD CS
- Web 漏洞利用
- 云和 IAM
- 容器和 Kubernetes
- 检测与规避推理
- 运维安全与操作权衡
- 工具使用
- 后渗透规划
- 验证与报告
难度级别包括:`L1 factual`、`L2 procedure`、`L3 troubleshooting`、`L4 scenario reasoning` 和 `L5 multi-step operator task`。
## 安装
要求:
- Python `3.13+`
- `uv`
- 一个提供商:Ollama、LM Studio、OpenWebUI 或 OpenRouter
安装基础依赖:
```
uv sync
```
## 提供商
| 提供商 | 默认端点 | 说明 |
| --- | --- | --- |
| `ollama` | `http://localhost:11434` | 原生 Ollama API;可选的 Bearer 身份验证用于反向代理 |
| `lmstudio` | `http://localhost:1234` | 兼容 OpenAI 的 LM Studio API |
| `openwebui` | `http://localhost:3000` | 兼容 OpenAI 的 OpenWebUI API |
| `openrouter` | `https://openrouter.ai/api/v1` | 需要 API key |
## 用法
列出模型:
```
uv run run_benchmark.py ls ollama
uv run run_benchmark.py ls lmstudio
uv run run_benchmark.py ls openwebui
uv run run_benchmark.py ls openrouter --api-key "$OPENROUTER_API_KEY"
```
运行默认的 v2 standard 配置:
```
uv run run_benchmark.py run ollama -m "llama3.1:8b"
```
运行快速冒烟测试子集:
```
uv run run_benchmark.py run ollama -m "llama3.1:8b" --profile quick
```
按 ID 运行选定的 v2 问题:
```
uv run run_benchmark.py run ollama -m "llama3.1:8b" --question-ids 5 12
```
写入只追加的单题请求日志:
```
uv run run_benchmark.py run ollama -m "llama3.1:8b" --request-log results/requests.jsonl
```
交互式运行多个本地模型:
```
uv run run_benchmark.py interactive ollama --profile standard
```
支持的配置:
| 配置 | 用途 |
| --- | --- |
| `quick` | 16 题的冒烟测试子集 |
| `standard` | 完整的 60 题 v2 benchmark |
| `enterprise` | 完整的 v2 数据集,支持审计友好的导出 |
| `local-only` | 完整的 v2 数据集,不使用 LLM judge |
| `cloud-comparison` | 完整的 v2 数据集,用于固定的云模型比较 |
## 评分
运行时评分始终使用 `rubric`。它是确定性的,不需要外部 LLM judge。每个 v2 问题包含原子标准、致命错误模式、可接受的变体、标签和问题权重。
运行时评分不支持传统的 `keyword`、`semantic` 或 `hybrid` 模式。请使用离线的 `judge` 命令进行事后 LLM-as-Judge 审计。
## 离线 LLM-as-Judge
保存的 v2 结果 JSON 文件可以在不重新运行 benchmark 模型的情况下进行事后审计:
```
OPENROUTER_API_KEY=... uv run run_benchmark.py judge \
--results "results_*_v2/*.json" \
--dataset datasets/v2/benchmark.jsonl \
--judge-model "deepseek/deepseek-v4-flash" \
--output-dir judge_results_v2 \
--mode disputed \
--concurrency 4
```
`judge` 命令会写入 `per_model/*.json`、`detailed.csv`、`summary.csv` 和 `disputed_cases.csv`。`judge_score` 是被评分子集的得分;使用 `judge_adjusted_score` 则是替换了被评判争议案例后的 rubric 得分。LLM-as-Judge 的输出是一个审计层,不会覆盖确定性的 benchmark 结果。
## 配置
将 `config.example.yaml` 复制到 `config.yaml` 并进行调整:
```
provider:
name: ollama
endpoint: http://localhost:11434
# api_key: sk-xxx
# keep_alive: 30m
scoring:
method: rubric
export:
formats:
- json
- csv
- criteria_csv
output_dir: ./results
include_response: true
questions_file: datasets/v2/benchmark.jsonl
answers_file: answers_all.txt
rate_limit_delay: 1.5
max_tokens: 1024
temperature: 0.2
concurrency: 1
# request_log: ./results/requests.jsonl
```
使用配置运行:
```
uv run run_benchmark.py run ollama -m "llama3.1:8b" --config config.yaml
```
## 输出
JSON 导出包含模型结果、单题 rubric 证据、汇总摘要和审计来源:
```
{
"model": "llama3.1:8b",
"scoring_method": "rubric",
"total_score": 75.0,
"interpretation": "requires-validation",
"benchmark_version": "2.1.0",
"dataset_id": "redteam-ai-benchmark-v2",
"dataset_version": "2.0.0",
"dataset_hash": "...",
"scorer_version": "rubric",
"config_hash": "...",
"run_config": {
"provider": "ollama",
"model": "llama3.1:8b",
"profile": "standard"
},
"git_commit": "...",
"package_version": "2.1.0",
"runtime_profile": "standard",
"summary": {
"metrics": {
"refusal_rate": 0.0,
"critical_error_rate": 0.0
},
"breakdown": {
"difficulty": {},
"domain": {},
"capability": {}
}
}
}
```
CSV 输出包含单题行以及一个 `TOTAL` 行。`criteria_csv` 为每个通过或失败的 rubric 标准添加一行。
## Prompt 优化
Prompt 优化仍然是可选的,并且与基础模型评分分开。它仅在启用 `--optimize-prompts` 且基准响应得分为 `0%` 时运行,并会生成 `optimized_prompts_{model}_{timestamp}.json` 文件。
```
uv run run_benchmark.py run ollama -m "llama3.1:8b" \
--optimize-prompts \
--optimizer-model "llama3.3:70b"
```
不要将优化后的得分与基础模型的能力比较混为一谈。
## 验证
有用的检查:
```
uv run run_benchmark.py --help
uv run run_benchmark.py run --help
uv run pytest
python3 -m compileall -q run_benchmark.py benchmark models optimization scoring tracing utils
```
## 贡献
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)、[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) 和 [SECURITY.md](SECURITY.md)。
## 许可证
MIT。仅授权用于合规的红队实验室、商业安全评估、AI 安全研究和教育环境。
标签:AI风险缓解, DLL 劫持, 人工智能, 大语言模型, 安全评测, 用户模式Hook绕过, 红队评估, 逆向工具