Skip to content

NickJerome/tiny-ai-api-hub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLM API Gateway

一个轻量级、低耦合的大模型 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)       │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

快速开始

Cloudflare Workers 部署

  1. 克隆项目
git clone <repo-url>
cd llm-api-gateway
  1. 安装依赖
cd backend
npm install
  1. 配置 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"
  1. 创建 D1 数据库
wrangler d1 create llm-api-gateway
# 复制输出的 database_id 到 wrangler.toml
  1. 设置密钥
wrangler secret put OIDC_CLIENT_SECRET
wrangler secret put JWT_SECRET
  1. 部署
npm run deploy
  1. 部署前端到 Cloudflare Pages
cd ../frontend
npm install
npm run build
# 上传 dist 目录到 Cloudflare Pages

Docker 部署

  1. 准备环境变量
cd docker
cp env.example .env
# 编辑 .env 文件,填写实际配置
  1. 启动服务
docker-compose up -d
  1. 查看日志
docker-compose logs -f

配置说明

OIDC 配置

支持任意标准 OIDC 提供商:

提供商 OIDC_ISSUER
Google 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) × 缓存写入价格

API 使用

代理 API

所有 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!"}]
  }'

管理 API

端点 方法 说明
/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 的限制进行了优化:

  1. 合并 D1 查询:路由解析使用单次 JOIN 查询
  2. 内存熔断器:熔断状态不持久化,避免 D1 读写
  3. 异步写操作:使用 waitUntil() 异步记录日志和扣费
  4. D1 Batch:扣费和日志合并为单次事务

开发

后端开发

cd backend
npm install
npm run dev        # Cloudflare Workers 本地开发
npm run dev:node   # Node.js 本地开发

前端开发

cd frontend
npm install
npm run dev

数据库迁移

cd 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages