Marcelluxx/SafeEval

GitHub: Marcelluxx/SafeEval

SafeEval 是一个轻量级 CLI 工具,用于评估各类大语言模型抵御 prompt 注入与越狱攻击的安全防御能力。

Stars: 0 | Forks: 0

🛡️ SafeEval

Lightweight CLI toolkit for evaluating LLMs against prompt injection & jailbreak attacks.

Python 3.10+ License: MIT Code style: black PRs Welcome

## ✨ 功能 - **多提供商 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, 大语言模型, 安全规则引擎, 无后门, 红队评估, 自动化测试工具, 计算机取证, 逆向工具