ReversecLabs/spikee

GitHub: ReversecLabs/spikee

一个用于评估和利用提示注入与越狱攻击的模块化工具包,帮助测试 LLM 及相关应用的安全性。

Stars: 173 | Forks: 35

Spikee Logo

Simple Prompt Injection Kit for Evaluation and Exploitation

Website  Website   |   Reversec  Reversec   |   Discord  Discord

_Version: 0.7.3-dev_ 由 Reversec Labs 开发,`spikee` 是一个用于评估 LLM、防护栏和应用程序对提示注入和越狱攻击弹性的工具包。Spikee 的优势在于其模块化设计,能够轻松定制测试过程的每个环节。 ## 目录 - [Spikee 使用场景](#spikee-use-cases) - [Spikee 架构](#the-spikee-architecture) - [使用 Spikee 快速入门指南](#a-quick-start-guide-to-using-spikee) - [1. 安装](#1-installation) - [2. 工作空间](#2-your-workspace) - [3. 可用模块:`spikee list`](#3-available-modules-spikee-list) - [4. 生成数据集:`spikee generate`](#4-generating-a-dataset-spikee-generate) - [5. 测试目标:`spikee test`](#5-testing-a-target-spikee-test) - [6. 分析结果:`spikee results`](#6-analysing-the-results-spikee-results) - [贡献指南](#contributing) - [问题或反馈](#questions-or-feedback) ## 文档 - [指南](./docs/README.md#guides) - [参考页面](./docs/README.md#reference-pages) - [生成与测试工作流](./docs/README.md#generation-and-testing-workflows) - [自定义模块与开发](./docs/README.md#custom-modules-and-development) - [附加资源](./docs/README.md#additional-resources) ## Spikee 使用场景 Spikee 可用于测试: - 独立的 LLM(传统“LLM 红队”测试) - LLM 应用/智能体中的 GenAI 功能(如聊天机器人、RAG 系统等) - LLM 防护栏
## Spikee 架构 Spikee 分为两个阶段:生成测试数据集,以及使用数据集对目标执行测试。每个阶段都由易于自定义的 Python 模块驱动。
# 使用 Spikee 快速入门指南 ## 1. 安装 ### 1.1 直接从 PyPI 安装 `spikee` ``` pip install spikee ``` *注意:为了保持安装轻量化,此命令仅安装连接到 OpenAI 兼容 API 端点所需的基础依赖(涵盖 OpenAI、DeepSeek、OpenRouter、TogetherAI、Google 等)。如果计划使用 Spikee 依赖原生 SDK 的提供商(如 Bedrock、Azure、Ollama 或 Groq),请安装必要的额外依赖项:* ``` pip install "spikee[all]" # Or choose specific providers, e.g., "spikee[bedrock,azure,ollama,groq]" ``` ### 1.2 本地安装(从源码) ``` git clone https://github.com/ReversecLabs/spikee.git cd spikee python3 -m venv env source env/bin/activate pip install ".[all]" ``` **开发指引**:`pip install -e ".[all]"` 将在虚拟环境中创建符号链接,允许你修改代码库而无需在每次更改后重新安装。 ### 1.3 可选插件与目标依赖 Spikee 提供多个示例插件和目标,它们依赖特定的第三方库。为避免污染全局安装,可根据需要单独安装: - **本地推理**(`torch`、`transformers`、`sentencepiece`):用于本地模型及 OPUS-MT 翻译插件。 - **Google 翻译**(`googletrans`):用于 Google Translate 插件。 - **PDF 生成**(`fpdf2`):用于示例 PDF 目标。 ``` pip install "spikee[local-inference]" pip install "spikee[google-translate]" pip install "spikee[pdf]" ``` ## 2. 你的工作空间 Spikee 需要一个工作空间来存储数据集、结果和本地模块(目标、插件、攻击、评判器)。创建一个名为 `workspace` 的文件夹,并运行 `spikee init` 命令以填充内置数据集和示例模块。 ``` mkdir workspace cd workspace spikee init ``` 请参阅 [`spikee init` 文档](./docs/01_cheatsheet.md#spikee-init) 了解 `--include` 标志的信息(例如 Spikee Viewer)。 ## 3. 可用模块:`spikee list` 使用 `spikee list` 查看工作空间中(包含内置和本地)可用的种子、数据集、评判器、目标、插件和攻击。 ``` spikee list seeds spikee list datasets spikee list judges spikee list targets spikee list plugins spikee list attacks spikee list providers --description ``` (注意:使用 `--description` 可获取每个模块的简要描述——不适用于种子或数据集。) ## 4. 生成数据集:`spikee generate` `spikee generate` 用于从**种子文件夹**创建自定义数据集,支持通过插件和格式修饰符对载荷进行转换,以适配特定目标。**你的测试场景将决定需要生成哪些数据集。** ### 4.1 选择数据集生成格式 **场景 A:测试 LLM 应用程序** 当测试一个应用程序(例如聊天机器人或邮件摘要工具)时,通常无法控制输入到 LLM 的全部内容,即系统消息和/或指令,你只能控制*用户输入*(例如聊天消息或文档),该输入作为参数传递给提示模板。 * **生成内容**:仅生成*用户提示*或*文档*及其载荷。 * **生成方式**:使用 `--format user-input`(该标志为默认,可省略)。 ``` spikee generate --seed-folder datasets/seeds-cybersec-2026-01 --format user-input ``` 这将生成 JSONL 格式的数据集:`datasets/cybersec-2026-01-document-dataset-.jsonl`。 **场景 B:测试独立 LLM** 当直接测试 LLM 时,你可以控制提供给 LLM 的完整提示。这适用于评估模型对越狱和有害指令的整体弹性。 * **生成内容**:一个*完整提示*,包括任务(如“总结以下:<数据>”)、包含提示注入或越狱的数据,以及可选的系统消息。 * **生成方式**:使用 `--format full-prompt` 并可选地加上 `--include-system-message`。`datasets/seeds-cybersec-2026-01` 文件夹提供了包含多样越狱和攻击指令的良好起点。 ``` spikee generate --seed-folder datasets/seeds-cybersec-2026-01 --format full-prompt ``` 这将生成 JSONL 格式的数据集:`datasets/cybersec-2026-01-full-prompt-dataset-.jsonl`。 ### 4.2 生成独立攻击 Spikee 通常使用可组合的数据集,结合用户输入、越狱和指令的排列组合。但它也支持**独立输入**,即无需额外格式化或组合的即用型提示。这适用于快速测试特定提示,或使用包含现成攻击提示的公开数据集(如 `seeds-simsonsun-high-quality-jailbreaks`)。 要包含这些内容,需使用 `--include-standalone-inputs`: ``` spikee generate --seed-folder datasets/seeds-simsonsun-high-quality-jailbreaks \ --include-standalone-inputs \ ``` ### 4.3 使用插件进行转换 数据集可通过插件增强,插件会在数据集生成时对载荷应用转换(与测试时动态应用的攻击不同)。这允许你评估基于转换的越狱技术。 请参阅**[内置插件](./docs/02_builtin.md#built-in-plugins)**获取可用插件列表,以及**[创建自定义插件](./docs/07_custom_plugins.md)**了解编写方法。 **用法** ``` # 1337 (leetspeak) plugin spikee generate --seed-folder datasets/seeds-cybersec-2026-01 \ --plugin 1337 ``` ``` # Best of N plugin, with 50 variants per entry spikee generate --seed-folder datasets/seeds-cybersec-2026-01 \ --plugin best_of_n \ --plugin-options "best_of_n:variants=50" ``` ``` # Plugin Piping, pipe the output of splat into base64 for a combined obfuscation effect spikee generate --seed-folder datasets/seeds-cybersec-2026-01 \ --plugin "splat|base64" ``` ## 5. 测试目标:`spikee test` `spikee test` 用于根据数据集评估目标(即对数据集的每个条目提交至目标,并读取响应以判断特定攻击是否成功)。 ### 5.1. 运行 `spikee test` 本例评估 OpenAI 的 `gpt-4o-mini` 模型对 `cybersec-2026-01` 数据集的测试。(`openai_api` 需要在 `workspace/.env` 中配置 `OPENAI_API_KEY`)。 ``` spikee test --dataset datasets/cybersec-2026-01-full-prompt-dataset-*.jsonl \ --target llm_provider \ --target-options "openai/gpt-4o-mini" ``` **多个数据集** `--datasets` 和 `--dataset-folder` 可多次使用,以依次对多个数据集进行测试。`--dataset` 指向单个数据集文件,`--dataset-folder` 指向包含多个数据集文件的文件夹。运行测试至少需要其中一个参数。 ``` spikee test --dataset datasets/cybersec-2026-01.jsonl \ --dataset datasets/simsonsun.jsonl \ --dataset-folder datasets/cyber_datasets/ \ --target llm_provider \ --target-options "openai/gpt-4o-mini" ``` ### 5.2. 目标模块 要评估 LLM、LLM 应用或防护栏,需要创建一个自定义目标模块,作为 Spikee 与被测系统之间的桥梁。 目标模块接收提示(及其他必要参数)并返回系统响应,抽象出系统的具体 API、认证和逻辑。 Spikee 包含多个**[内置目标](./docs/02_builtin.md#built-in-targets)**,适用于常见 LLM 提供商,但如需为特定系统编写自定义目标,请参考**[创建自定义目标](./docs/06_custom_targets.md)**。这通常是大多数评估任务的第一步。 ### .3. 判断攻击成功 为确定攻击是否成功,Spikee 使用**评判模块**。 分为两种类型: - **基础评判器**:基于简单标准(如关键词搜索或正则匹配)评估目标响应。(例如 `canary`、`regex`)。可在本地执行。 - **LLM 评判器**:使用 LLM 代理根据自然语言标准评估目标响应。(例如 `llm_judge_harmful`、`llm_judge_output_criteria`)。 `cybersec-2026-01` 使用基础评判器查找特定“canary”词(如 XSS 载荷或 Markdown 图像标签)以判断攻击是否成功;`simsonsum-high-quality-jailbreaks` 包含越狱和有害内容提示,因此需要 LLM 评判器评估响应的语义。 **用法** ``` # simsonsum-high-quality-jailbreaks uses llm_judge_harmful, set the model with --judge-options spikee test --dataset datasets/simsonsum-high-quality-jailbreaks.jsonl \ --target llm_provider \ --target-options "openai/gpt-4o-mini" \ --judge-options "bedrock/claude45-haiku" ``` ### 5.4. 动态攻击 Spikee 支持**动态攻击模块**,可在测试过程中对数据集条目进行迭代转换或派生。这也可用于实现基于目标响应的自适应攻击策略。 **仅当数据集中原始条目未通过时才会执行攻击,使用 `--attack-only` 可跳过静态提示直接运行攻击。** **用法** ``` # Best of N Attack spikee test --dataset datasets/dataset-name.jsonl \ --target llm_provider \ --target-options "bedrock/claude45-sonnet" \ --attack best_of_n --attack-iterations 25 ``` 部分攻击(如 `prompt decomposition`)支持选项,例如指定用于生成攻击变体的 LLM: ``` spikee test --dataset datasets/dataset-name.jsonl \ --target llm_provider \ --target-options "bedrock/claude45-sonnet" \ --attack prompt_decomposition \ --attack-iterations 50 \ --attack-options 'prompt_decomposition:variants=15,model=bedrock-deepseek-v3' ``` 请参阅**[内置攻击](./docs/02_builtin.md#built-in-attacks)**获取攻击列表及其选项,以及**[创建动态攻击脚本](./docs/07_dynamic_attacks.md)**了解编写方法。 ### 5.5. 多轮测试 Spikee 支持多轮测试,通过以下扩展组件实现: - **[多轮数据集](./docs/04_dataset_generation.md#multi-turn-datasets)**:静态和指令型多轮数据集。 - **[多轮目标](./docs/06_custom_targets.md#multi-turn-dynamic-targets)**:支持会话记忆和回溯。 - **[多轮攻击](./docs/08_dynamic_attacks.md#multi-turn-dynamic-attacks)**:支持会话记忆和回溯。 内置的多轮数据集和攻击可分别查阅**[内置数据集](./docs/02_builtin.md#built-in-seeds)**和**[内置攻击](./docs/02_builtin.md#built-in-attacks)**文档。 **用法** ``` spikee test --dataset datasets/dataset-name.jsonl \ --target demo_llm_application \ --attack crescendo \ --attack-options 'max-turns=5,model=bedrock/deepseek-v3' \ --attack-only ``` ``` spikee test --dataset datasets/dataset-name.jsonl \ --target demo_llm_application \ --attack goat \ --attack-options 'model=bedrock/deepseek-v3' \ --attack-only ``` ### 5.6. 常用参数 - `--threads`:并发评估提示的数量(默认 4) - `--attempts`:每个提示的重试次数,直到收到成功响应(默认 1) - `--throttle`:请求之间的等待时间(秒),用于管理速率限制(默认 0) - `--sample`:测试数据集的比例,范围 0–1(例如 `--sample 0.1` 表示 10%)(默认 1) ### 5.7. 全局超时(`SPIKEE_API_TIMEOUT`) 请参阅**[LLM 提供商 (`SPIKEE_API_TIMEOUT`)](./docs/03_llm_providers.md#global-timeouts)**了解延长请求超时的方法,这对于运行大型本地模型(如 `llama.cpp`、`ollama`)或复杂多轮评估尤其有用。 ## 6. 分析结果:`spikee results` `spikee results` 提供多种工具用于分析测试结果。 - `spikee results analyze` 提供攻击成功率概览及多类别(攻击、插件、数据集特定元数据等)详细分析。 ``` spikee results analyze --result-file ./results/results_llm_provider-openai_gpt-4o-mini.jsonl ``` - `--overview`:仅输出分析的一般统计信息。 - `--combine`:将多个结果文件合并为单个分析。 ``` spikee results analyze --result-folder ./results/ --overview --combine ``` - `spikee results extract` 从结果文件中提取用户定义类别的结果以供进一步分析。 ``` # 将所有成功攻击提取到新数据集文件以供进一步分析 spikee results extract --result-file results/results_llm_provider_cybersec-2026-01-*.jsonl \ --category success ``` - `spikee viewer results` 启动一个 Web 查看器,用于交互式探索结果文件,支持过滤和搜索。 ``` spikee viewer results --result-folder .\results\ ``` 有关分析结果的更多信息,请查阅**[Spikee 结果](./docs/11_results.md)**文档。 # 贡献 欢迎贡献代码。欢迎提交错误修复、新模块(目标、插件、攻击、评判器)或通过 GitHub 拉取请求提交数据集种子。 请参阅**[贡献规则](./CONTRIBUTION_RULES.md)**了解项目贡献指南。 # 问题或反馈? 在[GitHub 仓库](https://github.com/ReversecLabs/spikee)提交问题,或加入[Discord](https://discord.gg/hweNfZw5pr) 与我们交流。
标签:AES-256, AI 安全, dataset generation, evaluation toolkit, jailbreaking, LLM 安全, prompt injection, Python, Reversec Labs, RuleLab, security testing, Spikee, 二进制发布, 反取证, 可定制, 大语言模型安全, 安全评估, 对抗攻击, 开源工具, 提示注入, 攻击向量, 敏感信息检测, 无后门, 机密管理, 模块化, 漏洞评估, 逆向工具, 集群管理