V2EX 07月28日 14:47
[程序员] 分享一个免费的 gemini key 池代理的方案
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了一种利用Cloudflare Workers和D1数据库搭建Gemini API代理的方案,旨在解决Google Gemini API的速率限制问题。作者通过创建多个Google Cloud项目获取API密钥池,并利用Cloudflare Workers作为代理层,通过D1数据库管理API密钥的状态和负载均衡。文章详细阐述了Key的获取、D1数据库的创建及表结构设计、Worker的编写思路,以及环境变量的配置和使用方式。同时,也提醒了Cloudflare Workers使用限制和Google项目风控的潜在风险,并邀请社区进行可行性探讨。

💡 **解决Gemini API速率限制:** Google Gemini API存在速率限制,作者提出利用Cloudflare Workers搭建代理服务器,通过管理多个API密钥(key池)来规避这一限制,实现更灵活的API调用。

🗄️ **D1数据库管理API密钥:** 采用Cloudflare的D1数据库来持久化存储和管理API密钥的状态,包括密钥名称、优先级、状态(有效/失效)、调用次数、成功/失败记录以及使用时间等,为负载均衡提供数据支持。

🚀 **Cloudflare Workers实现代理转发:** 利用Cloudflare Workers服务,编写代理逻辑,接收外部请求,根据D1数据库中的API密钥状态和负载均衡策略,将请求转发给实际的Gemini API,并将响应返回给用户。

⚙️ **环境变量与安全配置:** 文章强调了环境变量的配置,包括Gemini API密钥池(GEMINI_API_KEY)和自定义的API密钥(MY_API_KEY)。对于外部接口调用,需要注意保护自定义API密钥,避免泄露。

初衷

虽然谷歌大善人提供了免费的 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 不要泄露

需要注意的事情

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

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Gemini API Cloudflare Workers API代理 负载均衡 D1数据库
相关文章