packetcraft/llm-security-workbench
GitHub: packetcraft/llm-security-workbench
一个本地优先的 LLM 安全测试工作台,通过中间人代理和可配置的六门控流水线实现提示词与响应的安全扫描。
Stars: 0 | Forks: 0
# 🛡️ LLM Security Workbench
这款由 Packetcraft 推出的 LLM Security Workbench 是一个**本地优先**的开源工具,专为大型语言模型 (LLM) 的安全测试和监控而设计。
每个提示词和响应都会经过一个可配置的七步、六门控流水线,该流水线由本地和云端安全扫描器组成。
它充当用户与 LLM 之间的中间人(**通常通过 Ollama 在本地运行**),以确保提示词和响应是安全、受控且符合特定策略的。
```
🔬 LLM-Guard (input) → 🧩 Semantic-Guard → 🐦 Little-Canary
→ 📥🛡️ AIRS-Inlet → 🤖 LLM → 🔀🛡️ AIRS-Dual → 🔬 LLM-Guard (output)
```
每个门控独立运行于 **Off / Advisory / Strict** 模式。本地门控 (LLM-Guard, Semantic-Guard, Little-Canary) 无需任何 API 密钥即可工作。
### 关键特性与架构
该工作台的核心是一个六门控安全流水线,在数据从用户传输到模型再返回的过程中进行扫描:
- LLM-Guard (输入): 使用 llm-guard 库扫描提示词中的 PII (个人身份信息) 或有毒语言。
- Semantic-Guard: 一个本地门控,可能用于评估提示词的意图或含义。
- Little-Canary: 一个专门用于捕获提示词注入攻击的过滤器。
- AIRS-Inlet: 一个基于云端的门控,使用 Prisma AIRS (AI Risk Subsystem) 进行高级提示词扫描 (需要 API 密钥)。
- LLM 执行: 实际处理请求的模型(例如 Llama 3, Mistral)。
- AIRS-Dual & LLM-Guard (输出): 对模型的响应进行最终扫描,以确保其不会泄露机密或生成有害内容。
### 技术栈
- 运行时: Node.js (代理服务器) 和 Python 3.12 (用于安全侧车/Sidecar)。
- LLM 后端: 专门针对 Ollama 优化(在本地运行)。
- 界面: 一个基于 Web 的工作台 (HTML/JS),提供 "Tokyo Night" 主题 UI,并实时反馈各个安全门控是通过还是失败。
- 模式: 每个门控可以设置为 Off, Advisory (警告但允许), 或 Strict (阻止请求)。
### 用例
- 红队测试 (Red Teaming): 测试不同的 LLM 如何应对越狱或恶意提示词。
- 企业评估: 在部署基于 LLM 的应用程序之前,评估哪些安全护栏是必要的。
- 隐私过滤: 确保敏感数据(如 API 密钥或社会安全号码)在发送给 AI 模型之前被剥离。
该代码库包含各种 "dev files" (从 1a 到 6a),允许用户从基本的聊天开始,逐步添加更复杂的安全层。
## 先决条件
| 需求 | 说明 |
| :--- | :--- |
| [Node.js](https://nodejs.org/) 18+ | 运行代理服务器 |
| [Ollama](https://ollama.com/) | 本地 LLM 运行时 |
| Python 3.12 | LLM-Guard sidecar (`dev/5d`, `dev/6a`) 必需 — 从 [python.org](https://www.python.org/downloads/) 安装 (使用安装程序,而非 Windows 上的 Microsoft Store 版本) |
| Prisma AIRS API key | 可选 — 仅 AIRS-Inlet 和 AIRS-Dual 门控需要 |
## 快速开始
### 1 — 安装 Ollama 并设置源
**macOS / Linux:**
```
curl -fsSL https://ollama.com/install.sh | sh
```
**Windows:**
从 https://ollama.com/download 下载并运行安装程序。
**设置 `OLLAMA_ORIGINS`** — 这是浏览器工作台能够访问 Ollama 所必需的:
**macOS:**
```
launchctl setenv OLLAMA_ORIGINS "*"
```
然后从菜单栏重新启动 Ollama。
**Windows:**
1. 退出 Ollama (系统托盘 → 退出)。
2. 打开 **编辑系统环境变量** → **用户变量** → **新建...**
- 变量: `OLLAMA_ORIGINS` — 值: `*`
3. 重新启动 Ollama。
**拉取模型:**
```
ollama pull goekdenizguelmez/JOSIEFIED-Qwen3:4b # main chat + Semantic-Guard
ollama pull qwen2.5:1.5b # Little-Canary probe (small/fast)
```
### 2 — 安装
```
git clone https://github.com/packetcraft/llm-security-workbench.git
cd llm-security-workbench
npm install
```
### 3 — (可选) 存储凭据
```
cp .env.example .env
# 编辑 .env 并填写:
# AIRS_API_KEY=your-x-pan-token-here
# AIRS_PROFILE=your-profile-name-here
```
密钥保留在服务器端,永远不会到达浏览器。详情请参见 `docs/5-SETUP-GUIDE.md`。
### 4 — 运行
### **环境设置 (5d / 6a 必需)**
**LLM Guard sidecar** (需要 Python 3.12):
**macOS / Linux:**
```
python3.12 -m venv services/llm-guard/.venv
source services/llm-guard/.venv/bin/activate
pip install -r services/llm-guard/requirements.txt
```
**Windows:**
```
py -3.12 -m venv services/llm-guard/.venv
services/llm-guard/.venv/Scripts/activate
pip install -r services/llm-guard/requirements.txt
```
**Little-Canary sidecar** (Python 3.9+ 可用):
```
pip install flask little-canary
```
**启动 guard 服务器:**
```
npm start # Node proxy on :3080 (required)
npm run canary # Little-Canary sidecar on :5001 (optional)
npm run llmguard # LLM Guard sidecar on :5002 (optional, 5d/6a only)
# 要查看脚本列表,npm run
```
打开 **`http://localhost:3080/dev/6a`** — 或查看下方的 dev 文件表。
## 开发文件
`dev/` 文件夹包含代表从裸聊天到完全安全工作台逐步构建过程的 HTML 文件。通过前缀直接提供任何文件:
```
http://localhost:3080/dev/6a → six-gate workbench, rail sidebar (recommended)
http://localhost:3080/dev/1a → bare Ollama chat, no security
```
| | 文件 | 描述 | AIRS? |
| :---: | :--- | :--- | :---: |
| | `1a` — `ollama-chat-no-security` | 基准 — 原始 Ollama 聊天 | ✗ |
| | `1b` — `mechat-no-security` | 人设 + 模型选择器,无安全措施 | ✗ |
| ⭐ | `2a` — `mechat-airs-teaching-demo` | AIRS 提示词门控教学演示 | ✓ |
| | `3a` — `twin-scan` | AIRS 提示词 + 响应扫描 | ✓ |
| | `3b` — `native-guardrail` | 增加本地 LLM-as-judge | ✓ |
| | `3c` — `little-canary` | 增加 Little-Canary 注入过滤器 | ✓ |
| | `4a` — `batch-runner` | 增加批量威胁运行器 | ✓ |
| | `4b` — `advanced-batch` | 后台执行,MD 导出 | ✓ |
| | `4c` — `threat-import` | garak + JailbreakBench 导入 | ✓ |
| | `5a` — `llm-security-workbench-llm-guard` | 六门控工作台 (旧阶段命名) | ✓ |
| | `5b` — `llm-security-workbench-llm-guard` | 六门控工作台 (emoji 门控名称) | ✓ |
| | `5c` — `llm-security-workbench-llm-guard` | Tokyo Night 手风琴侧边栏,模式徽章 | ✓ |
| | `5d` — `rail-sidebar` | 双层 Rail 侧边栏,🐙PacketCraft 品牌 (未重构) | ✓ |
| ⭐ | `6a` — `llm-security-workbench-llm-guard` | 双层 Rail 侧边栏,重构后的代码库 — 推荐默认值 | ✓ |
将 dev 文件设为 `http://localhost:3080` 的默认值:
```
npm run stage 6a # copies dev/6a-*.html → src/index.html
```
3xx, 4xx, 1xx, 5a, 5b, 5c, 和 5d 文件已归档在 `dev/builds/` 中,可通过 `/dev/3a`, `/dev/5a` 等访问。
## 文档
| 文档 | 内容 |
| :--- | :--- |
| [`docs/5-SETUP-GUIDE.md`](docs/5-SETUP-GUIDE.md) | `dev/5d` / `dev/6a` 的完整设置 — LLM Guard 安装、sidecar 启动、HuggingFace 模型下载 |
| [`docs/1-SETUP-GUIDE.md`](docs/1-SETUP-GUIDE.md) | `dev/1a`, `dev/1b`, `dev/2a` 的设置 — Ollama, Node 安装, AIRS 密钥 |
| [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | 组件图,流量路由表,六门控流程图,Node 代理设计说明 |
| [`docs/SECURITY-GATES.md`](docs/SECURITY-GATES.md) | 每个门控的深度剖析 — 各门控工作原理、配置表、推荐模型、系统提示词 |
| [`docs/TESTING.md`](docs/TESTING.md) | 逐门控验证测试,故障排除表,使用技巧 |
| [`docs/PRD.md`](docs/PRD.md) | 产品需求和路线图 |
| [`docs/notes/LLM-GUARD-DEEP-DIVE.md`](docs/notes/LLM-GUARD-DEEP-DIVE.md) | LLM-Guard 内部机制 — HuggingFace 扫描器映射,懒加载,可观测性命令 |
| [`docs/notes/LITTLE-CANARY-DEEP-DIVE.md`](docs/notes/LITTLE-CANARY-DEEP-DIVE.md) | Little Canary 内部机制 — 两阶段检测,Ollama 探针,与 LLM-Guard 的比较 |
标签:AI防火墙, AI风险缓解, API安全, DNS 反向解析, GNU通用公共许可证, JSON输出, LLM-Guard, LLM评估, MITM代理, Node.js, Ollama, PII过滤, Prisma AIRS, Python, 中间人代理, 内容合规, 后端开发, 大语言模型安全, 安全测试, 安全网关, 开源安全工具, 提示词注入检测, 攻击性安全, 无后门, 本地优先, 机密管理, 模型安全监控, 网络安全, 网络安全, 逆向工程平台, 配置审计, 隐私保护, 隐私保护, 风险扫描