One Balance
扫码查看

利用Cloudflare AI Gateway实现API密钥的智能负载均衡

One Balance

综合介绍

One Balance 是一个部署在 Cloudflare 平台上的开源工具,主要用于解决多个AI服务API密钥的统一管理和智能调度问题。它通过利用 Cloudflare AI Gateway 的路由能力,为拥有多个API密钥的用户提供了一个中间层。这个中间层可以自动轮询使用这些密钥,并在某个密钥达到速率限制或失效时,智能地切换到下一个可用的密钥。该工具的核心优势在于能够通过Cloudflare的网络路由请求,降低某些API密钥(如Gemini)被封禁的风险。同时,它具备精细化的错误处理机制,能够区分不同类型的速率限制(例如分钟级和天级配额),并对失效的密钥执行自动熔断,从而提升API请求的成功率和资源利用率。由于它构建于Cloudflare Workers之上,整个部署过程相对简单,并且可以利用Cloudflare提供的免费额度。

功能列表

  • 降低封禁风险: 所有API请求都通过Cloudflare AI Gateway进行路由,这层代理可以有效降低IP地址暴露带来的封禁风险,特别是针对Google Gemini等服务。
  • 智能错误处理:
    • 模型级限流: 能识别因达到速率限制(429错误)而失败的请求,并仅对受限的特定模型设置冷却期,而不是禁用整个密钥。
    • 智能冷却策略: 针对Google AI Studio的分钟级和天级两种配额限制,系统能自动应用不同的冷却时间(如60秒或24小时)。
    • 自动熔断: 当密钥因认证失败或被封禁(403错误)而返回错误时,系统会永久禁用该密钥,避免无效重试。
  • 部署简单: 基于Cloudflare Workers构建,提供了一键部署脚本,能够自动完成Worker和D1数据库的创建。
  • 广泛的兼容性: 支持所有与Cloudflare AI Gateway兼容的API提供商,包括对Gemini TTS(文本转语音)的轮询支持。
  • 统一的API入口: 用户部署后,只需将所有AI请求指向部署的Worker地址,即可通过统一的入口访问不同的后端AI服务。
  • 密钥管理界面: 提供一个简单的Web界面,用于添加、管理和查看所有待轮询密钥的状态。
  • 高可靠性与可扩展性: 构建在Cloudflare的高可用基础设施之上,采用无服务器架构,可根据流量自动扩展。密钥状态存储在D1数据库中,实现了无状态计算。

使用帮助

One Balance 是一个强大的API密钥管理和分发工具,通过以下步骤可以完成安装和使用,有效管理你的AI服务密钥池。

一、 环境准备

在开始部署之前,你需要准备好以下环境:

  1. Node.js 和 pnpm: 确保你的电脑上已经安装了Node.js和pnpm包管理工具。pnpm可以显著提升安装速度和磁盘空间利用率。
  2. Cloudflare 账户: 你需要一个有效的Cloudflare账户。如果没有,可以前往官网免费注册。

二、 部署流程

第1步:创建AI Gateway

首先,你需要在Cloudflare上创建一个AI Gateway,One Balance将通过它来路由所有API请求。

  1. 登录到你的Cloudflare仪表板。
  2. 在左侧导航栏中,找到并点击 AI 菜单,然后选择 AI Gateway
  3. 点击“创建网关”按钮,创建一个新的AI Gateway。
  4. 将其命名为 one-balance 并完成创建。这个名称将用于后续的部署配置。

第2步:克隆并部署代码

