Skip to content

Commit a65494b

Browse files
authored
直接部署在Cloudflare上 (#58)
* Create worker.js * 修正SSE,满足NEXTCHAT调用 * 流式打字机效应 * 上下文保持 * 多指纹 * Create README.MD
1 parent 2bae912 commit a65494b

2 files changed

Lines changed: 2989 additions & 0 deletions

File tree

cloudflare/README.MD

Lines changed: 299 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,299 @@
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

Comments
 (0)