根据《生成式人工智能服务管理暂行办法》的要求,请勿对中国地区公众提供一切未经备案的生成式人工智能服务。
基于 Next.js + SQLite 的多租户 LLM 网关 + 管理控制台。
better-sqlite3)POST /api/v1/chat/completions — OpenAI Chat CompletionsPOST /api/v1/responses — OpenAI ResponsesPOST /api/v1/messages — Anthropic Claude MessagesGET /api/v1/models — 获取可用模型列表用户 > 组 > 全局默认)pnpm install
pnpm dev
打开 http://localhost:3000,首个注册用户自动成为管理员。
全部可选,均有默认值:
| 变量 | 默认值 | 说明 |
|---|---|---|
JWT_ACCESS_SECRET | dev-access-secret-change-me | Access Token 签名密钥 |
JWT_REFRESH_SECRET | dev-refresh-secret-change-me | Refresh Token 签名密钥 |
JWT_ACCESS_EXPIRES_SECONDS | 900 | Access Token 有效期(15 分钟) |
JWT_REFRESH_EXPIRES_SECONDS | 604800 | Refresh Token 有效期(7 天) |
AUTH_DISABLED | — | 设为 1 关闭所有认证(单用户模式) |
适用于局域网内单人使用,无需注册登录:
AUTH_DISABLED=1 pnpm dev
noauth 管理员用户和 API KeySQLite 数据库:data/gateway.db(首次运行自动创建)
数据表:channels、models、users、groups、keys、settings、logs
POST /api/auth/register — 受 允许账号密码注册 设置控制POST /api/auth/login — 受 允许账号密码登录 设置控制POST /api/auth/refresh — 刷新令牌GET /api/auth/me — 获取当前用户信息POST /api/auth/change-password — 修改密码POST /api/auth/logout — 退出登录用户名仅允许英文字母和数字([A-Za-z0-9]),最少 3 位。
在管理后台「系统设置」页面配置:
.well-known/openid-configuration)role 值 vip → VIP 组)接口:
| 端点 | 说明 |
|---|---|
GET /api/auth/oidc/status | 公开接口,返回各登录方式的可用状态 |
GET /api/auth/oidc/authorize | 发起 OIDC 授权流程 |
GET /api/auth/oidc/callback | 处理 OIDC 提供商回调 |
GET /api/auth/oidc/bind | 已登录用户绑定 OIDC 账号 |
POST /api/auth/oidc/unbind | 已登录用户解绑 OIDC 账号 |
管理员可独立开关账号密码登录和 OIDC 登录,但至少需保留一种登录方式。
用户组定义用户继承的基线配置:
继承优先级:用户设置 > 组设置 > 全局默认。用户的限流值为 -1 表示继承组设置。
OIDC 组映射:在系统设置中配置「用户组 Claim」(如 role),在各用户组中配置「OIDC Claim 匹配值」(如 premium)。用户通过 OIDC 登录时自动分配到匹配的组,每次登录自动同步。
| 接口范围 | 权限要求 |
|---|---|
/api/admin/* | 管理员角色 |
/api/user/* | 已认证用户,仅限本人资源 |
/api/dashboard/* | 已认证用户 (Web 认证) |
/api/v1/* | API Key 认证 (Authorization: Bearer sk-gw-...) |
# 获取模型列表
curl http://localhost:3000/api/v1/models \
-H 'Authorization: Bearer sk-gw-xxxx'
# OpenAI Chat Completions
curl http://localhost:3000/api/v1/chat/completions \
-H 'Authorization: Bearer sk-gw-xxxx' \
-H 'Content-Type: application/json' \
-d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "你好"}]}'
# OpenAI Responses
curl http://localhost:3000/api/v1/responses \
-H 'Authorization: Bearer sk-gw-xxxx' \
-H 'Content-Type: application/json' \
-d '{"model": "gpt-4o", "input": "你好"}'
# Anthropic Claude Messages
curl http://localhost:3000/api/v1/messages \
-H 'Authorization: Bearer sk-gw-xxxx' \
-H 'Content-Type: application/json' \
-d '{"model": "claude-sonnet-4-6", "max_tokens": 1024, "messages": [{"role": "user", "content": "你好"}]}'
deleted_at 标记而非物理删除。