Skip to content

Latest commit

 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gemini API Proxy 2.0

Gemini API Proxy 2.0 是一个面向 Render / 本地单实例部署的 Gemini 反向代理与运维平台。项目将 FastAPI、Streamlit、任务调度及多账号池管理整合在同一进程中,既能兼容原生 Gemini/Google Generative AI 接口,也提供 OpenAI 格式的 /v1/chat/completions 端点与图形化控制台。

Deploy to Render


核心特性

  • 双账号池调度:支持导入 Gemini CLI 凭证与普通 API Key,按优先级与健康度自动分配请求。
  • OpenAI 兼容层:兼容大部分 Chat Completions 能力,含流式响应、模型列表等,便于接入现有 SDK。
  • 模型映射与限额管理:支持别名、RPM/RPD/TPM 限额、思考预算、流式模式等细粒度配置,并向 CLI 账号自动暴露 *-search 模型。
  • 健康检测与故障转移:带有队列限流、速率缓存、自动熔断/恢复、失败任务清理与多重保活机制。
  • DeepThink 多轮推理:可选的链式思考流程,按需串联搜索、代码沙盒和分析步骤,自动决定迭代轮次(最多 7 轮)。
  • 可视化控制台:Streamlit 仪表盘整合使用率、密钥/账号管理、模型配置、日志查看、任务运行状态与 CLI 凭证导入。
  • 任务调度与持久化:APScheduler 周期触发保活、健康巡检、自动清理等任务;SQLite(或自定义数据库)持久化配置信息、使用记录与授权凭据。
  • 一键部署模板:随仓库提供 render.yaml,在 Render Blueprint 中即可完成持续部署。

Render 部署指南

  1. 准备仓库
    • 保留仓库根目录下的 render.yamlrequirements.txtapp/streamlit_app/
  2. 创建 Blueprint 服务
    • 在 Render Dashboard 选择 New ➝ Blueprint,关联 Git 仓库。
    • render.yaml 会自动生成 Web 服务,默认 plan 为 free
  3. 构建与启动命令
    • 构建:pip install --upgrade pip setuptools wheel && pip install -r requirements.txt
    • 启动:python -m app.runtime.server
  4. 首登与 CLI 凭证导入
    • 部署完成后点击页面中的 https://gemini-api-proxy-xx.onrender.com 即可访问。
    • 在“密钥管理”页面点击“导入 CLI 凭证”,粘贴本地 gemini-cli login 导出或在线获取的 JSON;成功后即可沿用官方 CLI 的免费额度。

获取并导入 gemini-cli 凭证

要沿用官方 CLI 的免费额度,需要先取得一份有效的 CLI OAuth 凭证(JSON),然后在控制台导入。可以选择本地 CLI 或线上工具:

方式 A:本地 gemini-cli 登录

  1. 安装 CLI:npm install -g @google/geminicli
  2. 执行 gemini-cli login,按提示完成浏览器授权。
  3. 登录成功后,终端会输出 JSON 凭证(同时写入 ~/.config/geminicli/),包含 client_idclient_secretrefresh_tokentoken_uriproject_id 等。

方式 B:在线获取(免本地安装)

我们通过 sukaka 老师搭建的认证网站来获取凭证。通过这个方法获取凭证,整个的操作步骤几乎被简化到极致。sukaka 老师,伟大无需多言。

  1. 访问认证网站:http://gcli-auth.sukaka.top:7861/
  2. 输入访问密码:pwd,即可进入 Google OAuth 认证页面。
  3. 获取认证链接
    • 在页面中,你可以直接点击“获取认证链接”按钮,来获取认证链接。
    • 也可以点击“高级选项”部分输入你的项目 ID(如果你不知道是什么,就不要输入,让系统自己检测)。
  4. Google 账号认证
    • 点击“获取认证链接”会出现一个很长的链接,点击打开。
    • 打开后进入 Google 账号登录页面,按提示完成登录。
    • 登录完成后会出现一个错误页面。此时在浏览器地址栏将 localhost 更改为 gcli-auth.sukaka.top(仅替换主机名,其余端口和参数保持不变),按回车访问。
    • 页面显示 “OAuth authentication successful!” 即表示认证成功,可直接关闭该页面。
  5. 获取认证文件
    • 回到认证网站,点击“获取认证文件”,稍候会显示“步骤二:认证成功”。
    • 点击“下载认证文件”获取 JSON 凭证,也可直接复制页面中展示的认证内容。

