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网关, 数据合规, 本地部署, 测试用例, 网络安全, 逆向工具, 隐私保护