Marcelluxx/SafeEval
GitHub: Marcelluxx/SafeEval
SafeEval 是一个轻量级 CLI 工具,用于评估各类大语言模型抵御 prompt 注入与越狱攻击的安全防御能力。
Stars: 0 | Forks: 0
🛡️ SafeEval
Lightweight CLI toolkit for evaluating LLMs against prompt injection & jailbreak attacks.
## ✨ 功能
- **多提供商 LLM 支持** — 通过 [LiteLLM](https://github.com/BerriAI/litellm) 评估任何模型(OpenAI、Anthropic、Ollama、Gemini、Cohere 等)。
- **15+ 对抗性 payload** — 涵盖直接越狱(DAN 风格)、间接 prompt 注入以及系统 prompt 泄露。
- **混合评估引擎** — 快速的基于规则的关键字/regex 匹配 + 用于处理模棱两可情况的 LLM-as-a-Judge。
- **精美的终端 UI** — 由 [Rich](https://github.com/Textualize/rich) 提供支持的丰富进度条、彩色表格和结构化输出。
- **双重报告格式** — 生成详细的 JSON 和 Markdown 报告,并包含分类指标。
- **异步与并发** — 可配置并发限制的并行运行 payload。
- **零样板代码** — 单条命令即可完成评估;无需配置文件。
## 🚀 快速开始
### 1. 克隆与设置
```
git clone https://github.com/
/SafeEval.git
cd SafeEval
python -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
pip install -r requirements.txt
```
### 2. 配置 API Keys
复制示例环境文件并填入您所使用的提供商的 key:
```
cp .env.example .env
```
编辑 `.env` — 您只需要填写您正在使用的提供商的 key:
```
# 选择一个(或多个):
OPENAI_API_KEY=sk-...
OPENROUTER_API_KEY=sk-or-v1-...
ANTHROPIC_API_KEY=sk-ant-...
GEMINI_API_KEY=...
```
该应用程序会通过 `python-dotenv` 从项目根目录**自动加载 `.env`** — 无需手动 `export`。
### 3. 运行评估
```
# 使用 OpenAI(从 .env 自动检测 OPENAI_API_KEY)
python -m safe_eval.cli -m openai/gpt-4o-mini
# 使用 OpenRouter(从 .env 自动检测 OPENROUTER_API_KEY)
python -m safe_eval.cli -m openrouter/google/gemini-2.0-flash
# 本地使用 Ollama(无需密钥)
python -m safe_eval.cli -m ollama/llama3 --no-llm-judge
```
## 📖 用法
```
usage: safe-eval [-h] [-V] [-m MODEL] [-j JUDGE_MODEL]
[--api-key API_KEY] [--api-base API_BASE]
[-p PAYLOADS] [-c CONCURRENCY] [-t TIMEOUT]
[--no-llm-judge] [-v]
model selection:
-m, --model MODEL Target model (default: openai/gpt-4o-mini)
-j, --judge-model MODEL Judge model (default: openai/gpt-4o-mini)
authentication:
--api-key API_KEY Explicit API key (overrides .env / env vars)
--api-base API_BASE Custom API base URL
execution:
-p, --payloads PATH Path to YAML payloads dataset
-c, --concurrency N Max concurrent requests (default: 5)
-t, --timeout SECS Timeout per call in seconds (default: 60)
--no-llm-judge Rule-based only (skip LLM judge)
-v, --verbose Verbose output
```
### 模型命名规范
SafeEval 使用 **litellm** 模型命名格式:`provider/model-name`。
提供商前缀决定了从 `.env` 自动检测哪个 API key:
| Prefix | Provider | Env Variable | Example |
|--------|----------|--------------|---------|
| `openai/` | OpenAI | `OPENAI_API_KEY` | `openai/gpt-4o-mini` |
| `anthropic/` | Anthropic | `ANTHROPIC_API_KEY` | `anthropic/claude-sonnet-4-20250514` |
| `openrouter/` | OpenRouter | `OPENROUTER_API_KEY` | `openrouter/google/gemini-2.0-flash` |
| `gemini/` | Google Gemini | `GEMINI_API_KEY` | `gemini/gemini-2.0-flash` |
| `ollama/` | Ollama (local) | *(none)* | `ollama/llama3` |
| `cohere/` | Cohere | `COHERE_API_KEY` | `cohere/command-r-plus` |
### 示例
```
# OpenAI — 密钥从 .env 自动加载
python -m safe_eval.cli -m openai/gpt-4o-mini --no-llm-judge
# OpenRouter — 使用单个密钥访问 200+ 模型
python -m safe_eval.cli -m openrouter/anthropic/claude-sonnet-4-20250514
# Ollama 本地 — 无需 API 密钥
python -m safe_eval.cli -m ollama/llama3 --no-llm-judge
# 在命令行上显式提供 API 密钥
python -m safe_eval.cli -m openai/gpt-4o --api-key sk-abc123
# 自定义 OpenAI 兼容 endpoint
python -m safe_eval.cli -m my-model --api-base http://localhost:8080/v1 --api-key test
# 混合 providers:Claude 作为 target,GPT-4o-mini 作为 judge
python -m safe_eval.cli -m anthropic/claude-sonnet-4-20250514 -j openai/gpt-4o-mini
# 使用更高并发的自定义 payloads
python -m safe_eval.cli -m openai/gpt-4o -p ./my_payloads.yaml -c 10
```
## 🏗️ 架构
```
graph LR
A["📄 payloads.yaml"] -->|load| B["⚙️ Runner"]
B -->|adversarial prompts| C["🤖 Target LLM"]
C -->|raw responses| D["⚖️ Judge"]
D -->|rule-based check| E{"Clear
verdict?"}
E -->|yes| F["📊 Reporter"]
E -->|no / ambiguous| G["🧠 LLM Judge"]
G -->|SAFE / UNSAFE| F
F --> H["🖥️ Terminal Table"]
F --> I["📝 JSON Report"]
F --> J["📋 Markdown Report"]
```
### 数据流
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ payloads │────▸│ runner │────▸│ target LLM │
│ .yaml │ │ (async) │ │ (litellm) │
└──────────────┘ └──────┬───────┘ └──────┬───────┘
│ │
│◂───── responses ───┘
▼
┌──────────────┐
│ judge │
│ (hybrid) │
│ ┌──────────┐│
│ │regex/kw ││──── fast path ──▸ verdict
│ └──────────┘│
│ ┌──────────┐│
│ │LLM judge ││──── slow path ──▸ verdict
│ └──────────┘│
└──────┬──────┘
▼
┌──────────────┐
│ reporter │──▸ terminal table
│ │──▸ reports/*.json
│ │──▸ reports/*.md
└──────────────┘
```
## 📁 项目结构
```
SafeEval/
├── data/
│ └── payloads.yaml # Adversarial test cases (15+ payloads)
├── safe_eval/
│ ├── __init__.py # Package metadata
│ ├── cli.py # CLI entrypoint (argparse)
│ ├── config.py # Configuration loader + .env auto-load
│ ├── runner.py # Async payload execution engine
│ ├── judge.py # Hybrid evaluation (rule-based + LLM)
│ └── reporter.py # Terminal & file report generation
├── tests/
│ └── test_evaluator.py # Unit tests (pytest)
├── reports/ # Generated at runtime (gitignored)
├── .env.example # Template — copy to .env and fill keys
├── .gitignore
├── README.md
└── requirements.txt
```
## 🧪 测试
```
python -m pytest tests/ -v
```
## ⚠️ 免责声明
## 📄 许可证
本项目基于 [MIT License](LICENSE) 授权。标签:AI安全, Chat Copilot, DLL 劫持, Python, 大语言模型, 安全规则引擎, 无后门, 红队评估, 自动化测试工具, 计算机取证, 逆向工具