虽然谷歌大善人提供了免费的 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 73 天前 确实是一个很好的想法 |
2 speedmancs 72 天前 multiple project rotation 确实可以获得更多的免费额度,但你要注意 1. 每个 project 是否需要绑定一个新的 billing account 2. 如果滥用,Google 仍然会封帐号 |
3 Tose 71 天前 via Android 不错,另外有个开源项目 https://github.com/snailyp/gemini-balance ,一直在用 |
![]() | 4 zhangyuliang 71 天前 不错,解决了 gemini 使用限制的问题 |