导入到控制台

  1. 打开 “密钥管理 → Gemini CLI” → “导入 CLI 凭证”。
  2. 将上述获取的 JSON 原样粘贴提交。
  3. 系统会创建 cli-account-* 记录并保存 refresh token,后续请求将继续使用官方 CLI 的 OAuth 客户端,从而继承免费额度。

默认限额(按单个 CLI 账号计算):gemini-2.5-pro 每日 100 次;gemini-2.5-pro-preview 合计每日 1000 次;gemini-2.5-flash 每日 1000 次。

维护与撤销

  • 若凭证失效,可重新获取 JSON(本地或线上方式)再导入。
  • 如需撤销访问,可在 Google 账号的“安全性 → 第三方应用访问权限”中移除 Gemini Code Assist and Gemini CLI,然后在控制台删除对应账号。

API 速览

类别 路径 描述
健康检查 GET /health / /healthz / /wake 基础健康、唤醒与 Render Keep-Alive 接口。
Gemini 原生 POST /v1beta/models/{model}:generateContent 代理到 Gemini 官方接口。
Gemini 原生 POST /v1beta/{model}:streamGenerateContent 流式生成。
OpenAI 兼容 POST /v1/chat/completions Chat Completions,支持流式与非流式。
OpenAI 兼容 GET /v1/models 列出可用模型(去除 models/ 前缀)。
管理 GET /admin/stats 仪表盘数据、任务配置、日志、密钥 CRUD、CLI 凭证导入等。
CLI 凭证 POST /admin/cli-auth/import 导入本地保存的 gemini-cli OAuth 凭证 JSON。

所有管理端口均需内部调用或受控前端访问,请勿直接暴露给未授权用户。


背景任务与并发控制

  • 请求队列:按模型名维护独立信号量,超过 QUEUE_MAX_CONCURRENCY 会进入等待队列;若超过 QUEUE_MAX_WAIT_MS 将返回 429。
  • APScheduler 任务
    • keep_alive:按 KEEP_ALIVE_INTERVAL 分钟触发 /health 等轻量请求,防止 Render 休眠。
    • hourly_health_check:每小时统计密钥健康与使用率。
    • daily_cleanup:每日 02:00 自动清理长时间异常的密钥。
    • daily_db_cleanup:每日 03:00 整理数据库日志与历史记录。
  • 数据库写队列db_queue 将使用日志等写操作放入后台任务,避免阻塞请求线程。

数据与持久化

  • 默认使用位于项目根目录的 gemini_proxy.db,包含密钥表、CLI 凭证、使用日志、配置项等。
  • 可通过 DATABASE_URL 切换至 PostgreSQL、MySQL 等外部数据库。
  • CLI 凭证会以加密 JSON 存储,包含 refresh_tokenclient_idclient_secret 等字段。

安全与部署建议

  • 修改 GEMINI_AUTH_PASSWORDADMIN_AUTH_TOKEN,避免使用默认值。
  • Render 或其他云平台部署时,务必开启 HTTPS 并限制 /admin 访问来源。
  • 为长期运行准备持久化存储,防止实例重建或缩容导致的授权丢失。
  • 在日志或第三方监控中避免暴露实际密钥,可使用项目内的 mask_key 工具函数。

目录结构

├── app/
│   ├── admin/          # 管理 API、数据库层、CLI 凭证、配置服务
│   ├── core/           # 全局设置与缓存
│   ├── proxy/          # Gemini/OpenAI 路由与适配
│   ├── runtime/        # 进程启动、Streamlit 代理、守护逻辑
│   ├── services/       # 队列、工具函数等
│   └── server.py       # FastAPI 入口
├── streamlit_app/      # 控制台页面、样式与工具函数
├── requirements.txt    # 依赖列表
├── render.yaml         # Render 部署模板
└── README.md

开发与测试

  • 代码风格遵循项目现有约定,提交前建议运行 ruffblack
  • 可使用 uvicorn app.server:app --reload 进行热重载开发。
  • 项目当前未包含自动化测试,可根据需要在 tests/ 目录中补充。

贡献

欢迎提交 Issue 或 Pull Request,协助完善 CLI 体验、更多模型映射、自动化测试以及运维工具链。

About

一个简单、免费、高性能的 Gemini API 轮询+代理服务器服务

Resources

Stars

102 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages