基于 Gemini 网页版的逆向工程,提供 OpenAI 兼容 API 服务。
📌 本项目基于 erxiansheng/gemininixiang 修改
本版本修复了原版项目的一些问题,增强了稳定性和错误处理能力。
- ✅ 文本对话
- ✅ 多轮对话(上下文保持)
- ✅ 图片识别(支持 base64 和 URL)
- ✅ 流式响应(Streaming)
- ✅ Tools / Function Calling 支持 🆕
- ✅ OpenAI SDK 完全兼容
- ✅ Web 后台配置界面
- ✅ 后台登录认证
- 🐛 修复流式响应中 tool_calls 缺少 index 字段的问题
- 修复了使用 Tools/Function Calling 时流式响应格式验证失败的错误
- 现在完全符合 OpenAI API 规范,兼容所有 OpenAI SDK 客户端
- 🆕 添加手动输入 AT Token 的备用方案
- 如果自动获取失败,可在配置页面手动填写
- 提供详细的手动获取方法说明
- 🖼️ 改进图片功能支持
- 添加手动输入 PUSH_ID 的选项
- ⚙️ 更改默认端口
- 将默认端口从 8000 改为 23456(更不常见的端口)
- 🆕 新增图片生成支持
- AI 生成的图片自动下载到本地并通过代理返回
- 自动获取高清无水印原图
- 过滤用户上传的图片,只返回 AI 生成的内容
- 🆕 新增视频生成提示
- 视频为异步生成,返回友好提示,引导用户到官网查看
- 显示使用限制说明
- 🔧 优化图片处理
- 修复图片重复下载问题
- 修复图片理解时返回上传图片 URL 的问题
- 清理响应中的占位符 URL
- 📝 使用限制说明(官网限制)
- 视频生成(Veo 模型):每天总共可以生成 3 次
- 图片生成(Nano Banana 模型):每天总共可以生成 1000 次
- 🆕 新增 Tools / Function Calling 支持
- 支持 OpenAI 格式的 tools 参数
- 自动解析工具调用并返回 tool_calls
- 可对接 MCP 服务器使用
- 初始版本
- 支持文本对话、图片识别、流式响应
- Web 后台配置界面
pip install -r requirements.txtpython server.py启动后会显示:
╔══════════════════════════════════════════════════════════╗
║ Gemini OpenAI Compatible API Server ║
╠══════════════════════════════════════════════════════════╣
║ 后台配置: http://localhost:23456/admin ║
║ API 地址: http://localhost:23456/v1 ║
║ API Key: sk-gemini ║
╚══════════════════════════════════════════════════════════╝
- 打开后台管理页面
http://localhost:23456/admin - 使用默认账号登录:
- 用户名:
admin - 密码:
admin123
- 用户名:
- 获取 Cookie:
- 登录 Gemini 网页版
- 按
F12打开开发者工具 - 切换到
Application标签页 - 左侧选择
Cookies→https://gemini.google.com - 右键任意 cookie → Copy all as Header String
- 粘贴到后台配置页面的「Cookie 字符串」输入框,点击保存
💡 系统会自动解析 Cookie 并获取所需 Token(SNLM0E、PUSH_ID 等),无需手动填写
如果发现模型切换不生效(例如选择 Pro 版但实际使用的是极速版),需要手动更新模型 ID:
抓包获取模型 ID:
-
打开 Gemini 网页版,按
F12打开开发者工具 -
切换到
Network标签页 -
在 Gemini 网页中切换到目标模型(如 Pro 版),发送一条消息
-
在 Network 中找到
StreamGenerate请求 -
查看请求头
x-goog-ext-525001261-jspb,格式如下:[1,null,null,null,"e6fa609c3fa255c0",null,null,0,[4],null,null,2]
-
第 5 个元素(
e6fa609c3fa255c0)即为该模型的 ID
配置模型 ID:
在后台管理页面的「模型 ID 配置」区域,将抓取到的 ID 填入对应输入框:
| 模型 | 默认 ID | 说明 |
|---|---|---|
| 极速版 (Flash) | 56fdd199312815e2 |
响应最快 |
| Pro 版 | e6fa609c3fa255c0 |
质量更高 |
| 思考版 (Thinking) | e051ce1aa80aa576 |
深度推理 |
⚠️ Google 可能会更新模型 ID,如果模型切换失效请重新抓包获取最新 ID
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:23456/v1",
api_key="sk-gemini"
)
response = client.chat.completions.create(
model="gemini-3.0-flash",
messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)| 项目 | 值 |
|---|---|
| Base URL | http://localhost:23456/v1 |
| API Key | sk-gemini |
| 后台地址 | http://localhost:23456/admin |
| 登录账号 | admin / admin123 |
gemini-3.0-flash- 快速响应(极速版)gemini-3.0-flash-thinking- 思考模式gemini-3.0-pro- 专业版
API 支持通过 model 参数切换不同版本的 Gemini:
# 使用极速版
response = client.chat.completions.create(
model="gemini-3.0-flash",
messages=[{"role": "user", "content": "你好"}]
)
# 使用 Pro 版
response = client.chat.completions.create(
model="gemini-3.0-pro",
messages=[{"role": "user", "content": "你好"}]
)
# 使用思考版
response = client.chat.completions.create(
model="gemini-3.0-flash-thinking",
messages=[{"role": "user", "content": "你好"}]
)from openai import OpenAI
client = OpenAI(base_url="http://localhost:23456/v1", api_key="sk-geminixxxxx")
messages = []
# 第一轮
messages.append({"role": "user", "content": "我叫小明,是一名程序员"})
response = client.chat.completions.create(model="gemini-3.0-flash", messages=messages)
reply = response.choices[0].message.content
print(f"助手: {reply}")
messages.append({"role": "assistant", "content": reply})
# 第二轮(测试上下文)
messages.append({"role": "user", "content": "我刚才说我叫什么?"})
response = client.chat.completions.create(model="gemini-3.0-flash", messages=messages)
print(f"助手: {response.choices[0].message.content}")
# 输出: 你刚才说你叫小明import base64
from openai import OpenAI
client = OpenAI(base_url="http://localhost:23456/v1", api_key="sk-geminixxxxx")
# 读取本地图片(使用项目中的 image.png 示例图片)
with open("image.png", "rb") as f:
img_b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="gemini-3.0-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "请描述这张图片"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img_b64}"}}
]
}]
)
print(response.choices[0].message.content)response = client.chat.completions.create(
model="gemini-3.0-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "这是什么动物?"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
]
}]
)from openai import OpenAI
client = OpenAI(base_url="http://localhost:23456/v1", api_key="sk-geminixxxxx")
stream = client.chat.completions.create(
model="gemini-3.0-flash",
messages=[{"role": "user", "content": "写一首关于春天的诗"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)支持 OpenAI 格式的工具调用,可用于对接 MCP 服务器或自定义工具。
from openai import OpenAI
client = OpenAI(base_url="http://localhost:23456/v1", api_key="sk-geminixxxxx")
# 定义工具
tools = [
{
"type": "function",
"function": {
"name": "search_database",
"description": "在数据库中搜索用户信息",
"parameters": {
"type": "object",
"properties": {
"username": {"type": "string", "description": "用户名"}
},
"required": ["username"]
}
}
}
]
# 调用 API
response = client.chat.completions.create(
model="gemini-3.0-flash",
messages=[{"role": "user", "content": "查询用户 zhangsan 的信息"}],
tools=tools
)
# 检查工具调用
if response.choices[0].message.tool_calls:
for tc in response.choices[0].message.tool_calls:
print(f"调用工具: {tc.function.name}")
print(f"参数: {tc.function.arguments}")
else:
print(response.choices[0].message.content)- 定义 tools 数组,描述可用工具
- 发送请求时传入 tools 参数
- 如果 AI 决定调用工具,返回
tool_calls - 执行工具获取结果
- 将结果发回 AI 继续对话
| 文件 | 说明 |
|---|---|
server.py |
API 服务 + Web 后台 |
client.py |
Gemini 逆向客户端 |
api.py |
OpenAI 兼容封装 |
image.png |
示例图片(用于测试图片识别) |
config_data.json |
运行时配置(自动生成) |
编辑 server.py 顶部配置:
# 后台登录账号密码
ADMIN_USERNAME = "admin"
ADMIN_PASSWORD = "your_password"API_KEY = "your-api-key"PORT = 23456重新在后台粘贴 Cookie 即可,无需重启服务。配置保存后立即生效。
请参考上方「4. 配置模型 ID」章节,重新抓包获取最新的模型 ID 并更新配置。
- 确保 Cookie 完整,系统会自动获取 PUSH_ID
- 如果仍失败,检查 Cookie 是否过期
- 确保图片格式正确(支持 PNG、JPG、GIF、WebP)
确保客户端支持 SSE(Server-Sent Events),并设置 stream=True。
配置 OpenAI 兼容的 AI 插件:
- Base URL:
http://localhost:23456/v1 - API Key:
sk-geminixxxxx - Model:
gemini-3.0-flash
确保每次请求都包含完整的消息历史(messages 数组)。
在 get_client() 中设置 debug=True 可查看详细请求日志。
所有 API 调用会记录到 api_logs.json 文件。
本项目基于 erxiansheng/gemininixiang 修改。
- ✅ 修复了原版项目的一些已知问题
- ✅ 增强了系统稳定性和错误处理能力
- ✅ 改进了异常情况的处理机制
MIT License
Copyright (c) 2025 erxiansheng
本项目基于 erxiansheng/gemininixiang 修改,保留原项目的 MIT 许可证。
