4.2 KiB
4.2 KiB
OpenAI 路由代理(SQLite + 可视化管理)
这是一个面向个人和小团队的 OpenAI 兼容代理,重点是:
- 不依赖 MySQL,单文件 SQLite 即可运行。
- 一个统一入口接入多个上游 API。
- 上游失败时自动切换,减少手工改配置。
- 提供中文可视化后台,支持上游管理、统计查看、连通性测试、日志清理。
适用场景
- 你有多个免费/限额 API key,想统一管理。
- 客户端(如 Cherry Studio / OpenClaw)只想配一个地址和一个 key。
- 希望某个上游挂了能自动切到下一个上游。
快速开始
- 安装依赖
pip install flask requests
- 复制配置模板
Copy-Item .env.example .env
-
打开
.env,至少修改这三项 -
OPENAI_PROXY_AUTH:客户端访问代理用的 key(建议填 token 本体)。 -
OPENAI_PROXY_ADMIN_TOKEN:后台登录口令。 -
OPENAI_PROXY_SECRET_KEY:Flask 会话密钥(建议随机长字符串)。 -
初始化数据库(首次一次)
python openai_route.py --init-db
- 启动服务
python openai_route.py
启动后访问:
- 首页:
http://127.0.0.1:8056/ - 管理后台:
http://127.0.0.1:8056/admin
后台功能
后台首页 /admin 支持:
- 新增上游
- 编辑上游
- 启用/停用上游
- 删除上游(会自动清理关联日志)
- 一键测试单条上游连通性(按钮:
测试连通性) - 清理历史日志(按钮:
清理日志) - 查看最近调用命中哪条上游(“最近 50 次调用”)
统计页 /admin/stats 支持:
- 近 14 天请求统计
- 最近失败日志明细
字段说明(后台)
- 中文别名:客户端可直接填这个值作为
model。 - 分组编号:用于分组路由,支持数字和英文(例如
1、nvidia_pool)。 - 上游模型名:转发给上游时实际使用的模型名。
- 上游地址:上游
.../v1地址。 - API 密钥:该上游 key。
- 强制参数(JSON):会覆盖或补充客户端请求参数。
- 请求限额:周期内请求数,
0表示不限额。 - Token 限额:周期内 token,
0表示不限额。
客户端如何填写
base_url:http://127.0.0.1:8056/v1api_key:.env里的OPENAI_PROXY_AUTHmodel:建议填“中文别名”或“分组编号”
示例:
- 使用中文别名池:
model=通用聊天 - 使用数字分组:
model=1 - 使用英文分组:
model=group:nvidia_pool(也支持直接填nvidia_pool)
路由识别规则
model 的识别顺序:
- 以
group:开头:按分组路由 - 包含逗号:按多分组路由
- 纯数字:按分组路由
- 其他:先按“中文别名/上游模型名”精确匹配,未命中再按“分组名”匹配
自动切换规则
当命中池子后,系统会在可用上游中选择并自动切换:
- 默认“稳定优先”:按你配置顺序(上游编号从小到大)优先使用,不会每轮都轮换模型。
- 仅当本次请求失败时,才会在同一请求内自动切到下一个上游(无须客户端手工改模型)。
- 这些状态会触发自动切换:
401/403/404/408/409/425/429/500/502/503/504。 400/422仅在错误文本明显属于“模型不存在/不可用”时才切换,避免误切换。- 网络异常也会切换到下一个上游。
可通过响应头查看命中信息:
X-Route-Upstream-IdX-Route-GroupX-Route-ModelX-Route-Tried-Ids
429 常见误解
很多客户端会把所有 429 翻译成“请求速率超过限制”,但不一定真是限速。
请以后端返回的 error.message 为准,里面会给出详细原因(匹配数、可用数、冷却数、限额阻塞数)。
常用环境变量
OPENAI_PROXY_AUTHOPENAI_PROXY_ADMIN_TOKENOPENAI_PROXY_SECRET_KEYOPENAI_PROXY_SQLITE_PATHOPENAI_PROXY_MAX_FAILOVER_ATTEMPTSOPENAI_PROXY_FAILURE_COOLDOWN_SECOPENAI_PROXY_AUTO_GROUP_FALLBACKOPENAI_PROXY_ADMIN_ENABLED
生产建议
- 务必修改默认口令。
- 后台建议仅内网可访问。
- 定期清理日志,避免 SQLite 持续膨胀。
- 若后续是多实例高并发,再迁移 MySQL/Postgres。