【开源】智能,安全的 KEY 轮询网关 (减少被 ban & 429 的概率,快速部署到 Cloudflare)

背景

  1. NotebookLM 播客太惊艳了,一直想集成到 zenfeed,来一波 RSS+播客 (已实现【RSS + 播客】基于 L 站热帖生成播客)
  2. 但所需的 TTS 价格居高不下,当时还发帖问了波 有无便宜的大模型语音合成 API ,遂搁置
  3. 天无绝人之路,大善人推出 gemini-flash-tts,音质还行,主要可以嫖免费额度 Gemini TTS 的速率限制是多少
  4. 但问题又来了,一直用的 Gemini Balance 居然只支持单人语音(貌似是 OpenAI 格式,非 gemini 多人格式),结合自己另外的一些小需求,干脆自己撸了一个…(ps 如果这里以及下面提到的差异不是你的痛点,更推荐坛里的 gb)

介绍

  • !!!降低封禁风险!!!: 通过 Cloudflare AI Gateway 路由请求,有效降低 API 密钥(尤其是 Gemini)被封禁的概率。大家用 cf ai gateway 能减少 gemini key G 掉的概率吗
  • !!!智能的错误处理(同时你只管加 KEY,不需要担心存量 KEY 的死活)!!!:
    • 模型级限流: 精准识别并暂时屏蔽达到速率限制的特定模型。特别地,针对 Google AI Studio,能智能区分分钟级和天级配额,进行差异化冷却(例如,触发天级配额后冷却 24 小时)。冷却后自动换 key 重试
    • 自动熔断: 永久禁用被提供商封禁(403 错误)的密钥,减少无效重试。
  • 广泛的兼容性: 支持 Cloudflare AI Gateway 兼容的所有 API 提供商,不止轮询 Gemini,轮询 OpenAI 也是支持的

部署

CF + 部署脚本,就很快

0. 检查环境

  • 安装 Node.jspnpm

  • 有一个 Cloudflare 账户。

1. 创建 AI Gateway

创建一个新的 AI Gateway,并将其命名为 one-balance

2. 一键部署!

git clone https://github.com/glidea/one-balance.git
cd one-balance
pnpm install

# Mac/Linux
AUTH_KEY=your-super-secret-auth-key pnpm run deploycf

# Windows (PowerShell)
$env:AUTH_KEY = "your-super-secret-auth-key"; pnpm run deploycf

脚本将引导你登录 wrangler (如果尚未登录),自动创建所需的 D1 数据库(AI Gateway 不支持通过wrangler创建所以得手动),并部署 Worker。部署成功后,会得到一个 Worker 的 URL,例如 https://one-balance.<your-subdomain>.workers.dev

使用

1. 配置待轮询 KEYS

访问 https://<your-worker-url>


最佳实践::woman_gesturing_no:t2:尽量避免和他人共享 Key,这样系统无法感知全局的调用信息,可能会增加 429 概率

2. 访问 API

curl "https://<your-worker-url>/api/compat/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-super-secret-auth-key" \
  -d '{
    "model": "google-ai-studio/gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": "Hello!"
      }
    ]
  }'

注意model需要加provider前缀,详细参见:

以上方式在流式回复时,存在中文乱码的问题(AI Gateway 侧),通过调用具体 Provider 接口绕过,如 google-ai-studio

curl "https://<your-worker-url>/api/google-ai-studio/v1/models/gemini-2.5-flash:streamGenerateContent?alt=sse" \
 -H 'content-type: application/json' \
 -H 'x-goog-api-key: your-super-secret-auth-key' \
 -d '{
      "contents": [
          {
            "role":"user",
            "parts": [
              {"text":"你是谁?"}
            ]
          }
        ]
      }'

其它 provider 参考:Provider Native · Cloudflare AI Gateway docs

Cherry Studio

Gemini 格式

121 个赞

应该支持的吧 虽然我没用过

11 个赞

这个貌似是 openai 格式的,不是可以支持多人语音的 gemini 格式

佬严谨我改下

7 个赞

高端 没用过tts这些

4 个赞

但应该听过 :laughing: NotebookLM 的双人播客应该就是用的 gemini-2.5pro-tts

4 个赞

谷歌的tts怎么用呀

2 个赞

太强了,大佬

1 个赞

太强啦佬

1 个赞

@ajd 佬 搭好了,也放了几个可用的key进去但是服务访问不通,500错误

2 个赞

大佬,请问这个项目是纯部署在cloudflare的吗还是要有自己的vps

1 个赞

感谢分享

单纯curl呢,上面有例子。另外可以登陆cf看worker日志

1 个赞

纯cf,嘎嘎方便

感谢大佬,star+fork已操作。并期待后续继续努力优化

1 个赞

@ajd 真有bug,日志里看到了请求/api/compact,竟然去用了openai的key,然后去站点里看gemini的key全无了 :innocent:
重试了确实会自动删除gemini的key…



1 个赞

Model加前缀了没,根据前缀确定provider的,可以看cf ai gateway文档

返回403就会被ban

我也遇到了,我后来发现URL调用的后缀是/api/compat/chat/completions

在cherry studio里要填:/api/compat/chat/completions#

5 个赞

好人呐,地址没错,cherry srudio里可以再简化下/api/compat/就行了


但是调用成功一次后所有gemini key会被立即block,你遇到过吗

1 个赞

感谢佬反馈,文档又写错了 :melting_face: 已修正