Skip to content

cccxy08/ai-gateway

Repository files navigation

AI Gateway

企业级 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)

🚀 快速启动

方式一:Docker(推荐)

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 网关监听端口

📡 API 清单

Swagger 文档:http://localhost:8989/docs

代理接口(OpenAI 兼容)

端点 说明
POST /v1/chat/completions Chat Completions 代理
POST /v1/completions Completions 代理
POST /v1/embeddings Embeddings 代理

监控 API

端点 说明
GET /api/monitor/records Token 消耗记录查询
GET /api/monitor/aggregate 按维度聚合统计(user/model/provider/function)
GET /api/monitor/cache-stats 缓存命中率统计
GET /api/monitor/export 数据导出(CSV / Excel)

安全 API

端点 说明
GET /api/security/events 安全事件日志
GET/POST/PUT/DELETE /api/security/policies 安全策略 CRUD

Key 管理 API

端点 说明
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 网关链路测试

厂商配置 API

端点 说明
GET/POST /api/providers 厂商配置列表 / 新增
PUT/DELETE /api/providers/{id} 修改 / 删除厂商
POST /api/providers/{id}/test 连通性测试
POST /api/providers/{id}/toggle-direct 切换直通监控

🛡 安全模块

Injection 检测

关键词分组匹配,按风险等级分为 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-missing

📦 项目结构

ai-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

📋 Roadmap

  • per-user / per-key 速率限制和配额管理
  • 厂商健康检查后台任务(故障自动切换)
  • 告警通知(Webhook / 邮件)
  • PostgreSQL 生产就绪
  • API 版本化(/v2/)
  • 价格表外置到数据库
  • Injection 检测升级为语义模型

📄 License

MIT

About

企业级 AI 调用管理网关 — 多厂商路由 · 流式Token计量 · 安全扫描 · 子Key分发

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages