一个轻量级、低耦合的大模型 API 分发服务,支持 Cloudflare Workers 和 Docker 双部署模式。
- 协议转换:支持 OpenAI、Anthropic、Gemini、OpenAI Responses API 之间的互转
- 统一中间格式:所有协议转换都经过统一中间格式,实现 N 种协议只需 2N 个转换器
- 配置广场:用户可以公开分享配置模板,其他用户导入后绑定自己的渠道
- 多渠道故障转移:支持多渠道优先级配置,自动熔断和故障转移
- 用户配额管理:每日配额限制,Cron 自动重置
- OIDC 认证:支持任意 OIDC 提供商(Google、Auth0、Keycloak 等)
- 双部署模式:
- Cloudflare Workers(免费计划友好)
- Docker 自托管
┌─────────────────────────────────────────────────────────────┐
│ Frontend │
│ (Vue 3 + shadcn-vue) │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ Backend │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ /v1/* │ │ /admin/* │ │ /auth/* │ │
│ │ 代理 API │ │ 管理 API │ │ OIDC 认证 │ │
│ └──────┬──────┘ └─────────────┘ └─────────────────────┘ │
│ │ │
│ ┌──────▼──────────────────────────────────────────────┐ │
│ │ Protocol Converters │ │
│ │ OpenAI ↔ Unified ↔ Anthropic/Gemini/Responses │ │
│ └──────┬──────────────────────────────────────────────┘ │
│ │ │
│ ┌──────▼──────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Circuit │ │ Router │ │ Storage │ │
│ │ Breaker │ │ (Failover) │ │ (D1/SQLite) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
- 克隆项目
git clone <repo-url>
cd llm-api-gateway- 安装依赖
cd backend
npm install- 配置 wrangler.toml
name = "llm-api-gateway"
main = "src/adapters/cloudflare/index.ts"
compatibility_date = "2024-12-01"
[triggers]
crons = ["0 0 * * *"]
[[d1_databases]]
binding = "DB"
database_name = "llm-api-gateway"
database_id = "your-database-id"
[vars]
OIDC_ISSUER = "https://accounts.google.com"
OIDC_CLIENT_ID = "your-client-id"
OIDC_REDIRECT_URI = "https://your-app.workers.dev/auth/callback"- 创建 D1 数据库
wrangler d1 create llm-api-gateway
# 复制输出的 database_id 到 wrangler.toml- 设置密钥
wrangler secret put OIDC_CLIENT_SECRET
wrangler secret put JWT_SECRET- 部署
npm run deploy- 部署前端到 Cloudflare Pages
cd ../frontend
npm install
npm run build
# 上传 dist 目录到 Cloudflare Pages- 准备环境变量
cd docker
cp env.example .env
# 编辑 .env 文件,填写实际配置- 启动服务
docker-compose up -d- 查看日志
docker-compose logs -f支持任意标准 OIDC 提供商:
| 提供商 | OIDC_ISSUER |
|---|---|
https://accounts.google.com |
|
| Auth0 | https://your-tenant.auth0.com |
| Keycloak | https://your-keycloak/realms/your-realm |
| 协议 | 输入 | 输出 | 说明 |
|---|---|---|---|
openai |
✅ | ✅ | OpenAI Chat Completions API |
anthropic |
✅ | ✅ | Anthropic Messages API |
gemini |
✅ | ✅ | Google Gemini API |
openai-responses |
✅ | ✅ | OpenAI Responses API (新版) |
费用按 token 使用量计算,单位为 $/M tokens:
费用 = (输入 tokens / 1M) × 输入价格
+ (输出 tokens / 1M) × 输出价格
+ (缓存读取 tokens / 1M) × 缓存读取价格
+ (缓存写入 tokens / 1M) × 缓存写入价格
所有 LLM 请求都发送到 /v1/*,由 API Key 绑定的配置决定协议转换:
curl -X POST https://your-gateway.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4",
"messages": [{"role": "user", "content": "Hello!"}]
}'| 端点 | 方法 | 说明 |
|---|---|---|
/admin/me |
GET | 获取当前用户信息 |
/admin/dashboard |
GET | 获取仪表盘统计 |
/admin/configs |
GET/POST | 配置管理 |
/admin/configs/:id |
GET/PUT/DELETE | 单个配置操作 |
/admin/channels |
GET/POST | 渠道管理 |
/admin/api-keys |
GET/POST | API Key 管理 |
/admin/logs |
GET | 请求日志 |
/plaza/configs |
GET | 配置广场 |
/plaza/configs/:id/import |
POST | 导入配置 |
users
├── configs (用户配置)
│ └── config_models (虚拟模型)
│ └── model_channel_mappings (渠道映射)
├── channels (私有渠道)
│ └── channel_models (渠道模型)
├── api_keys (API 密钥)
└── request_logs (请求日志)
channels (公共渠道, owner_id = NULL)
└── channel_models
针对 Cloudflare Workers Free Plan 的限制进行了优化:
- 合并 D1 查询:路由解析使用单次 JOIN 查询
- 内存熔断器:熔断状态不持久化,避免 D1 读写
- 异步写操作:使用
waitUntil()异步记录日志和扣费 - D1 Batch:扣费和日志合并为单次事务
cd backend
npm install
npm run dev # Cloudflare Workers 本地开发
npm run dev:node # Node.js 本地开发cd frontend
npm install
npm run devcd backend
npm run db:generate # 生成迁移
npm run db:push # 推送到数据库llm-api-gateway/
├── backend/
│ ├── src/
│ │ ├── core/ # 核心类型定义
│ │ ├── protocols/ # 协议转换器
│ │ ├── storage/ # 存储层 (Drizzle ORM)
│ │ ├── auth/ # OIDC 认证
│ │ ├── proxy/ # 代理核心
│ │ ├── api/ # API 路由
│ │ └── adapters/ # 平台适配器
│ │ ├── cloudflare/ # Workers 入口
│ │ └── node/ # Node.js 入口
│ ├── wrangler.toml
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ ├── layouts/ # 布局组件
│ │ ├── stores/ # Pinia 状态
│ │ ├── api/ # API 客户端
│ │ └── router/ # 路由配置
│ └── package.json
└── docker/
├── Dockerfile
├── docker-compose.yml
└── nginx.conf
MIT