企业级 AI 调用统一管理网关,提供成本监控和安全过滤两大核心能力。
- OpenAI 兼容代理 — 透明代理 Chat/Completions/Embeddings,现有 SDK 零改造接入
- 多厂商路由 — 支持多个上游厂商,按模型前缀自动路由(OpenAI / Claude / DeepSeek / Gemini / Qwen)
- 流式 Token 统计 — SSE 流式响应实时计量,自动注入
stream_options提取 usage - 缓存分档计费 — 区分 cache_hit / cache_miss,按厂商价格表精确计费
- 子 Key 分发 — 生成独立 API Key 给下游用户,支持绑定厂商、设置有效期
- 安全扫描 — Prompt Injection 检测、敏感信息脱敏(身份证/手机号/银行卡 Luhn 校验)、有害内容过滤
- 分级拦截 — high/medium/low 三档安全策略,medium 仅记录不阻断
- 管理面板 — 暗色主题 Web UI,Chart.js 图表,自动刷新,移动端适配
- 厂商直通监控 — 对指定厂商直接计量原始 Token(绕过估算)
- 数据库迁移 — Alembic 管理表结构演进,升级零停机
Client → AI Gateway → Security Scan → Auth (子Key) → Proxy (多厂商路由) → Upstream API
↓ ↓
Monitor (Token计量) Stream Usage 提取
↓
SQLite / PostgreSQL
↓
Web Dashboard (Jinja2 + Chart.js)
cp .env.example .env
# 编辑 .env 填入你的 UPSTREAM_API_KEY
docker-compose up -d访问 http://localhost:8989 进入管理面板。
pip install -r requirements.txt
cp .env.example .env
# 编辑 .env 填入配置
uvicorn src.main:app --host 0.0.0.0 --port 8989 --reload所有配置通过 .env 文件管理,复制 .env.example 开始:
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
UPSTREAM_API_KEY |
✅ | — | 上游 AI 厂商的 API Key |
UPSTREAM_BASE_URL |
https://api.openai.com/v1 |
上游 API 地址 | |
MASTER_API_KEY |
✅ | — | 管理面板登录密钥 |
DATABASE_URL |
sqlite+aiosqlite:///data/gateway.db |
数据库连接(支持 PostgreSQL) | |
SECURITY_BLOCK_LEVEL |
medium |
安全拦截级别:high/medium/low | |
SESSION_SECRET |
— | Session 签名密钥(生产环境必配) | |
ALLOWED_ORIGINS |
* |
CORS 允许域名(生产环境改为具体域名) | |
GATEWAY_PORT |
8989 |
网关监听端口 |
Swagger 文档:http://localhost:8989/docs
| 端点 | 说明 |
|---|---|
POST /v1/chat/completions |
Chat Completions 代理 |
POST /v1/completions |
Completions 代理 |
POST /v1/embeddings |
Embeddings 代理 |
| 端点 | 说明 |
|---|---|
GET /api/monitor/records |
Token 消耗记录查询 |
GET /api/monitor/aggregate |
按维度聚合统计(user/model/provider/function) |
GET /api/monitor/cache-stats |
缓存命中率统计 |
GET /api/monitor/export |
数据导出(CSV / Excel) |
| 端点 | 说明 |
|---|---|
GET /api/security/events |
安全事件日志 |
GET/POST/PUT/DELETE /api/security/policies |
安全策略 CRUD |
| 端点 | 说明 |
|---|---|
POST /api/auth/keys |
创建子 Key |
GET /api/auth/keys |
列出子 Key |
DELETE /api/auth/keys/{id} |
撤销子 Key |
POST /api/auth/keys/{id}/test |
测试子 Key 连通性 |
POST /api/auth/keys/{id}/test-proxy |
网关链路测试 |
| 端点 | 说明 |
|---|---|
GET/POST /api/providers |
厂商配置列表 / 新增 |
PUT/DELETE /api/providers/{id} |
修改 / 删除厂商 |
POST /api/providers/{id}/test |
连通性测试 |
POST /api/providers/{id}/toggle-direct |
切换直通监控 |
关键词分组匹配,按风险等级分为 injection_high("ignore previous instructions"等)和 injection_medium("忽略之前的"等),high 级别关键词命中才拦截。
- 中国身份证号(15/18位 + 校验位验证)
- 手机号(1xx-xxxx-xxxx)
- 银行卡号(Luhn 校验)
- 邮箱地址
| 级别 | Injection | 敏感信息 | 有害内容 |
|---|---|---|---|
| high | 拦截 | 脱敏 | 拦截 |
| medium | 记录 | 脱敏 | 记录 |
| low | 记录 | 记录 | 记录 |
内置多厂商价格表(按 1M tokens 计价):
| 厂商 | 模型 | Input ($/1M) | Output ($/1M) | Cache Hit |
|---|---|---|---|---|
| OpenAI | gpt-4o | 2.50 | 10.00 | 1.25 |
| OpenAI | gpt-4o-mini | 0.15 | 0.60 | 0.075 |
| Claude | claude-3.5-sonnet | 3.00 | 15.00 | 0.30 |
| DeepSeek | deepseek-chat | 0.14 | 0.28 | 0.014 |
| Qwen | qwen-turbo | 0.05 | 0.10 | — |
支持模糊匹配(gpt-4o-2024-08-06 自动匹配到 gpt-4o 价格),按降序优先最具体匹配。
pytest tests/ -v --cov=src --cov-report=term-missingai-gateway/
├── alembic/ # 数据库迁移
│ └── versions/ # 迁移脚本
├── src/
│ ├── auth/ # 子 Key 认证
│ ├── core/ # 代理、路由、加密
│ ├── db/ # 数据库连接、初始化
│ ├── monitor/ # Token 计量、聚合、导出
│ ├── security/ # 安全扫描、脱敏、中间件
│ └── ui/ # 管理面板(Jinja2 + Chart.js)
│ └── templates/ # HTML 模板(base 继承)
├── tests/ # 测试用例
├── Dockerfile
├── docker-compose.yml
├── alembic.ini
├── requirements.txt
└── .env.example
- per-user / per-key 速率限制和配额管理
- 厂商健康检查后台任务(故障自动切换)
- 告警通知(Webhook / 邮件)
- PostgreSQL 生产就绪
- API 版本化(/v2/)
- 价格表外置到数据库
- Injection 检测升级为语义模型
MIT