分享一个免费的 gemini key 池代理的方案

63 天前
 yuikji

初衷

虽然谷歌大善人提供了免费的 Gemini APi ,但是有很大的速率限制,甚至在我日常开发中都遇到过很多次超过速率限制的报错。阅读文档之后,发现速率的限制只针对 project , 于是打算做一个 Gemini APi 的代理,去更好的管理和使用 key 。

方案

因为想要零成本代理,所以想到了另一个大善人 cloudflare ,可以利用他提供的 Workers 服务做一个简单的代理和转发,下面是我实践的大概思路

key 的获取

因为 key 的使用限制,所以需要创建多个 project ,得到一个 key 池,当然你有其他渠道啥也可以

创建 D1 数据库

根据文档去官网的仪表盘或者用命令行创建 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
);

创建 worker

1. 绑定之前创建好的 D1 数据库

2. 初始化数据库

3. 写主程序

我主要是让 AI 写的负载均衡的逻辑,这块代码我自己也没怎么看过,就不贴了,然后用 openai 的范式接收请求

//目录结构

└─src
    index.js
    keyManager.js

如何使用 worker

配置环境变量

在主程序中会用的主要是我们收集的 key 池,还有一个代理之后我们自己的 key ,配置在环境变量

// 我们收集的 key ,需要是不同项目
GEMINI_API_KEY=k1,k2,k3
// 我们自定义的 KEY,放在 header 里面,openai 的规则
MY_API_KEY=

1. 内部使用

page 或者 worker 内部调用,需要绑定然后用环境变量请求,没试过

2. 外部接口调用

直接用绑定的域名访问即可,和调用其他 openai 类的 api 一样,前端直接调用的话注意 MY_API_TOKEN 不要泄露

需要注意的事情

  1. cloudflare 的 workers 我没查过,是不是允许这么用
  2. 谷歌的 project 创建多个,可能有被风控的风险

这个目前就是我自己当玩具用,没有经过啥实践的验证,大佬们觉得这个有可行性吗

1620 次点击
所在节点    程序员
4 条回复
peerless
63 天前
确实是一个很好的想法
speedmancs
63 天前
multiple project rotation 确实可以获得更多的免费额度,但你要注意
1. 每个 project 是否需要绑定一个新的 billing account
2. 如果滥用,Google 仍然会封帐号
Tose
61 天前
不错,另外有个开源项目 https://github.com/snailyp/gemini-balance ,一直在用
zhangyuliang
61 天前
不错,解决了 gemini 使用限制的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1148223

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX