PeterGreenAppliedAI/LLM_Gateway
GitHub: PeterGreenAppliedAI/LLM_Gateway
一款面向受监管行业的自托管 LLM 安全与治理网关,提供统一 API 路由、PII 检测、提示注入防御、审计追踪及闭环式防护模型微调能力。
Stars: 1 | Forks: 0
# DevMesh LLM Gateway
你有运行着 Ollama 的 GPU 机器,也许还有 vLLM 集群,或者在某些场景下使用 OpenAI。你的每个应用都在使用不同的 SDK、不同的认证方式和不同的错误处理机制与它们通信。没人知道谁在调用什么、消耗了多少 token,或者是否有人直接把信用卡号发给了模型。
**DevMesh Gateway 位于所有这些组件的前端。** 统一的 API。统一的认证层。完整的审计追踪。且安全扫描零延迟。将它部署在你的基础设施内部——它不是 SaaS。
## 适用人群
专为在本地运行模型且需要证明其数据流转情况的团队构建。适用于数据绝对不能离开本地网络的受监管环境。如果你需要一份合规官员能看懂的审计追踪记录,这就是为你准备的。
- **受监管行业** — 医疗、金融、法律、政府。数据主权不可妥协。
- **气隙或本地 AI 部署** — 你的模型运行在你的硬件上。你的 Gateway 也应如此。
- **合规驱动的 AI 项目** — 你需要向审计人员展示什么数据在何时接触了哪个模型,以及当时采取了什么控制措施。
- **拥有多种推理运行时的团队** — GPU 机器上运行 Ollama,集群上运行 vLLM,流量溢出时使用 OpenAI。一个 Gateway 即可处理所有这些。
## 与众不同之处
这不仅仅是一个代理。它是一个**安全与治理层**,内置了一个运行时间越长越聪明的反馈循环。
**不会产生二次责任的 PII 检测。** 每次检测结果在记录前都会进行 SHA-256 哈希处理——你可以证明系统捕获并清除了信用卡号,而不会让你的审计日志成为另一个存放信用卡号的地方。这解决了大多数 PII 系统忽略的第 22 条军规(catch-22):存储匹配到的值会将你的合规证据转变为违规行为。
**你的 Gateway 会训练自己的防护模型。** 每个请求都会自动被正则表达式引擎和影子防护模型(Granite Guardian 或 Llama Guard)同时扫描。结果会被持久化。分歧会被标记出来。你可以在仪表板中标记它们——安全或不安全——并以 Llama Guard 格式导出标记好的数据。你的 Gateway 运行时间越长,你收集到的训练数据就越多,从而可以针对你的实际流量模式微调自定义防护模型。大多数安全 Gateway 都是静态规则集。而这一个能构建数据集。
**零延迟安全分析。** 防护模型在发送响应后异步运行。它从不阻塞请求,也从不增加延迟。它会默默地对所有内容进行分类,并记录其是否与正则扫描器的结果一致。你无需付出任何性能代价即可获得完整的安全可见性。
## 2 分钟内开始运行
```
git clone https://github.com/PeterGreenAppliedAI/LLM_Gateway.git
cd LLM_Gateway
python3 -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
cp config/gateway.yaml.example config/gateway.yaml
# 使用你的 endpoint URLs 编辑 gateway.yaml
./start-gateway.sh
```
将你的应用指向 `http://your-server:8001`。使用 OpenAI 格式或 Ollama 格式——两者都支持。
```
# 兼容任何 OpenAI-compatible client
from openai import OpenAI
client = OpenAI(base_url="http://your-server:8001/v1", api_key="your-key")
response = client.chat.completions.create(model="llama3.1:8b", messages=[...])
```
```
# 也兼容 Ollama clients
curl http://your-server:8001/api/chat -d '{"model":"llama3.1:8b","messages":[{"role":"user","content":"hello"}]}'
```
## 你能得到什么
| 问题 | Gateway 如何解决 |
|---------|--------------------------|
| 3 个 GPU 机器,没有统一 API | 为你所有的运行时提供统一 endpoint — Ollama、vLLM、OpenAI、TRT-LLM |
| 不知道谁在调用什么 | 每个请求都记录了 client ID、模型、token、延迟和完整的审计追踪 |
| Prompt injection 直接穿透 | 正则表达式模式检测(同步,约 1ms)+ 防护模型分析(异步,零延迟) |
| PII 泄漏到模型中 | 检测电子邮件、电话、社会安全码 (SSN)、信用卡、IP。可选的清除功能。SHA-256 审计追踪 — 绝不存储原始 PII |
| 没有速率限制或访问控制 | 每个 key 的速率限制、模型允许列表、endpoint 限制以及带有成本等级的每日 token 预算 |
| 新模型已部署,但没人对其进行分类 | 自动发现每 60 秒轮询一次 endpoint。未分类的模型在被分配前默认归为昂贵等级 |
| 想微调你自己的防护模型 | 每次扫描都会持久化正则表达式 + 防护模型的判定结果。从仪表板进行标记。支持以 Llama Guard 格式导出 |
| 合规需要审计追踪 | 每个请求、每次 PII 检测、每次安全扫描 — 都带有时间戳、归因于客户端且支持导出 |
## 与 LiteLLM 的区别
LiteLLM 是一个很好的代理,用于将请求路由到不同的 LLM 提供商。DevMesh Gateway 属于不同的类别——它是一个**安全与治理层**,只是顺带也具备了路由功能。
| | DevMesh Gateway | LiteLLM |
|---|---|---|
| **主要焦点** | 安全、审计、策略执行 | 提供商路由、成本跟踪 |
| **Prompt injection 防御** | 正则表达式 + 异步防护模型 (Granite Guardian / Llama Guard) | 未内置 |
| **PII 检测** | 检测、清除、加密审计追踪 | 未内置 |
| **防护模型训练** | 闭环:收集、标记、导出、微调 | 无 |
| **Token 预算** | 每个 API key 带有成本等级权重的每日配额 | 每个 key 的支出限制 |
| **仅支持自托管** | 是 — 在你的基础设施内部运行 | 云端 + 自托管选项 |
| **仪表板** | 包含安全、PII、预算和请求功能的 React UI | 独立的 UI 项目 |
| **测试覆盖率** | 跨 Python 3.10/3.11/3.12 的 514 项测试 | 不定 |
如果你只需要将请求路由到不同的提供商,LiteLLM 足矣。如果你需要了解模型中流转的数据内容、阻止 PII 泄露、构建你自己的防护模型,并向审计人员证明这一切——这就是为你准备的。
## 仪表板
React + TypeScript 监控 UI,包含四个标签页:
- **仪表板** — 请求量、成功率、延迟、token 使用情况、endpoint 健康、热门模型
- **安全** — 防护模型判定结果、正则表达式与防护模型的对比、带有仅哈希事件日志的 PII 检测审计、支持批量操作和训练数据导出的安全扫描标记
- **密钥与预算** — API key 管理(创建/撤销以及模型/endpoint 策略)、token 预算等级、模型到等级的分配、每个 key 的使用量跟踪
- **请求** — 完整的审计日志,支持点击展开请求/响应详情、token 计数、延迟、流式传输指标
```
cd dashboard && npm install && npx vite --host 0.0.0.0 --port 5174
```
## 安全架构
| 层级 | 时机 | 功能 |
|-------|--------|-------------|
| **Unicode 清理** | 同步,约 0ms | 剥离不可见字符、同形字、零宽连字符号 |
| **模式检测** | 同步,约 1ms | 25+ 正则表达式模式 — 角色覆盖、分隔符攻击、编码欺骗 |
| **PII 检测** | 同步,约 1ms | 电子邮件、电话、社会安全码 (SSN)、信用卡、IP。SHA-256 哈希审计追踪。绝不存储原始 PII |
| **防护模型** | 异步,后台 | Granite Guardian 或 Llama Guard — 对每个请求进行分类,记录与正则表达式的一致/分歧情况 |
### 防护模型训练循环
这是大多数安全 Gateway 都不具备的功能:一个由你的 Gateway 自行生成训练数据的**闭环系统**。
1. **每个请求都被扫描** — 同时被正则表达式和防护模型扫描
2. **标记分歧** — 这是训练中最有价值的数据点
3. **你进行标记** — 在仪表板 UI 中标记为安全或不安全,可选择添加类别代码
4. **导出标记好的数据** — 以 Llama Guard 微调格式导出
5. **微调你自己的防护模型** — 基于你的实际流量模式进行微调
你的 Gateway 运行时间越长,你的训练数据集就越好。大多数 Gateway 都附带了固定的规则集。而这一个能自我适应。
## 工作原理
```
Request → Auth → Sanitize → PII Scan → Policy Check → Route → Respond
↓
Async: Guard model + Audit log + Security scan
```
## API 兼容性
同时支持 OpenAI 和 Ollama 格式 — 你的应用无需更改。
**OpenAI:** `POST /v1/chat/completions`, `POST /v1/completions`, `POST /v1/embeddings`, `GET /v1/models`
**Ollama:** `POST /api/chat`, `POST /api/generate`, `POST /api/embeddings`, `GET /api/tags`
**管理:** `/health`, `/metrics`, `/api/stats`, `/api/requests`, `/api/models/usage`, `/api/endpoints/usage`
**安全:** `/api/security/stats`, `/api/security/alerts`, `/api/security/scans`, `/api/pii/stats`, `/api/pii/events`
**预算:** `/api/budget/config`, `/api/budget/usage`, `/api/budget/assignments`
**密钥:** `POST /api/keys`, `GET /api/keys`, `DELETE /api/keys/{id}`
## 路由与故障转移
1. **显式覆盖** — `endpoint/model` 语法(例如,`gpu-node/phi4:latest`)
2. **按客户端固定** — 每个 API key 对应一个 `target_endpoint`
3. **Endpoint 优先级** — 优先级列表中拥有该模型的第一个 endpoint
4. **自动故障转移** — endpoint 不健康?路由到下一个可用的 endpoint
自动发现每 60 秒轮询所有 endpoint。新模型会自动出现。
## 策略执行
- **速率限制** — 全局和每个 key 的 RPM(每分钟请求数)限制
- **Token 预算** — 带有成本等级权重的每日配额(前沿模型 15 倍,标准模型 1 倍,嵌入模型 0.1 倍)
- **模型允许列表** — 每个 key 的 glob 模式匹配(例如,`llama-*`)
- **Endpoint 限制** — 每个 key 的 endpoint 访问控制
- **运行时管理** — 通过 API 或仪表板将模型分配到不同等级,无需重启
## 配置
```
# config/gateway.yaml
endpoints:
- name: gpu-box-1
type: ollama
url: http://192.168.1.100:11434
enabled: true
- name: gpu-box-2
type: ollama
url: http://192.168.1.101:11434
enabled: true
resolution:
endpoint_priority:
- gpu-box-1
- gpu-box-2
auth:
enabled: true
api_keys:
- key: "${GATEWAY_KEY_APP1}"
client_id: my-app
target_endpoint: gpu-box-1
```
### 环境变量
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `GATEWAY_DB_URL` | `sqlite:///./data/gateway.db` | 数据库 URL (SQLite 或 PostgreSQL) |
| `GATEWAY_DB_STORE_REQUEST_BODY` | `false` | 将 prompt 存储在审计日志中 |
| `GATEWAY_GUARD_ENABLED` | `false` | 启用防护模型影子分析 |
| `GATEWAY_GUARD_MODEL_NAME` | `ibm/granite3.2-guardian:5b` | 防护模型名称 |
| `GATEWAY_GUARD_BASE_URL` | `http://localhost:11434` | 托管防护模型的 Ollama 服务器 |
| `GATEWAY_PII_ENABLED` | `false` | 启用 PII 检测 |
| `GATEWAY_PII_SCRUB_ENABLED` | `false` | 用占位符替换 PII |
| `GATEWAY_ADMIN_API_KEY` | | 用于 key 管理的 Admin key |
| `GATEWAY_CORS_ORIGINS` | `["*"]` | 允许的 CORS 源 |
## 生产部署
如果只是评估,只需运行 `./start-gateway.sh`。对于生产环境:
- **进程管理** — 在 systemd 或 supervisor 后台运行。启动脚本可作为 `ExecStart` 目标。
- **数据库** — 从 SQLite 切换到 PostgreSQL 以支持并发访问:`GATEWAY_DB_URL=postgresql+asyncpg://user:pass@host/gateway`
- **反向代理** — 在前面放置 nginx 或 Caddy 以实现 TLS 终止。Gateway 在 8001 端口运行 HTTP。
- **备份** — 如果使用 SQLite,请备份 `data/gateway.db`。如果使用 PostgreSQL,请根据你的计划使用 `pg_dump`。
- **日志保留** — `GATEWAY_DB_RETENTION_DAYS=90` 会自动删除旧的审计记录。请根据合规要求进行调整。
- **Docker Compose** — `docker compose up -d` 会启动 Gateway、仪表板、Prometheus 和 Grafana。
## 提供商
| 提供商 | 状态 | 功能 |
|----------|--------|-------------|
| **Ollama** | 完全支持 | 聊天、生成、嵌入、模型发现、视觉 |
| **OpenAI** | 完全支持 | 聊天、补全、嵌入、模型发现 |
| **vLLM** | 完支持 | 聊天、补全、嵌入(兼容 OpenAI) |
| **TRT-LLM** | 框架已就绪 | NVIDIA TensorRT LLM 运行时 |
| **SGLang** | 框架已就绪 | 结构化生成运行时 |
## 测试
```
pytest tests/ -v # 514 tests
pytest tests/ --cov=gateway # With coverage
```
## 许可证
MIT License — 详情请参阅 [LICENSE](LICENSE)。
标签:AI治理, AI风险缓解, API审计, LLM网关, 数据合规, 本地部署, 测试用例, 网络安全, 逆向工具, 隐私保护