方案概览

为了给 side project 提供稳定的 LLM 接口,可以将三款免费服务拼成一套“轻量后端”——数据库用 Aiven 免费 MySQL,推理服务部署在 Hugging Face Space,API 网关由开源的 gpt-load 负责。最终实现了多密钥轮询和降级控制,不再担心某个 Key 被限速。

整体架构:

客户端请求
   │
   ├─> Hugging Face Space (gpt-load Docker 容器)
   │       └─ 读取 Aiven MySQL 中的密钥池
   └─< LLM 响应(轮询后的结果)

第一步:申请 Aiven MySQL

https://aiven.io/

Aiven可以免费部署一台1核1G内存数据库

  1. 注册 Aiven 账号后,新建一个 MySQL 服务,免费套餐即可。
  2. 进入 Service 页面,记下主机、端口、用户名等连接信息。

Aiven 创建 MySQL 服务 记录数据库连接参数

这些连接信息建议整理进 .env 文件中的 DATABASE_DSN,容器启动时即可直接读取。

第二步:在 Hugging Face 部署 gpt-load

https://huggingface.co/

https://github.com/tbphp/gpt-load

  1. 新建一个 Docker Space,镜像选择公共的 ghcr.io/tbphp/gpt-load:latest
  2. 在仓库中上传自己的 Dockerfile 与启动脚本。

创建 Docker Space 在线编辑 Dockerfile

Dockerfile 内容如下:

FROM ghcr.io/tbphp/gpt-load:latest
WORKDIR /app
COPY .env .
COPY start.sh .
RUN chmod +x ./start.sh
RUN mkdir -p data/logs && chmod -R 777 data
EXPOSE 7860
ENTRYPOINT ["./start.sh"]

启动脚本 start.sh 负责加载环境变量并运行二进制:

#!/bin/sh
set -e

if [ -f .env ]; then
  export $(grep -v '^#' .env | xargs)
  echo "env loaded"
fi

echo "starting gpt-load"
exec /app/gpt-load

第三步:整理配置

.env 中的公共参数:

PORT=7860
HOST=0.0.0.0
SERVER_READ_TIMEOUT=60
SERVER_WRITE_TIMEOUT=600
SERVER_IDLE_TIMEOUT=120
SERVER_GRACEFUL_SHUTDOWN_TIMEOUT=10
IS_SLAVE=false
TZ=Asia/Shanghai
ENABLE_CORS=true
ALLOWED_ORIGINS=*
ALLOWED_METHODS=GET,POST,PUT,DELETE,OPTIONS
ALLOWED_HEADERS=*
LOG_LEVEL=info
LOG_FORMAT=text
LOG_ENABLE_FILE=true
LOG_FILE_PATH=./data/logs/app.log

敏感信息不要写死在仓库里,而是通过 Hugging Face 的 “Secrets” 页面补齐,例如:

AUTH_KEY=<自定义登录口令>
ENCRYPTION_KEY=<可选密钥,用于本地加密>
DATABASE_DSN=<user>:<password>@tcp(<host>:<port>)/<db>?charset=utf8mb4&parseTime=True&loc=Local&tls=skip-verify

部署完成后,在 Space 设置页可以查看绑定域名及健康状态。

Space 部署状态 在线日志与访问入口

第四步:导入密钥并开启轮询

  1. 使用 Space 暴露的 URL 访问 gpt-load 控制台,输入 AUTH_KEY 登录。
  2. 创建分组(例如 gemini1),导入多组 API Key。

创建分组并导入密钥 支持批量导入密钥

分组创建后,会得到一个代理地址和独立的代理密钥。例如:

  • 代理地址:https://your-space.hf.space/proxy/gemini1
  • 代理密钥:控制台自动生成

调用方只需要替换原本的本地地址:

原地址:http://localhost:3001/proxy/gemini1
新地址:https://your-space.hf.space/proxy/gemini1

密钥轮询生效后,第三方工具(例如 Cherry Studio)就可以直接调用:

第三方工具配置代理 测试成功的返回结果

维护建议

  • 定期检查 MySQL 表里的失效密钥,结合 gpt-load 的统计报表做清理。
  • Space 偶尔会因为空闲而休眠,可以配置一个轻量的定时任务去 Ping 保活。
  • 需要更高可用时,可以把 .envstart.sh 迁移到 Git 仓库,配合 GitHub Actions 自动更新。

总结

Aiven、Hugging Face 与 gpt-load 的组合让个人项目也能拥有“企业级”的密钥轮询能力。成本几乎为零,唯一要做的就是整理好配置与密钥管理策略。