|
| 1 | +# Gemini Web2API - Cloudflare Workers 部署文档 |
| 2 | + |
| 3 | +## 📖 项目简介 |
| 4 | + |
| 5 | +Gemini Web2API 是一个部署在 Cloudflare Workers 上的无服务器代理服务,将 Google Gemini 的 Web 界面转换为 OpenAI 兼容的 API 接口。无需服务器、无需 API Key(可选),开箱即用。 |
| 6 | + |
| 7 | +### 核心特性 |
| 8 | + |
| 9 | +- **零成本部署**:基于 Cloudflare Workers 免费计划(每日 10 万次请求) |
| 10 | +- **全球加速**:自动部署到 Cloudflare 全球 300+ 边缘节点 |
| 11 | +- **OpenAI 兼容**:完全兼容 `/v1/chat/completions` 和 `/v1/models` 端点 |
| 12 | +- **打字机流式输出**:真正的 SSE(Server-Sent Events)流式响应 |
| 13 | +- **多指纹轮换**:8 种浏览器指纹 + 6 种语言偏好随机轮换,降低被识别概率 |
| 14 | +- **多 Cookie 轮换**:支持配置多个 Google 账号 Cookie,随机选择使用 |
| 15 | +- **并发安全**:请求级配置隔离,彻底消除高并发场景下的配置串扰 |
| 16 | +- **工具调用支持**:兼容 OpenAI Function Calling 格式 |
| 17 | + |
| 18 | +### 适用场景 |
| 19 | + |
| 20 | +- 为 NextChat、Cherry Studio、ChatBox 等客户端提供免费的 Gemini API |
| 21 | +- 在 WorkBuddy 等工具中作为 Gemini 模型的后端 |
| 22 | +- 个人学习、研究和小型项目的 AI 能力接入 |
| 23 | + |
| 24 | +--- |
| 25 | + |
| 26 | +## 🚀 快速部署 |
| 27 | + |
| 28 | +### 第一步:登录 Cloudflare |
| 29 | + |
| 30 | +1. 打开 [Cloudflare Dashboard](https://dash.cloudflare.com) |
| 31 | +2. 登录你的 Cloudflare 账号(没有账号可以免费注册) |
| 32 | +3. 进入左侧菜单 **Workers & Pages** |
| 33 | + |
| 34 | +### 第二步:创建 Worker |
| 35 | + |
| 36 | +1. 点击 **创建应用程序** → **创建 Worker** |
| 37 | +2. 给 Worker 起一个名字(例如 `api`) |
| 38 | +3. 点击 **部署** 按钮 |
| 39 | +4. 点击 **编辑代码** 按钮 |
| 40 | +5. 清空编辑器中的默认代码 |
| 41 | +6. 将本项目完整代码粘贴到编辑器中 |
| 42 | +7. 点击右上角 **保存并部署** |
| 43 | + |
| 44 | +### 第三步:获取测试地址 |
| 45 | + |
| 46 | +部署成功后,你的 API 地址为: |
| 47 | + |
| 48 | +``` |
| 49 | +https://你的worker名称.你的账户名.workers.dev |
| 50 | +``` |
| 51 | + |
| 52 | +例如:`https://api.geminai.workers.dev` |
| 53 | + |
| 54 | +### 第四步:验证部署 |
| 55 | + |
| 56 | +在浏览器中访问以下地址: |
| 57 | + |
| 58 | +``` |
| 59 | +https://你的worker.workers.dev/health |
| 60 | +``` |
| 61 | + |
| 62 | +如果看到类似以下 JSON 响应,说明部署成功: |
| 63 | + |
| 64 | +```json |
| 65 | +{ |
| 66 | + "status": "ok", |
| 67 | + "version": "1.5.0-cf-multifingerprint", |
| 68 | + "platform": "Cloudflare Workers", |
| 69 | + "models": ["gemini-3.6-flash", "gemini-3.5-flash", "..."], |
| 70 | + "hasCookie": false, |
| 71 | + "hasSapisid": false |
| 72 | +} |
| 73 | +``` |
| 74 | + |
| 75 | +--- |
| 76 | + |
| 77 | +## 🔧 客户端配置 |
| 78 | + |
| 79 | +### NextChat (ChatGPT-Next-Web) |
| 80 | + |
| 81 | +| 配置项 | 值 | |
| 82 | +|--------|-----| |
| 83 | +| 接口类型 | OpenAI | |
| 84 | +| 接口地址 | `https://你的worker.workers.dev/v1` | |
| 85 | +| API Key | `sk-gemini`(默认密钥) | |
| 86 | +| 模型 | `gemini-3.6-flash` | |
| 87 | + |
| 88 | +### Cherry Studio |
| 89 | + |
| 90 | +| 配置项 | 值 | |
| 91 | +|--------|-----| |
| 92 | +| API 地址 | `https://你的worker.workers.dev/v1` | |
| 93 | +| API 密钥 | `sk-gemini` | |
| 94 | +| 模型 | `gemini-3.6-flash` | |
| 95 | + |
| 96 | +### ChatBox |
| 97 | + |
| 98 | +| 配置项 | 值 | |
| 99 | +|--------|-----| |
| 100 | +| API 模式 | OpenAI API | |
| 101 | +| API 域名 | `https://你的worker.workers.dev` | |
| 102 | +| API 路径 | `/v1/chat/completions` | |
| 103 | +| API Key | `sk-gemini` | |
| 104 | + |
| 105 | +### 使用 curl 测试 |
| 106 | + |
| 107 | +```bash |
| 108 | +# 非流式请求 |
| 109 | +curl https://你的worker.workers.dev/v1/chat/completions \ |
| 110 | + -H "Content-Type: application/json" \ |
| 111 | + -H "Authorization: Bearer sk-gemini" \ |
| 112 | + -d '{ |
| 113 | + "model": "gemini-3.6-flash", |
| 114 | + "messages": [{"role": "user", "content": "你好"}], |
| 115 | + "stream": false |
| 116 | + }' |
| 117 | + |
| 118 | +# 流式请求(打字机效果) |
| 119 | +curl -N https://你的worker.workers.dev/v1/chat/completions \ |
| 120 | + -H "Content-Type: application/json" \ |
| 121 | + -H "Authorization: Bearer sk-gemini" \ |
| 122 | + -d '{ |
| 123 | + "model": "gemini-3.6-flash", |
| 124 | + "messages": [{"role": "user", "content": "讲个故事"}], |
| 125 | + "stream": true |
| 126 | + }' |
| 127 | +``` |
| 128 | + |
| 129 | +--- |
| 130 | + |
| 131 | +## ⚙️ 环境变量配置(可选) |
| 132 | + |
| 133 | +在 Cloudflare Dashboard → Workers → 你的 Worker → 设置 → 变量 → 环境变量中配置: |
| 134 | + |
| 135 | +### 认证相关 |
| 136 | + |
| 137 | +| 变量名 | 说明 | 示例值 | |
| 138 | +|--------|------|--------| |
| 139 | +| `COOKIE_STRING` | Gemini Cookie,多个用 `\|` 分隔 | `cookie1\| cookie2\| cookie3` | |
| 140 | +| `SAPISID` | SAPISID 值,多个用 `\|` 分隔 | `sapisid1\| sapisid2\| sapisid3` | |
| 141 | +| `API_KEYS` | API 密钥白名单(JSON 数组) | `["sk-gemini", "my-key"]` | |
| 142 | + |
| 143 | +### Gemini 配置 |
| 144 | + |
| 145 | +| 变量名 | 说明 | 示例值 | |
| 146 | +|--------|------|--------| |
| 147 | +| `GEMINI_BL` | Gemini 构建标签(遇到 405 时更新) | `boq_assistant-bard-web-server_20260716.08_p0` | |
| 148 | +| `DEFAULT_MODEL` | 默认模型 | `gemini-3.6-flash` | |
| 149 | +| `AUTH_USER` | 多账户索引 | `0` | |
| 150 | + |
| 151 | +### 性能调优 |
| 152 | + |
| 153 | +| 变量名 | 说明 | 默认值 | |
| 154 | +|--------|------|--------| |
| 155 | +| `RETRY_ATTEMPTS` | 重试次数 | `3` | |
| 156 | +| `RETRY_DELAY_SEC` | 重试间隔(秒) | `2` | |
| 157 | +| `REQUEST_TIMEOUT_SEC` | 请求超时(秒) | `28` | |
| 158 | +| `FINGERPRINT_JITTER_MS` | 随机延迟最大值(毫秒) | `1500` | |
| 159 | +| `RATE_LIMIT_MAX` | 速率限制最大请求数 | `3000` | |
| 160 | +| `RATE_LIMIT_WINDOW` | 速率限制时间窗口(秒) | `60` | |
| 161 | + |
| 162 | +--- |
| 163 | + |
| 164 | +## 🍪 获取 Gemini Cookie |
| 165 | + |
| 166 | +### 为什么需要 Cookie? |
| 167 | + |
| 168 | +匿名请求容易被 Gemini 限流(返回 HTTP 429 错误)。配置有效的 Cookie 可以: |
| 169 | +- 大幅降低被限流的概率 |
| 170 | +- 提升 Pro 模型的路由质量 |
| 171 | +- 获得更稳定的服务体验 |
| 172 | + |
| 173 | +### 获取步骤 |
| 174 | + |
| 175 | +1. 打开 Chrome/Edge 浏览器 |
| 176 | +2. 访问 https://gemini.google.com/app 并登录 Google 账号 |
| 177 | +3. 按 **F12** 打开开发者工具 |
| 178 | +4. 进入 **Application**(应用程序)标签 |
| 179 | +5. 左侧选择 **Cookies** → `https://gemini.google.com` |
| 180 | +6. 找到以下 Cookie 并复制其值: |
| 181 | + - `__Secure-1PSID` |
| 182 | + - `__Secure-3PSID` |
| 183 | + - `SAPISID` |
| 184 | +7. 组合为完整 Cookie 字符串: |
| 185 | + ``` |
| 186 | + __Secure-1PSID=你的值; __Secure-3PSID=你的值; SAPISID=你的值 |
| 187 | + ``` |
| 188 | + |
| 189 | +### 多账号配置 |
| 190 | + |
| 191 | +如果你有多个 Google 账号,可以用 `|` 分隔多个 Cookie: |
| 192 | + |
| 193 | +``` |
| 194 | +COOKIE_STRING = "cookie_账号1| cookie_账号2| cookie_账号3" |
| 195 | +SAPISID = "sapisid_1| sapisid_2| sapisid_3" |
| 196 | +``` |
| 197 | + |
| 198 | +每次请求会随机选择一个 Cookie 使用,大幅降低单个账号被限流的概率。 |
| 199 | + |
| 200 | +--- |
| 201 | + |
| 202 | +## 🔄 更新 BL 版本 |
| 203 | + |
| 204 | +如果遇到 `HTTP 405: Method Not Allowed` 错误,说明 Gemini 前端已更新,需要同步更新构建标签: |
| 205 | + |
| 206 | +1. 浏览器打开 https://gemini.google.com/app |
| 207 | +2. 按 **F12** → **Network**(网络)标签 |
| 208 | +3. 在任意请求的 URL 中搜索 `boq_assistant` |
| 209 | +4. 复制最新的版本号,例如: |
| 210 | + ``` |
| 211 | + boq_assistant-bard-web-server_20260730.02_p0 |
| 212 | + ``` |
| 213 | +5. 更新环境变量 `GEMINI_BL` 或代码中的 `geminiBl` 配置项 |
| 214 | + |
| 215 | +--- |
| 216 | + |
| 217 | +## 🎭 多指纹轮换机制 |
| 218 | + |
| 219 | +本程序内置了浏览器指纹轮换系统,每次请求会随机选择不同的浏览器标识: |
| 220 | + |
| 221 | +| 指纹类型 | 池大小 | 说明 | |
| 222 | +|---------|--------|------| |
| 223 | +| User-Agent | 8 种 | 加权随机,模拟真实浏览器市场份额 | |
| 224 | +| Accept-Language | 6 种 | 均匀随机,模拟不同地区用户 | |
| 225 | +| Sec-Ch-Ua | 3 种 | Chrome 版本标识(仅 Chrome UA 时添加) | |
| 226 | +| 随机延迟 | 0-1500ms | 请求前添加随机延迟,模拟人类操作 | |
| 227 | + |
| 228 | +--- |
| 229 | + |
| 230 | +## 🛡️ 安全建议 |
| 231 | + |
| 232 | +1. **修改默认 API Key**:将 `apiKeys` 中的 `sk-gemini` 改为你自己的密钥 |
| 233 | +2. **设置速率限制**:根据实际使用量调整 `RATE_LIMIT_MAX` |
| 234 | +3. **定期更新 Cookie**:Google Cookie 会过期,需要定期更换 |
| 235 | +4. **不要分享 Cookie**:Cookie 等同于你的 Google 账号凭证 |
| 236 | + |
| 237 | +--- |
| 238 | + |
| 239 | +## ❓ 常见问题 |
| 240 | + |
| 241 | +### Q: 返回 `empty response from server` |
| 242 | + |
| 243 | +**原因**:NextChat 流式解析问题。 |
| 244 | +**解决**:确认使用的是最新版代码(已修复 SSE 格式)。 |
| 245 | + |
| 246 | +### Q: 返回 `HTTP 429: Too Many Requests` |
| 247 | + |
| 248 | +**原因**:Gemini 限流,匿名请求频率限制更严格。 |
| 249 | +**解决**:配置有效的 `COOKIE_STRING` 和 `SAPISID`。 |
| 250 | + |
| 251 | +### Q: 返回 `HTTP 405: Method Not Allowed` |
| 252 | + |
| 253 | +**原因**:BL 版本过期。 |
| 254 | +**解决**:更新 `geminiBl` 配置(参见上文「更新 BL 版本」章节)。 |
| 255 | + |
| 256 | +### Q: 返回 `invalid api key` |
| 257 | + |
| 258 | +**原因**:客户端密钥配置错误。 |
| 259 | +**解决**:检查客户端是否配置了正确的 API Key(默认 `sk-gemini`)。 |
| 260 | + |
| 261 | +### Q: WorkBuddy 中使用出现串扰 |
| 262 | + |
| 263 | +**原因**:多模型并发请求共享全局配置。 |
| 264 | +**解决**:当前版本已通过请求级配置隔离解决此问题。 |
| 265 | + |
| 266 | +--- |
| 267 | + |
| 268 | +## 📊 支持模型列表 |
| 269 | + |
| 270 | +| 模型 ID | 类型 | 说明 | |
| 271 | +|---------|------|------| |
| 272 | +| `gemini-3.6-flash` | FAST | 最新全能模型 | |
| 273 | +| `gemini-3.5-flash` | FAST | 3.6 Flash 的别名 | |
| 274 | +| `gemini-3.5-flash-thinking` | THINKING | 深度思考模式 | |
| 275 | +| `gemini-3.1-pro` | PRO | 专业版(需 Cookie) | |
| 276 | +| `gemini-auto` | AUTO | 自动模型选择 | |
| 277 | +| `gemini-3.5-flash-thinking-lite` | DYNAMIC | 自适应动态思考 | |
| 278 | +| `gemini-flash-lite` | LITE | 轻量级快速模型 | |
| 279 | + |
| 280 | +支持通过 `@think=` 参数覆盖思考模式: |
| 281 | +- `gemini-3.6-flash@think=0` — Flash 模型 + 深度思考 |
| 282 | +- `gemini-3.1-pro@think=4` — Pro 模型 + 自动思考 |
| 283 | + |
| 284 | +--- |
| 285 | + |
| 286 | +## 📝 更新日志 |
| 287 | + |
| 288 | +| 版本 | 日期 | 更新内容 | |
| 289 | +|------|------|---------| |
| 290 | +| 1.5.0 | 2026-07-31 | 新增多指纹轮换、多Cookie轮换、随机延迟机制 | |
| 291 | +| 1.4.0 | 2026-07-30 | 修复并发串扰、速率限制内存安全 | |
| 292 | +| 1.3.0 | 2026-07-29 | 修复 SSE 流式格式、NextChat 兼容性 | |
| 293 | +| 1.0.0 | 2026-07-16 | 初始版本,基于 gemini-web2api v1.1.0 移植 | |
| 294 | + |
| 295 | +--- |
| 296 | + |
| 297 | +## 📄 许可证 |
| 298 | + |
| 299 | +本项目基于原项目 [gemini-web2api](https://github.com/your-repo/gemini-web2api) 移植,遵循原项目的开源协议。 |
0 commit comments