
「Gemini-Balance」搭建高可用API Key轮询工具
写在前面
自 Google 发布其强大的大型语言模型 Gemini 以来,全球的开发者都渴望将其集成到自己的应用中。Gemini API 凭借其出色的多模态能力和慷慨的免费额度,每个API每天可以提供100次Gemini 2.5 Pro 这样的顶级大模型的调用。对于简单的对话而言,这样的免费额度已经足够使用,但在更深入的实际应用中,我们常常会遇到一些棘手的问题:
单一 API Key 的速率限制:免费的 Gemini API Key 有每分钟请求次数(RPM)的限制,一旦流量稍大,应用就可能陷入瘫痪。
多 Key 管理的复杂性:为了绕过限制,我们可能会注册多个 Key,但在代码中手动管理和轮询这些 Key 非常繁琐且容易出错。
生态工具的兼容性:许多优秀的 LLM 应用和客户端(如各种桌面客户端、VSCode 插件等)都是围绕 OpenAI 的 API 格式设计的,无法直接使用 Gemini API。
网络环境的挑战:在某些网络环境下,直接访问 Google API 可能会遇到困难。
而开源项目snailyp/gemini-balance能够轻松解决以上痛点,它是一个为 Gemini API 设计的轮询代理和负载均衡服务,它的核心使命是简化 Gemini API 的使用,让开发者能够像使用一个“超级API”一样,轻松、高效、稳定地调用 Gemini 的强大能力。
核心优势
1. 多 API Key 管理与负载均衡
这是项目的核心功能,它能够为你创建一个 API Key 池。当收到请求时,它会采用轮询策略,依次使用池中的 Key 来处理请求。
突破速率限制
提高可用性
2. 无缝兼容 OpenAI API 格式
它可以将标准的 OpenAI Chat API 请求格式实时转换为 Gemini API 所需的格式,并将 Gemini 的响应再转换回 OpenAI 的格式。
能够完美兼容以下核心 OpenAI API 端点:
POST /v1/chat/completions
:核心的聊天接口。POST /v1/embeddings
:文本嵌入接口,你可以用 Gemini 的模型来生成向量。
POST /v1/images/generations
:图像生成接口,它巧妙地将 Gemini 的图像模型适配成了 OpenAI 的调用方式。
3. 强大的功能扩展
gemini-balance 不仅仅是一个代理,它还解锁了 Gemini 的许多高级功能。
图文聊天与修改:通过在配置中指定支持图像的模型(如 gemini-pro-vision),你可以轻松构建能够理解和处理图片的多模态应用。
网页搜索:通过配置 SEARCH_MODELS,你可以让 Gemini 模型拥有联网搜索的能力,从而回答关于最新事件的问题,获取实时信息。
4. 自动化、安全与监控
自动模型列表:你无需手动跟踪 Gemini 发布了哪些新模型,服务会自动从 Google 获取并同步最新的可用模型列表。
代理支持:如果你处于特殊的网络环境中,可以通过配置 PROXIES 环境变量,让 gemini-balance 通过 HTTP 或 SOCKS5 代理来访问 Google 服务器。
访问认证:你可以通过设置 AUTH_KEYS 环境变量,为你的代理服务设置一个或多个访问密码,防止其被未授权的用户滥用。
状态监控:项目提供了一个接口,可以让你实时查看每个 API Key 的当前状态,方便排查问题。
实战指南
得益于 Docker,部署 gemini-balance 变得异常简单。在本次部署中,为了应对简单的生产环境,我们不使用资源占用过高的MySQL作为数据库服务,而是使用更加轻量便捷的SQ Lite。
步骤 1: 创建配置文件
首先,创建一个文件夹,并在其中创建两个文件:docker-compose.yml
和 .env
。
docker-compose.yml
version: '3.8'
volumes:
sqlite_data:
services:
gemini-balance:
image: ghcr.io/snailyp/gemini-balance:latest
container_name: gemini-balance
restart: unless-stopped
ports:
- "8000:8000"
env_file:
- .env
environment:
- DATABASE_TYPE=sqlite
- SQLITE_DATABASE=/app/data/default_db
volumes:
- sqlite_data:/app/data
healthcheck:
test: ["CMD-SHELL", "python -c \"import requests; exit(0) if requests.get('http://localhost:8000/health').status_code == 200 else exit(1)\""]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
.env
这是你的核心配置文件。从项目官网的 .env.example 复制内容并进行修改。
# 数据库配置
DATABASE_TYPE=sqlite
#SQLITE_DATABASE=default_db
#MYSQL_HOST=gemini-balance-mysql
#MYSQL_SOCKET=/run/mysqld/mysqld.sock
#MYSQL_PORT=3306
#MYSQL_USER=gemini
#MYSQL_PASSWORD=change_me
#MYSQL_DATABASE=default_db
API_KEYS=["YOUR_API_KEY_1","YOUR_API_KEY_2"]
ALLOWED_TOKENS=["sk-123456"]
AUTH_TOKEN=sk-123456
# For Vertex AI Platform API Keys
VERTEX_API_KEYS=["AQ.Abxxxxxxxxxxxxxxxxxxx"]
# For Vertex AI Platform Express API Base URL
VERTEX_EXPRESS_BASE_URL=https://aiplatform.googleapis.com/v1beta1/publishers/google
TEST_MODEL=gemini-1.5-flash
THINKING_MODELS=["gemini-2.5-flash-preview-04-17"]
THINKING_BUDGET_MAP={"gemini-2.5-flash-preview-04-17": 4000}
IMAGE_MODELS=["gemini-2.0-flash-exp"]
SEARCH_MODELS=["gemini-2.0-flash-exp","gemini-2.0-pro-exp"]
FILTERED_MODELS=["gemini-1.0-pro-vision-latest", "gemini-pro-vision", "chat-bison-001", "text-bison-001", "embedding-gecko-001"]
# 是否启用网址上下文,默认启用
URL_CONTEXT_ENABLED=false
URL_CONTEXT_MODELS=["gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash","gemini-2.0-flash-live-001"]
TOOLS_CODE_EXECUTION_ENABLED=false
SHOW_SEARCH_LINK=true
SHOW_THINKING_PROCESS=true
BASE_URL=https://generativelanguage.googleapis.com/v1beta
MAX_FAILURES=10
MAX_RETRIES=3
CHECK_INTERVAL_HOURS=1
TIMEZONE=Asia/Shanghai
# 请求超时时间(秒)
TIME_OUT=300
# 代理服务器配置 (支持 http 和 socks5)
# 示例: PROXIES=["http://user:pass@host:port", "socks5://host:port"]
PROXIES=[]
# 对同一个API_KEY使用代理列表中固定的IP策略
PROXIES_USE_CONSISTENCY_HASH_BY_API_KEY=true
#########################image_generate 相关配置###########################
PAID_KEY=AIzaSyxxxxxxxxxxxxxxxxxxx
CREATE_IMAGE_MODEL=imagen-3.0-generate-002
UPLOAD_PROVIDER=smms
SMMS_SECRET_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PICGO_API_KEY=xxxx
CLOUDFLARE_IMGBED_URL=https://xxxxxxx.pages.dev/upload
CLOUDFLARE_IMGBED_AUTH_CODE=xxxxxxxxx
CLOUDFLARE_IMGBED_UPLOAD_FOLDER=
##########################################################################
#########################stream_optimizer 相关配置########################
STREAM_OPTIMIZER_ENABLED=false
STREAM_MIN_DELAY=0.016
STREAM_MAX_DELAY=0.024
STREAM_SHORT_TEXT_THRESHOLD=10
STREAM_LONG_TEXT_THRESHOLD=50
STREAM_CHUNK_SIZE=5
##########################################################################
######################### 日志配置 #######################################
# 日志级别 (debug, info, warning, error, critical),默认为 info
LOG_LEVEL=info
# 是否开启自动删除错误日志
AUTO_DELETE_ERROR_LOGS_ENABLED=true
# 自动删除多少天前的错误日志 (1, 7, 30)
AUTO_DELETE_ERROR_LOGS_DAYS=7
# 是否开启自动删除请求日志
AUTO_DELETE_REQUEST_LOGS_ENABLED=false
# 自动删除多少天前的请求日志 (1, 7, 30)
AUTO_DELETE_REQUEST_LOGS_DAYS=30
##########################################################################
# 假流式配置 (Fake Streaming Configuration)
# 是否启用假流式输出
FAKE_STREAM_ENABLED=True
# 假流式发送空数据的间隔时间(秒)
FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS=5
# 安全设置 (JSON 字符串格式)
# 注意:这里的示例值可能需要根据实际模型支持情况调整
SAFETY_SETTINGS=[{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "OFF"}, {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_CIVIC_INTEGRITY", "threshold": "BLOCK_NONE"}]
URL_NORMALIZATION_ENABLED=false
# tts配置
TTS_MODEL=gemini-2.5-flash-preview-tts
TTS_VOICE_NAME=Zephyr
TTS_SPEED=normal
#########################Files API 相关配置########################
# 是否启用文件过期自动清理
FILES_CLEANUP_ENABLED=true
# 文件过期清理间隔(小时)
FILES_CLEANUP_INTERVAL_HOURS=1
# 是否启用用户文件隔离(每个用户只能看到自己上传的文件)
FILES_USER_ISOLATION_ENABLED=true
##########################################################################
重要:将 YOUR_API_KEY_1
, YOUR_API_KEY_2
等替换成你自己的真实 Gemini API Key。
步骤 2: 启动服务
在存放这两个文件的文件夹中,打开终端,运行以下命令:
docker-compose up -d
等待片刻,Docker 会自动拉取最新的镜像并启动服务。服务将运行在本地的 8000 端口上。
即刻开始
服务启动后,你就可以开始享受它带来的便利了。假设你的服务地址是 http://127.0.0.1:8000
。
API地址:http://127.0.0.1:8000
API KEY:sk-123456
总结
snailyp/gemini-balance 是一个设计精巧、功能强大且极其实用的开源项目。它不仅解决了开发者在使用 Gemini API 时遇到的核心痛点——速率限制和多 Key 管理,更通过其卓越的 OpenAI API 兼容性,极大地拓宽了 Gemini 的应用场景。
它将复杂的负载均衡、格式转换和功能扩展等任务封装在一个简单的 Docker 容器中,让开发者可以专注于业务逻辑和应用创新。如果你正在使用或计划使用 Gemini API,我强烈推荐你花几分钟时间部署和体验一下 gemini-balance。
去给这个优秀的项目一个 Star 吧,这绝对是你今年在 GitHub 上最值得的发现之一!
GitHub 仓库: https://github.com/snailyp/gemini-balance