将 GeminiCLI 和 Antigravity 转换为 OpenAI 、GEMINI 和 Claude API 兼容接口
初始安装
curl -o termux-install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/termux-install.sh" && chmod +x termux-install.sh && ./termux-install.sh
重启服务
cd gcli2api
bash termux-start.sh
初始安装
iex (iwr "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/install.ps1" -UseBasicParsing).Content
重启服务
双击执行 start.bat
初始安装
curl -o install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/install.sh" && chmod +x install.sh && ./install.sh
重启服务
cd gcli2api
bash start.sh
初始安装
curl -o darwin-install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/darwin-install.sh" && chmod +x darwin-install.sh && ./darwin-install.sh
重启服务
cd gcli2api
bash start.sh
Docker 运行命令
# 使用通用密码
docker run -d --name gcli2api --network host -e PASSWORD=pwd -e PORT=7861 -v $(pwd)/data/creds:/app/creds ghcr.io/su-kaka/gcli2api:latest
# 使用分离密码
docker run -d --name gcli2api --network host -e API_PASSWORD=api_pwd -e PANEL_PASSWORD=panel_pwd -e PORT=7861 -v $(pwd)/data/creds:/app/creds ghcr.io/su-kaka/gcli2api:latest
Docker Mac
# 使用通用密码
docker run -d \
--name gcli2api \
-p 7861:7861 \
-p 8080:8080 \
-e PASSWORD=pwd \
-e PORT=7861 \
-v "$(pwd)/data/creds":/app/creds \
ghcr.io/su-kaka/gcli2api:latest
# 使用分离密码
docker run -d \
--name gcli2api \
-p 7861:7861 \
-p 8080:8080 \
-e API_PASSWORD=api_pwd \
-e PANEL_PASSWORD=panel_pwd \
-e PORT=7861 \
-v $(pwd)/data/creds:/app/creds \
ghcr.io/su-kaka/gcli2api:latest
Docker Compose 运行命令
docker-compose.yml 文件:
version: '3.8'
services:
gcli2api:
image: ghcr.io/su-kaka/gcli2api:latest
container_name: gcli2api
restart: unless-stopped
network_mode: host
environment:
# 使用通用密码(推荐用于简单部署)
- PASSWORD=pwd
- PORT=7861
# 或使用分离密码(推荐用于生产环境)
# - API_PASSWORD=your_api_password
# - PANEL_PASSWORD=your_panel_password
volumes:
- ./data/creds:/app/creds
healthcheck:
test: ["CMD-SHELL", "python -c \"import sys, urllib.request, os; port = os.environ.get('PORT', '7861'); req = urllib.request.Request(f'http://localhost:{port}/v1/models', headers={'Authorization': 'Bearer ' + os.environ.get('PASSWORD', 'pwd')}); sys.exit(0 if urllib.request.urlopen(req, timeout=5).getcode() == 200 else 1)\""]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
docker-compose up -d
多端点多格式支持
/v1/chat/completions 和 /v1/models
/v1/models/{model}:generateContent 和 streamGenerateContent
/v1/messages(遵循 Claude API 规范)/antigravity/v1/chat/completions/antigravity/v1/models/{model}:generateContent 和 streamGenerateContent/antigravity/v1/messages灵活的密码管理
高级凭证管理
凭证状态监控
多种流式支持
响应优化
全功能 Web 界面
批量操作支持
实时监控
网络和代理配置
性能和稳定性配置
日志和调试
灵活的配置方式
所有模型均具备 1M 上下文窗口容量。每个凭证文件提供 1000 次请求额度。
gemini-2.5-progemini-3-pro-previewgemini-3.1-pro-previewgemini-2.5-pro-high:思考模式gemini-2.5-pro-low:低思考模式gemini-2.5-pro-search:集成搜索功能的模型gemini-3.1-flash-image:基础图像生成模型-2k:2K 分辨率-4k:4K 高清分辨率-1x1:正方形(头像)-16x9:横屏(电脑壁纸)-9x16:竖屏(手机壁纸)-21x9:超宽屏(带鱼屏)-4x3:传统显示器-3x4:竖版海报gemini-3.1-flash-image-4k-16x9:4K 横屏gemini-3.1-flash-image-2k-9x16:2K 竖屏-假流式 后缀
gemini-2.5-pro-假流式抗截断/ 前缀
抗截断/gemini-2.5-prohttp://127.0.0.1:7861 (默认端口,可通过 PORT 环境变量修改)pwd,可通过环境变量修改)
OpenAI 兼容客户端:
http://127.0.0.1:7861/v1pwd(默认值,可通过 API_PASSWORD 或 PASSWORD 环境变量修改)Gemini 原生客户端:
http://127.0.0.1:7861Authorization: Bearer your_api_passwordx-goog-api-key: your_api_password?key=your_api_passwordGCLI 认证模式
Antigravity 认证模式
统一管理界面
gcli2api 支持两种存储后端:本地 SQLite(默认) 和 MongoDB(云端分布式存储)
默认存储方式
云端分布式存储方案
当需要多实例部署或云端存储时,可以启用 MongoDB 存储模式。
步骤 1: 配置 MongoDB 连接
# 本地 MongoDB
export MONGODB_URI="mongodb://localhost:27017"
# MongoDB Atlas 云服务
export MONGODB_URI="mongodb+srv://username:password@cluster.mongodb.net"
# 带认证的 MongoDB
export MONGODB_URI="mongodb://admin:password@localhost:27017/admin"
# 可选:自定义数据库名称(默认: gcli2api)
export MONGODB_DATABASE="my_gcli_db"
步骤 2: 启动应用
# 应用会自动检测 MongoDB 配置并使用 MongoDB 存储
python web.py
Docker 环境使用 MongoDB
# 单机 MongoDB 部署
docker run -d --name gcli2api \
-e MONGODB_URI="mongodb://mongodb:27017" \
-e API_PASSWORD=your_password \
--network your_network \
ghcr.io/su-kaka/gcli2api:latest
# 使用 MongoDB Atlas
docker run -d --name gcli2api \
-e MONGODB_URI="mongodb+srv://user:pass@cluster.mongodb.net/gcli2api" \
-e API_PASSWORD=your_password \
-p 7861:7861 \
ghcr.io/su-kaka/gcli2api:latest
Docker Compose 示例
version: '3.8'
services:
mongodb:
image: mongo:7
container_name: gcli2api-mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password123
volumes:
- mongodb_data:/data/db
ports:
- "27017:27017"
gcli2api:
image: ghcr.io/su-kaka/gcli2api:latest
container_name: gcli2api
restart: unless-stopped
depends_on:
- mongodb
environment:
- MONGODB_URI=mongodb://admin:password123@mongodb:27017/admin
- MONGODB_DATABASE=gcli2api
- API_PASSWORD=your_api_password
- PORT=7861
ports:
- "7861:7861"
volumes:
mongodb_data:
MongoDB 连接优化
# 连接池和超时配置
export MONGODB_URI="mongodb://localhost:27017?maxPoolSize=10&serverSelectionTimeoutMS=5000"
# 副本集配置
export MONGODB_URI="mongodb://host1:27017,host2:27017,host3:27017/gcli2api?replicaSet=myReplicaSet"
# 读写分离配置
export MONGODB_URI="mongodb://localhost:27017/gcli2api?readPreference=secondaryPreferred"
基础配置
PORT: 服务端口(默认:7861)HOST: 服务器监听地址(默认:0.0.0.0)密码配置
API_PASSWORD: 聊天 API 访问密码(默认:继承 PASSWORD 或 pwd)PANEL_PASSWORD: 控制面板访问密码(默认:继承 PASSWORD 或 pwd)PASSWORD: 通用密码,设置后覆盖上述两个(默认:pwd)性能和稳定性配置
RETRY_429_ENABLED: 启用 429 错误自动重试(默认:true)RETRY_429_MAX_RETRIES: 429 错误最大重试次数(默认:3)RETRY_429_INTERVAL: 429 错误重试间隔,秒(默认:1.0)ANTI_TRUNCATION_MAX_ATTEMPTS: 抗截断最大重试次数(默认:3)网络和代理配置
PROXY: HTTP/HTTPS 代理地址(格式:http://host:port)OAUTH_PROXY_URL: OAuth 认证代理端点GOOGLEAPIS_PROXY_URL: Google APIs 代理端点METADATA_SERVICE_URL: 元数据服务代理端点自动化配置
AUTO_BAN: 启用凭证自动封禁(默认:true)AUTO_LOAD_ENV_CREDS: 启动时自动加载环境变量凭证(默认:false)兼容性配置
COMPATIBILITY_MODE: 启用兼容性模式,将 system 消息转为 user 消息(默认:false)日志配置
LOG_LEVEL: 日志级别(DEBUG/INFO/WARNING/ERROR,默认:INFO)LOG_FILE: 日志文件路径(默认:log.txt)存储配置
SQLite 配置(默认)
MongoDB 配置(可选云端存储)
MONGODB_URI: MongoDB 连接字符串(设置后启用 MongoDB 模式)MONGODB_DATABASE: MongoDB 数据库名称(默认:gcli2api)Docker 使用示例
# 使用通用密码
docker run -d --name gcli2api \
-e PASSWORD=mypassword \
-e PORT=7861 \
ghcr.io/su-kaka/gcli2api:latest
# 使用分离密码
docker run -d --name gcli2api \
-e API_PASSWORD=my_api_password \
-e PANEL_PASSWORD=my_panel_password \
-e PORT=7861 \
ghcr.io/su-kaka/gcli2api:latest
注意:当设置了凭证环境变量时,系统将优先使用环境变量中的凭证,忽略 creds 目录中的文件。
本服务支持三套完整的 API 端点:
端点: /v1/chat/completions
认证: Authorization: Bearer your_api_password
支持两种请求格式,会自动检测并处理:
OpenAI 格式:
{
"model": "gemini-2.5-pro",
"messages": [
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"}
],
"temperature": 0.7,
"stream": true
}
Gemini 原生格式:
{
"model": "gemini-2.5-pro",
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
],
"systemInstruction": {"parts": [{"text": "You are a helpful assistant"}]},
"generationConfig": {
"temperature": 0.7
}
}
非流式端点: /v1/models/{model}:generateContent
流式端点: /v1/models/{model}:streamGenerateContent
模型列表: /v1/models
认证方式(任选一种):
Authorization: Bearer your_api_passwordx-goog-api-key: your_api_password?key=your_api_password请求示例:
# 使用 x-goog-api-key 头部
curl -X POST "http://127.0.0.1:7861/v1/models/gemini-2.5-pro:generateContent" \
-H "x-goog-api-key: your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
]
}'
# 使用 URL 参数
curl -X POST "http://127.0.0.1:7861/v1/models/gemini-2.5-pro:streamGenerateContent?key=your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
]
}'
端点: /v1/messages
认证: x-api-key: your_api_password 或 Authorization: Bearer your_api_password
请求示例:
curl -X POST "http://127.0.0.1:7861/v1/messages" \
-H "x-api-key: your_api_password" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-pro",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Claude!"}
]
}'
支持 system 参数:
{
"model": "gemini-2.5-pro",
"max_tokens": 1024,
"system": "You are a helpful assistant",
"messages": [
{"role": "user", "content": "Hello"}
]
}
说明:
支持三种格式:OpenAI、Gemini 和 Claude
端点: /antigravity/v1/chat/completions
认证: Authorization: Bearer your_api_password
请求示例:
curl -X POST "http://127.0.0.1:7861/antigravity/v1/chat/completions" \
-H "Authorization: Bearer your_api_password" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [
{"role": "user", "content": "Hello"}
],
"stream": true
}'
非流式端点: /antigravity/v1/models/{model}:generateContent
流式端点: /antigravity/v1/models/{model}:streamGenerateContent
认证方式(任选一种):
Authorization: Bearer your_api_passwordx-goog-api-key: your_api_password?key=your_api_password请求示例:
# Gemini 格式非流式请求
curl -X POST "http://127.0.0.1:7861/antigravity/v1/models/claude-sonnet-4-5:generateContent" \
-H "x-goog-api-key: your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
],
"generationConfig": {
"temperature": 0.7
}
}'
# Gemini 格式流式请求
curl -X POST "http://127.0.0.1:7861/antigravity/v1/models/gemini-2.5-flash:streamGenerateContent?key=your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
]
}'
端点: /antigravity/v1/messages
认证: x-api-key: your_api_password
请求示例:
curl -X POST "http://127.0.0.1:7861/antigravity/v1/messages" \
-H "x-api-key: your_api_password" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello"}
]
}'
支持的 Antigravity 模型:
claude-sonnet-4-5、claude-opus-4-5 等gemini-2.5-flash、gemini-2.5-pro 等Gemini 原生示例:
from io import BytesIO
from PIL import Image
from google.genai import Client
from google.genai.types import HttpOptions
from google.genai import types
# The client gets the API key from the environment variable `GEMINI_API_KEY`.
client = Client(
api_key="pwd",
http_options=HttpOptions(base_url="http://127.0.0.1:7861"),
)
prompt = (
"""
画一只猫
"""
)
response = client.models.generate_content(
model="gemini-3.1-flash-image",
contents=[prompt],
config=types.GenerateContentConfig(
image_config=types.ImageConfig(
aspect_ratio="16:9",
)
)
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.save("generated_image.png")
说明:
认证端点
POST /auth/login - 用户登录POST /auth/start - 开始 OAuth 认证(支持 GCLI 和 Antigravity 模式)POST /auth/callback - 处理 OAuth 回调POST /auth/callback-url - 从回调 URL 直接完成认证GET /auth/status/{project_id} - 检查认证状态凭证管理端点(支持 mode=geminicli 或 mode=antigravity 参数)
POST /creds/upload - 批量上传凭证文件(支持 JSON 和 ZIP)GET /creds/status - 获取凭证状态列表(支持分页和筛选)GET /creds/detail/{filename} - 获取单个凭证详情POST /creds/action - 单个凭证操作(启用/禁用/删除)POST /creds/batch-action - 批量凭证操作GET /creds/download/{filename} - 下载单个凭证文件GET /creds/download-all - 打包下载所有凭证POST /creds/fetch-email/{filename} - 获取用户邮箱POST /creds/refresh-all-emails - 批量刷新用户邮箱POST /creds/deduplicate-by-email - 按邮箱去重凭证POST /creds/verify-project/{filename} - 检验凭证 Project IDGET /creds/quota/{filename} - 获取凭证额度信息(仅 Antigravity)配置管理端点
GET /config/get - 获取当前配置POST /config/save - 保存配置日志管理端点
POST /logs/clear - 清空日志GET /logs/download - 下载日志文件WebSocket /logs/stream - 实时日志流版本信息端点
GET /version/info - 获取版本信息(可选 check_update=true 参数检查更新)多模态支持
{
"model": "gemini-2.5-pro",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."
}
}
]
}
]
}
思维模式支持
{
"model": "gemini-2.5-pro-maxthinking",
"messages": [
{"role": "user", "content": "复杂数学问题"}
]
}
响应将包含分离的思维内容:
{
"choices": [{
"message": {
"role": "assistant",
"content": "最终答案",
"reasoning_content": "详细的思考过程..."
}
}]
}
抗截断使用
{
"model": "抗截断/gemini-2.5-pro",
"messages": [
{"role": "user", "content": "写一篇长文章"}
],
"stream": true
}
兼容性模式
# 启用兼容性模式
export COMPATIBILITY_MODE=true
此模式下,所有 system 消息会转换为 user 消息,提高与某些客户端的兼容性。
欢迎加入 QQ 群交流讨论!
QQ 群号:1083250744
本项目仅供学习和研究用途。使用本项目表示您同意:
项目作者对因使用本项目而产生的任何直接或间接损失不承担责任。
本项目采用 Cooperative Non-Commercial License (CNC-1.0)
这是一个反商业化的严格开源协议,详情请查看 LICENSE 文件。
(top 30 of 44)
Python
72.0%
HTML
15.9%
JavaScript
10.7%
Shell
1.2%
将 GeminiCLI 和 Antigravity 转换为 OpenAI 、GEMINI 和 Claude API 兼容接口
初始安装
curl -o termux-install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/termux-install.sh" && chmod +x termux-install.sh && ./termux-install.sh
重启服务
cd gcli2api
bash termux-start.sh
初始安装
iex (iwr "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/install.ps1" -UseBasicParsing).Content
重启服务
双击执行 start.bat
初始安装
curl -o install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/install.sh" && chmod +x install.sh && ./install.sh
重启服务
cd gcli2api
bash start.sh
初始安装
curl -o darwin-install.sh "https://raw.githubusercontent.com/su-kaka/gcli2api/refs/heads/master/darwin-install.sh" && chmod +x darwin-install.sh && ./darwin-install.sh
重启服务
cd gcli2api
bash start.sh
Docker 运行命令
# 使用通用密码
docker run -d --name gcli2api --network host -e PASSWORD=pwd -e PORT=7861 -v $(pwd)/data/creds:/app/creds ghcr.io/su-kaka/gcli2api:latest
# 使用分离密码
docker run -d --name gcli2api --network host -e API_PASSWORD=api_pwd -e PANEL_PASSWORD=panel_pwd -e PORT=7861 -v $(pwd)/data/creds:/app/creds ghcr.io/su-kaka/gcli2api:latest
Docker Mac
# 使用通用密码
docker run -d \
--name gcli2api \
-p 7861:7861 \
-p 8080:8080 \
-e PASSWORD=pwd \
-e PORT=7861 \
-v "$(pwd)/data/creds":/app/creds \
ghcr.io/su-kaka/gcli2api:latest
# 使用分离密码
docker run -d \
--name gcli2api \
-p 7861:7861 \
-p 8080:8080 \
-e API_PASSWORD=api_pwd \
-e PANEL_PASSWORD=panel_pwd \
-e PORT=7861 \
-v $(pwd)/data/creds:/app/creds \
ghcr.io/su-kaka/gcli2api:latest
Docker Compose 运行命令
docker-compose.yml 文件:
version: '3.8'
services:
gcli2api:
image: ghcr.io/su-kaka/gcli2api:latest
container_name: gcli2api
restart: unless-stopped
network_mode: host
environment:
# 使用通用密码(推荐用于简单部署)
- PASSWORD=pwd
- PORT=7861
# 或使用分离密码(推荐用于生产环境)
# - API_PASSWORD=your_api_password
# - PANEL_PASSWORD=your_panel_password
volumes:
- ./data/creds:/app/creds
healthcheck:
test: ["CMD-SHELL", "python -c \"import sys, urllib.request, os; port = os.environ.get('PORT', '7861'); req = urllib.request.Request(f'http://localhost:{port}/v1/models', headers={'Authorization': 'Bearer ' + os.environ.get('PASSWORD', 'pwd')}); sys.exit(0 if urllib.request.urlopen(req, timeout=5).getcode() == 200 else 1)\""]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
docker-compose up -d
多端点多格式支持
/v1/chat/completions 和 /v1/models
/v1/models/{model}:generateContent 和 streamGenerateContent
/v1/messages(遵循 Claude API 规范)/antigravity/v1/chat/completions/antigravity/v1/models/{model}:generateContent 和 streamGenerateContent/antigravity/v1/messages灵活的密码管理
高级凭证管理
凭证状态监控
多种流式支持
响应优化
全功能 Web 界面
批量操作支持
实时监控
网络和代理配置
性能和稳定性配置
日志和调试
灵活的配置方式
所有模型均具备 1M 上下文窗口容量。每个凭证文件提供 1000 次请求额度。
gemini-2.5-progemini-3-pro-previewgemini-3.1-pro-previewgemini-2.5-pro-high:思考模式gemini-2.5-pro-low:低思考模式gemini-2.5-pro-search:集成搜索功能的模型gemini-3.1-flash-image:基础图像生成模型-2k:2K 分辨率-4k:4K 高清分辨率-1x1:正方形(头像)-16x9:横屏(电脑壁纸)-9x16:竖屏(手机壁纸)-21x9:超宽屏(带鱼屏)-4x3:传统显示器-3x4:竖版海报gemini-3.1-flash-image-4k-16x9:4K 横屏gemini-3.1-flash-image-2k-9x16:2K 竖屏-假流式 后缀
gemini-2.5-pro-假流式抗截断/ 前缀
抗截断/gemini-2.5-prohttp://127.0.0.1:7861 (默认端口,可通过 PORT 环境变量修改)pwd,可通过环境变量修改)
OpenAI 兼容客户端:
http://127.0.0.1:7861/v1pwd(默认值,可通过 API_PASSWORD 或 PASSWORD 环境变量修改)Gemini 原生客户端:
http://127.0.0.1:7861Authorization: Bearer your_api_passwordx-goog-api-key: your_api_password?key=your_api_passwordGCLI 认证模式
Antigravity 认证模式
统一管理界面
gcli2api 支持两种存储后端:本地 SQLite(默认) 和 MongoDB(云端分布式存储)
默认存储方式
云端分布式存储方案
当需要多实例部署或云端存储时,可以启用 MongoDB 存储模式。
步骤 1: 配置 MongoDB 连接
# 本地 MongoDB
export MONGODB_URI="mongodb://localhost:27017"
# MongoDB Atlas 云服务
export MONGODB_URI="mongodb+srv://username:password@cluster.mongodb.net"
# 带认证的 MongoDB
export MONGODB_URI="mongodb://admin:password@localhost:27017/admin"
# 可选:自定义数据库名称(默认: gcli2api)
export MONGODB_DATABASE="my_gcli_db"
步骤 2: 启动应用
# 应用会自动检测 MongoDB 配置并使用 MongoDB 存储
python web.py
Docker 环境使用 MongoDB
# 单机 MongoDB 部署
docker run -d --name gcli2api \
-e MONGODB_URI="mongodb://mongodb:27017" \
-e API_PASSWORD=your_password \
--network your_network \
ghcr.io/su-kaka/gcli2api:latest
# 使用 MongoDB Atlas
docker run -d --name gcli2api \
-e MONGODB_URI="mongodb+srv://user:pass@cluster.mongodb.net/gcli2api" \
-e API_PASSWORD=your_password \
-p 7861:7861 \
ghcr.io/su-kaka/gcli2api:latest
Docker Compose 示例
version: '3.8'
services:
mongodb:
image: mongo:7
container_name: gcli2api-mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password123
volumes:
- mongodb_data:/data/db
ports:
- "27017:27017"
gcli2api:
image: ghcr.io/su-kaka/gcli2api:latest
container_name: gcli2api
restart: unless-stopped
depends_on:
- mongodb
environment:
- MONGODB_URI=mongodb://admin:password123@mongodb:27017/admin
- MONGODB_DATABASE=gcli2api
- API_PASSWORD=your_api_password
- PORT=7861
ports:
- "7861:7861"
volumes:
mongodb_data:
MongoDB 连接优化
# 连接池和超时配置
export MONGODB_URI="mongodb://localhost:27017?maxPoolSize=10&serverSelectionTimeoutMS=5000"
# 副本集配置
export MONGODB_URI="mongodb://host1:27017,host2:27017,host3:27017/gcli2api?replicaSet=myReplicaSet"
# 读写分离配置
export MONGODB_URI="mongodb://localhost:27017/gcli2api?readPreference=secondaryPreferred"
基础配置
PORT: 服务端口(默认:7861)HOST: 服务器监听地址(默认:0.0.0.0)密码配置
API_PASSWORD: 聊天 API 访问密码(默认:继承 PASSWORD 或 pwd)PANEL_PASSWORD: 控制面板访问密码(默认:继承 PASSWORD 或 pwd)PASSWORD: 通用密码,设置后覆盖上述两个(默认:pwd)性能和稳定性配置
RETRY_429_ENABLED: 启用 429 错误自动重试(默认:true)RETRY_429_MAX_RETRIES: 429 错误最大重试次数(默认:3)RETRY_429_INTERVAL: 429 错误重试间隔,秒(默认:1.0)ANTI_TRUNCATION_MAX_ATTEMPTS: 抗截断最大重试次数(默认:3)网络和代理配置
PROXY: HTTP/HTTPS 代理地址(格式:http://host:port)OAUTH_PROXY_URL: OAuth 认证代理端点GOOGLEAPIS_PROXY_URL: Google APIs 代理端点METADATA_SERVICE_URL: 元数据服务代理端点自动化配置
AUTO_BAN: 启用凭证自动封禁(默认:true)AUTO_LOAD_ENV_CREDS: 启动时自动加载环境变量凭证(默认:false)兼容性配置
COMPATIBILITY_MODE: 启用兼容性模式,将 system 消息转为 user 消息(默认:false)日志配置
LOG_LEVEL: 日志级别(DEBUG/INFO/WARNING/ERROR,默认:INFO)LOG_FILE: 日志文件路径(默认:log.txt)存储配置
SQLite 配置(默认)
MongoDB 配置(可选云端存储)
MONGODB_URI: MongoDB 连接字符串(设置后启用 MongoDB 模式)MONGODB_DATABASE: MongoDB 数据库名称(默认:gcli2api)Docker 使用示例
# 使用通用密码
docker run -d --name gcli2api \
-e PASSWORD=mypassword \
-e PORT=7861 \
ghcr.io/su-kaka/gcli2api:latest
# 使用分离密码
docker run -d --name gcli2api \
-e API_PASSWORD=my_api_password \
-e PANEL_PASSWORD=my_panel_password \
-e PORT=7861 \
ghcr.io/su-kaka/gcli2api:latest
注意:当设置了凭证环境变量时,系统将优先使用环境变量中的凭证,忽略 creds 目录中的文件。
本服务支持三套完整的 API 端点:
端点: /v1/chat/completions
认证: Authorization: Bearer your_api_password
支持两种请求格式,会自动检测并处理:
OpenAI 格式:
{
"model": "gemini-2.5-pro",
"messages": [
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"}
],
"temperature": 0.7,
"stream": true
}
Gemini 原生格式:
{
"model": "gemini-2.5-pro",
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
],
"systemInstruction": {"parts": [{"text": "You are a helpful assistant"}]},
"generationConfig": {
"temperature": 0.7
}
}
非流式端点: /v1/models/{model}:generateContent
流式端点: /v1/models/{model}:streamGenerateContent
模型列表: /v1/models
认证方式(任选一种):
Authorization: Bearer your_api_passwordx-goog-api-key: your_api_password?key=your_api_password请求示例:
# 使用 x-goog-api-key 头部
curl -X POST "http://127.0.0.1:7861/v1/models/gemini-2.5-pro:generateContent" \
-H "x-goog-api-key: your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
]
}'
# 使用 URL 参数
curl -X POST "http://127.0.0.1:7861/v1/models/gemini-2.5-pro:streamGenerateContent?key=your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
]
}'
端点: /v1/messages
认证: x-api-key: your_api_password 或 Authorization: Bearer your_api_password
请求示例:
curl -X POST "http://127.0.0.1:7861/v1/messages" \
-H "x-api-key: your_api_password" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-pro",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Claude!"}
]
}'
支持 system 参数:
{
"model": "gemini-2.5-pro",
"max_tokens": 1024,
"system": "You are a helpful assistant",
"messages": [
{"role": "user", "content": "Hello"}
]
}
说明:
支持三种格式:OpenAI、Gemini 和 Claude
端点: /antigravity/v1/chat/completions
认证: Authorization: Bearer your_api_password
请求示例:
curl -X POST "http://127.0.0.1:7861/antigravity/v1/chat/completions" \
-H "Authorization: Bearer your_api_password" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [
{"role": "user", "content": "Hello"}
],
"stream": true
}'
非流式端点: /antigravity/v1/models/{model}:generateContent
流式端点: /antigravity/v1/models/{model}:streamGenerateContent
认证方式(任选一种):
Authorization: Bearer your_api_passwordx-goog-api-key: your_api_password?key=your_api_password请求示例:
# Gemini 格式非流式请求
curl -X POST "http://127.0.0.1:7861/antigravity/v1/models/claude-sonnet-4-5:generateContent" \
-H "x-goog-api-key: your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
],
"generationConfig": {
"temperature": 0.7
}
}'
# Gemini 格式流式请求
curl -X POST "http://127.0.0.1:7861/antigravity/v1/models/gemini-2.5-flash:streamGenerateContent?key=your_api_password" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Hello"}]}
]
}'
端点: /antigravity/v1/messages
认证: x-api-key: your_api_password
请求示例:
curl -X POST "http://127.0.0.1:7861/antigravity/v1/messages" \
-H "x-api-key: your_api_password" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello"}
]
}'
支持的 Antigravity 模型:
claude-sonnet-4-5、claude-opus-4-5 等gemini-2.5-flash、gemini-2.5-pro 等Gemini 原生示例:
from io import BytesIO
from PIL import Image
from google.genai import Client
from google.genai.types import HttpOptions
from google.genai import types
# The client gets the API key from the environment variable `GEMINI_API_KEY`.
client = Client(
api_key="pwd",
http_options=HttpOptions(base_url="http://127.0.0.1:7861"),
)
prompt = (
"""
画一只猫
"""
)
response = client.models.generate_content(
model="gemini-3.1-flash-image",
contents=[prompt],
config=types.GenerateContentConfig(
image_config=types.ImageConfig(
aspect_ratio="16:9",
)
)
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.save("generated_image.png")
说明:
认证端点
POST /auth/login - 用户登录POST /auth/start - 开始 OAuth 认证(支持 GCLI 和 Antigravity 模式)POST /auth/callback - 处理 OAuth 回调POST /auth/callback-url - 从回调 URL 直接完成认证GET /auth/status/{project_id} - 检查认证状态凭证管理端点(支持 mode=geminicli 或 mode=antigravity 参数)
POST /creds/upload - 批量上传凭证文件(支持 JSON 和 ZIP)GET /creds/status - 获取凭证状态列表(支持分页和筛选)GET /creds/detail/{filename} - 获取单个凭证详情POST /creds/action - 单个凭证操作(启用/禁用/删除)POST /creds/batch-action - 批量凭证操作GET /creds/download/{filename} - 下载单个凭证文件GET /creds/download-all - 打包下载所有凭证POST /creds/fetch-email/{filename} - 获取用户邮箱POST /creds/refresh-all-emails - 批量刷新用户邮箱POST /creds/deduplicate-by-email - 按邮箱去重凭证POST /creds/verify-project/{filename} - 检验凭证 Project IDGET /creds/quota/{filename} - 获取凭证额度信息(仅 Antigravity)配置管理端点
GET /config/get - 获取当前配置POST /config/save - 保存配置日志管理端点
POST /logs/clear - 清空日志GET /logs/download - 下载日志文件WebSocket /logs/stream - 实时日志流版本信息端点
GET /version/info - 获取版本信息(可选 check_update=true 参数检查更新)多模态支持
{
"model": "gemini-2.5-pro",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."
}
}
]
}
]
}
思维模式支持
{
"model": "gemini-2.5-pro-maxthinking",
"messages": [
{"role": "user", "content": "复杂数学问题"}
]
}
响应将包含分离的思维内容:
{
"choices": [{
"message": {
"role": "assistant",
"content": "最终答案",
"reasoning_content": "详细的思考过程..."
}
}]
}
抗截断使用
{
"model": "抗截断/gemini-2.5-pro",
"messages": [
{"role": "user", "content": "写一篇长文章"}
],
"stream": true
}
兼容性模式
# 启用兼容性模式
export COMPATIBILITY_MODE=true
此模式下,所有 system 消息会转换为 user 消息,提高与某些客户端的兼容性。
欢迎加入 QQ 群交流讨论!
QQ 群号:1083250744
本项目仅供学习和研究用途。使用本项目表示您同意:
项目作者对因使用本项目而产生的任何直接或间接损失不承担责任。
本项目采用 Cooperative Non-Commercial License (CNC-1.0)
这是一个反商业化的严格开源协议,详情请查看 LICENSE 文件。
(top 30 of 44)
Python
72.0%
HTML
15.9%
JavaScript
10.7%
Shell
1.2%