虽然谷歌大善人提供了免费的 Gemini APi ,但是有很大的速率限制,甚至在我日常开发中都遇到过很多次超过速率限制的报错。阅读文档之后,发现速率的限制只针对 project , 于是打算做一个 Gemini APi 的代理,去更好的管理和使用 key 。
因为想要零成本代理,所以想到了另一个大善人 cloudflare ,可以利用他提供的 Workers 服务做一个简单的代理和转发,下面是我实践的大概思路
因为 key 的使用限制,所以需要创建多个 project ,得到一个 key 池,当然你有其他渠道啥也可以
根据文档去官网的仪表盘或者用命令行创建 D1 数据库,这个主要是持久化记录 key 的一些状态,免费的额度感觉够用。 我的数据库的结构是这样
-- API Key 管理表
CREATE TABLE IF NOT EXISTS api_keys (
id INTEGER PRIMARY KEY AUTOINCREMENT,
api_key TEXT UNIQUE NOT NULL, -- API 密钥
name TEXT, -- 密钥名称/备注
priority INTEGER DEFAULT 100, -- 优先级权重 (数值越高优先级越高)
status INTEGER DEFAULT 1, -- 状态: 1=有效, 2=暂时失效, 0=完全失效
consecutive_failures INTEGER DEFAULT 0, -- 连续失败次数
total_calls INTEGER DEFAULT 0, -- 总调用次数
success_calls INTEGER DEFAULT 0, -- 成功调用次数
last_used_at DATETIME, -- 最后使用时间
last_success_at DATETIME, -- 最后成功时间
last_failure_at DATETIME, -- 最后失败时间
disabled_until DATETIME, -- 禁用截止时间
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
我主要是让 AI 写的负载均衡的逻辑,这块代码我自己也没怎么看过,就不贴了,然后用 openai 的范式接收请求
//目录结构
└─src
index.js
keyManager.js
在主程序中会用的主要是我们收集的 key 池,还有一个代理之后我们自己的 key ,配置在环境变量
// 我们收集的 key ,需要是不同项目
GEMINI_API_KEY=k1,k2,k3
// 我们自定义的 KEY,放在 header 里面,openai 的规则
MY_API_KEY=
page 或者 worker 内部调用,需要绑定然后用环境变量请求,没试过
直接用绑定的域名访问即可,和调用其他 openai 类的 api 一样,前端直接调用的话注意 MY_API_TOKEN 不要泄露
这个目前就是我自己当玩具用,没有经过啥实践的验证,大佬们觉得这个有可行性吗
1
peerless 37 天前
确实是一个很好的想法
|
2
speedmancs 37 天前
multiple project rotation 确实可以获得更多的免费额度,但你要注意
1. 每个 project 是否需要绑定一个新的 billing account 2. 如果滥用,Google 仍然会封帐号 |
3
Tose 35 天前 via Android
不错,另外有个开源项目 https://github.com/snailyp/gemini-balance ,一直在用
|
![]() |
4
zhangyuliang 35 天前
不错,解决了 gemini 使用限制的问题
|