接下来,你需要从GitHub获取项目代码,并在本地完成部署操作。

  1. 打开终端或命令行工具,使用 git 克隆项目仓库:
    git clone https://github.com/glidea/one-balance.git
    
  2. 进入项目目录:
    cd one-balance
    
  3. 使用 pnpm 安装项目依赖:
    pnpm install
    ```4.  执行部署脚本。在部署过程中,你需要设置一个自定义的认证密钥(`AUTH_KEY`),这个密钥将作为访问你的One Balance服务的“超级密码”。
    -   **在 macOS 或 Linux 上**:
    ```bash
    AUTH_KEY=your-super-secret-auth-key pnpm run deploycf
    ```        请将 `your-super-secret-auth-key` 替换为你自己的强密码。
    -   **在 Windows (PowerShell) 上**:
    ```powershell
    $env:AUTH_KEY = "your-super-secret-auth-key"; pnpm run deploycf
    ```
    同样,请替换 `your-super-secret-auth-key`。
    
  4. 运行脚本后,它会引导你通过 wrangler(Cloudflare的命令行工具)登录你的Cloudflare账户。登录成功后,脚本会自动创建所需的D1数据库和Worker应用。
  5. 部署成功后,终端会输出一个Worker的URL地址,格式通常为 https://one-balance-backend.<你的子域名>.workers.dev。请妥善保管这个URL,它是你后续所有操作的入口。

三、 功能操作

1. 配置待轮询的API密钥

部署完成后,你需要将你的AI服务API密钥添加到One Balance中进行管理。

  1. 使用浏览器访问你的Worker URL:https://<your-worker-url>
  2. 进入管理界面后,你可以批量添加你想要轮询的API密钥。将你的密钥粘贴进去,系统会自动将它们纳入轮询池。

最佳实践: 建议不要与他人共享密钥池。因为系统是根据单个密钥的调用情况来进行智能调度的,共享会导致系统无法获取全局的调用信息,从而可能增加因速率限制(429错误)导致的请求失败概率。

2. 通过One Balance访问API

配置好密钥后,你可以将原本直接请求AI服务提供商的API地址替换为你的One Balance Worker地址。请求格式为:https://<your-worker-url>/api/<ai-gateway-path>

这里的 <ai-gateway-path> 是指Cloudflare AI Gateway支持的原始API路径。

示例:假设你的Worker URL是 https://one-balance-backend.workers.dev,并且你想请求Google的Gemini 1.5 Pro模型,那么最终的请求URL应该是:https://one-balance-backend.workers.dev/api/google/v1beta/models/gemini-1.5-pro-latest:generateContent

3. API认证

所有通过One Balance的API请求都需要进行认证,认证密钥就是你在部署时设置的 AUTH_KEY。你需要将这个AUTH_KEY通过相应服务商的认证头(Header)发送。

  • OpenAI: 使用 Authorization 头,格式为 Bearer <AUTH_KEY>
  • Google, Anthropic, Mistral AI等: 使用服务商自定义的Header,例如Google使用 x-goog-api-key: <AUTH_KEY>

4. API请求示例

以下是使用 curl 命令进行API请求的几个例子:

  • 直接请求Google Gemini (支持流式传输)
    curl "https://<your-worker-url>/api/google/v1/models/gemini-1.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":"你是谁?"} ] } ] }'
    
  • 使用OpenAI兼容格式请求任意服务 (以Google Gemini为例)这个功能允许你用调用OpenAI的格式来访问其他AI服务,但请注意,这种方式目前可能不支持流式传输,且中文可能出现乱码。
    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/gemini-1.5-pro-latest",
    "messages": [
    {
    "role": "user",
    "content": "Hello!"
    }
    ]
    }'
    

    model字段的格式为 $provider/$model,具体提供商名称可以参考Cloudflare AI Gateway的文档。

  • 请求OpenAI
    curl https://<your-worker-url>/api/openai/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer your-super-secret-auth-key" \
    -d '{
    "model": "gpt-4o",
    "messages": [
    {
    "role": "user",
    "content": "Hello!"
    }
    ]
    }'
    

应用场景

  1. 开发者和小型团队对于拥有多个AI服务(如OpenAI, Google AI, Anthropic等)账号的开发者或小型团队,API密钥的管理和轮换是一个痛点。One Balance提供了一个集中的解决方案,可以将所有密钥放入一个池中。开发者无需在自己的应用程序中编写复杂的密钥轮换和错误处理逻辑,只需将API请求指向One Balance的统一入口,即可实现密钥的自动、智能调度,最大化利用每个密钥的免费或付费配额。
  2. 多用户共享服务在一些需要向多用户提供AI功能访问的场景下,例如内部工具平台或小型SaaS服务。管理员可以使用One Balance作为API网关,后端接入一个包含多个API密钥的池。这样既可以为前端用户提供一个稳定、统一的API接入点,又能通过后端的密钥轮换来承载更大的请求量,同时避免单个密钥因达到速率限制而导致服务中断。
  3. 降低API使用成本与风险对于依赖Google AI Studio等有免费额度但限制严格的服务的用户,One Balance尤为有用。它通过Cloudflare网络路由请求,可以在一定程度上降低因IP地址频繁请求而被封禁的风险。其智能冷却机制能够精细化处理分钟级和天级限流,确保在不违反服务条款的情况下,尽可能充分地利用每一个密钥的免费额度,从而有效降低API使用成本。

QA

  1. One Balance支持哪些AI服务提供商?One Balance在设计上兼容所有Cloudflare AI Gateway支持的服务提供商。这包括主流的OpenAI、Google (Gemini)、Anthropic (Claude)、Mistral AI、ElevenLabs等。只要一个服务可以被添加到Cloudflare AI Gateway,理论上就可以通过One Balance进行密钥轮询和管理。
  2. 部署One Balance需要付费吗?One Balance本身是开源免费的。它部署在Cloudflare Workers和D1数据库上,可以充分利用Cloudflare提供的免费套餐额度。对于个人开发者或中小型应用场景,其免费额度(例如每天100,000次Workers请求和D1数据库读写次数)通常是足够的。如果你的使用量超过了免费额度,则需要根据Cloudflare的定价支付超出部分的费用。
  3. 什么是AUTH_KEY?它和我的AI服务API密钥有什么关系?AUTH_KEY是在部署One Balance时由你自己设置的一个密码。它相当于你自建的这个密钥管理服务的“主访问密码”,用于保护你的One Balance服务不被未授权访问。它与你从Google、OpenAI等处获取的API密钥是完全不同的。当你的应用程序调用One Balance时,需要提供这个AUTH_KEY进行认证;而One Balance在收到请求后,会从它的密钥池中取出一个可用的AI服务API密钥,再去请求真正的AI服务。
  4. 如果一个API密钥失效或被封禁了,系统会如何处理?系统会进行自动熔断处理。当一个密钥在请求时返回认证失败(如401错误)或权限禁止(如403错误)的响应时,One Balance会立即将该密钥的状态标记为“blocked”(已封禁),并将其从可用的轮询池中移除。然后,系统会自动使用池中的下一个可用密钥重试刚才失败的请求。这个过程对用户是透明的,保证了服务的连续性。
微信微博Email复制链接