| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
将 Google Antigravity API 转换为 OpenAI 兼容格式的代理服务,支持流式响应、工具调用和多账号管理。
Windows (cmd.exe):
curl -O https://raw.githubusercontent.com/liuw1535/antigravity2api-nodejs/main/setup.bat && setup.batWindows (PowerShell):
IwR -Uri https://raw.githubusercontent.com/liuw1535/antigravity2api-nodejs/main/setup.bat -OutFile setup.bat; .\setup.batLinux/macOS:
wget https://raw.githubusercontent.com/liuw1535/antigravity2api-nodejs/main/setup.sh && chmod +x setup.sh && ./setup.sh或使用 curl:
curl -O https://raw.githubusercontent.com/liuw1535/antigravity2api-nodejs/main/setup.sh && chmod +x setup.sh && ./setup.sh脚本会自动完成以下操作:
如果已经部署成功,可以使用启动脚本快速启动服务:
Windows:
start.batLinux/macOS:
chmod +x start.sh
./start.sh使用更新脚本可以安全地更新到最新版本(自动保存本地修改):
Windows:
update.batLinux/macOS:
chmod +x update.sh
./update.sh更新完成后,可以选择:
npm install首次启动时,如果 .env 和 config.json 不存在,系统会自动创建默认配置文件。
你也可以手动复制示例文件:
cp .env.example .env
cp config.json.example config.json编辑 .env 文件配置必要参数:
# 必填配置(留空则自动生成随机凭据)
API_KEY=sk-text
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
JWT_SECRET=your-jwt-secret-key-change-this-in-production
# 可选配置
# PROXY=http://127.0.0.1:7890
# SYSTEM_INSTRUCTION=你是聊天机器人
# IMAGE_BASE_URL=http://your-domain.comnpm run login浏览器会自动打开 Google 授权页面,授权后 Token 会保存到 data/accounts.json。
npm start服务将在 http://localhost:8045 启动。
无需安装 Node.js,直接下载预编译的二进制文件即可运行。
从 GitHub Releases 下载对应平台的二进制文件:
| 平台 | 文件名 |
|---|---|
| Windows x64 | antigravity2api-win-x64.exe |
| Linux x64 | antigravity2api-linux-x64 |
| Linux ARM64 | antigravity2api-linux-arm64 |
| macOS x64 | antigravity2api-macos-x64 |
| macOS ARM64 | antigravity2api-macos-arm64 |
将以下文件放在二进制文件同目录下:
├── antigravity2api-win-x64.exe # 二进制文件
├── .env # 环境变量配置(可选,首次启动自动创建)
├── config.json.example # 配置示例文件(必需)
├── public/ # 静态文件目录(必需)
│ ├── index.html
│ ├── style.css
│ ├── assets/
│ │ └── bg.jpg
│ └── js/
│ ├── auth.js
│ ├── config.js
│ ├── main.js
│ ├── quota.js
│ ├── tokens.js
│ ├── ui.js
│ └── utils.js
└── data/ # 数据目录(自动创建)
└── accounts.json
创建 .env 文件:
API_KEY=sk-your-api-key
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
JWT_SECRET=your-jwt-secret-key-change-this-in-production
# IMAGE_BASE_URL=http://your-domain.com
# PROXY=http://127.0.0.1:7890Windows:
# 直接双击运行,或在命令行执行
antigravity2api-win-x64.exeLinux/macOS:
# 添加执行权限
chmod +x antigravity2api-linux-x64
# 运行
./antigravity2api-linux-x64创建 systemd 服务文件 /etc/systemd/system/antigravity2api.service:
[Unit]
Description=Antigravity2API Service
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/antigravity2api
ExecStart=/opt/antigravity2api/antigravity2api-linux-x64
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload
sudo systemctl enable antigravity2api
sudo systemctl start antigravity2apinpm run docker:build该命令会自动:
docker compose up -ddocker compose logs -fdocker compose down如果需要手动构建,请先准备配置文件:
# 复制配置文件
cp .env.example .env
cp config.json.example config.json
# 创建必要目录
mkdir -p data public/images
# 构建镜像
docker build -t antigravity2api .docker run -d \
--name antigravity2api \
-p 8045:8045 \
-e API_KEY=sk-text \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=admin123 \
-e JWT_SECRET=your-jwt-secret-key \
-e IMAGE_BASE_URL=http://your-domain.com \
-v $(pwd)/data:/app/data \
-v $(pwd)/public/images:/app/public/images \
-v $(pwd)/.env:/app/.env \
-v $(pwd)/config.json:/app/config.json \
antigravity2apidocker logs -f antigravity2api在 Zeabur 控制台创建新服务,使用以下镜像:
ghcr.io/liuw1535/antigravity2api-nodejs
在服务设置中添加以下环境变量:
| 环境变量 | 说明 | 示例值 |
|---|---|---|
| API_KEY | API 认证密钥 | sk-your-api-key |
| ADMIN_USERNAME | 管理员用户名 | admin |
| ADMIN_PASSWORD | 管理员密码 | your-secure-password |
| JWT_SECRET | JWT 密钥 | your-jwt-secret-key |
| IMAGE_BASE_URL | 图片服务基础 URL | https://your-domain.zeabur.app |
可选环境变量:
在服务的「Volumes」设置中添加以下挂载点:
| 挂载路径 | 说明 |
|---|---|
| /app/data | Token 数据存储 |
| /app/public/images | 生成的图片存储 |
⚠️ 重要提示:
在服务的「Networking」设置中绑定域名,然后将该域名设置到 IMAGE_BASE_URL 环境变量中。
保存配置后,Zeabur 会自动拉取镜像并启动服务。访问绑定的域名即可使用。
服务启动后,访问 http://localhost:8045 即可打开 Web 管理界面。
登录系统
添加 Token
管理 Token
隐私模式
配置轮询策略
修改配置
服务提供 OpenAI 兼容的 API 接口,详细使用说明请查看 API.md。
curl http://localhost:8045/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-text" \
-d '{
"model": "gemini-2.0-flash-exp",
"messages": [{"role": "user", "content": "你好"}]
}'data/accounts.json 支持多个账号,服务会自动轮换使用:
[
{
"access_token": "ya29.xxx",
"refresh_token": "1//xxx",
"expires_in": 3599,
"timestamp": 1234567890000,
"enable": true
},
{
"access_token": "ya29.yyy",
"refresh_token": "1//yyy",
"expires_in": 3599,
"timestamp": 1234567890000,
"enable": true
}
]项目配置分为两部分:
基础配置文件,包含服务器、API 和默认参数设置。
首次启动时,如果 config.json 不存在,系统会自动从 config.json.example 复制一份默认配置。
配置示例:
{
"server": {
"port": 8045, // 服务端口
"host": "0.0.0.0", // 监听地址
"maxRequestSize": "500mb", // 最大请求体大小
"heartbeatInterval": 15000,// 心跳间隔(毫秒),防止 Cloudflare 超时
"memoryThreshold": 100 // 内存阈值(MB),超过时触发 GC
},
"rotation": {
"strategy": "round_robin", // 轮询策略:round_robin/quota_exhausted/request_count
"requestCount": 50 // request_count 策略下每个 Token 的请求次数
},
"defaults": {
"temperature": 1, // 默认温度参数
"topP": 1, // 默认 top_p
"topK": 50, // 默认 top_k
"maxTokens": 32000, // 默认最大 token 数
"thinkingBudget": 1024 // 默认思考预算(仅对思考模型生效,范围 1024-32000)
},
"cache": {
"modelListTTL": 3600000 // 模型列表缓存时间(毫秒),默认 1 小时
},
"other": {
"timeout": 300000, // 请求超时时间(毫秒)
"retryTimes": 3, // 429/503 最大重试次数
"retryIntervalMs": 10000, // 429/503 固定重试间隔(毫秒)
"retryPollTokenWithQuota": false, // 重试前是否重新轮询有当前模型组额度的 Token
"skipProjectIdFetch": false,// 跳过 ProjectId 获取,直接随机生成(仅 Pro 账号有效)
"useNativeAxios": false, // 使用原生 axios 而非 AntigravityRequester
"useContextSystemPrompt": false, // 是否将请求中的 system 消息合并到 SystemInstruction
"passSignatureToClient": false // 是否将 thoughtSignature 透传到客户端
}
}| 策略 | 说明 |
|---|---|
| round_robin | 均衡负载:每次请求后切换到下一个 Token |
| quota_exhausted | 额度耗尽才切换:持续使用当前 Token 直到额度用完(高性能优化) |
| request_count | 自定义次数:每个 Token 使用指定次数后切换(默认策略) |
环境变量配置文件,包含敏感信息和可选配置:
| 环境变量 | 说明 | 必填 |
|---|---|---|
| API_KEY | API 认证密钥 | ✅ |
| ADMIN_USERNAME | 管理员用户名 | ✅ |
| ADMIN_PASSWORD | 管理员密码 | ✅ |
| JWT_SECRET | JWT 密钥 | ✅ |
| PROXY | 代理地址(如:http://127.0.0.1:7890),也支持系统代理环境变量 | |
| HTTP_PROXY/HTTPS_PROXY | ❌ | |
| SYSTEM_INSTRUCTION | 系统提示词 | ❌ |
| IMAGE_BASE_URL | 图片服务基础 URL | ❌ |
完整配置示例请参考 .env.example 文件。
# 启动服务
npm start
# 开发模式(自动重启)
npm run dev
# 登录获取 Token
npm run login
# 构建 Docker 镜像
npm run docker:build. ├── data/ │ ├── accounts.json # Token 存储(自动生成) │ └── quotas.json # 额度缓存(自动生成) ├── public/ │ ├── assets/ # 静态资源 │ ├── images/ # 生成的图片存储目录 │ ├── index.html # Web 管理界面 │ ├── js/ # 前端逻辑 │ │ ├── auth.js │ │ ├── config.js │ │ ├── logs.js # 日志管理 │ │ ├── main.js │ │ ├── quota.js │ │ ├── tokens.js │ │ ├── ui.js │ │ └── utils.js │ └── style.css # 界面样式 ├── scripts/ │ ├── build-docker.js # Docker 构建脚本 │ ├── build.js # 项目构建脚本 │ ├── oauth-server.js # OAuth 登录服务 │ └── refresh-tokens.js # Token 刷新脚本 ├── src/ │ ├── api/ │ │ ├── client.js # API 调用逻辑(含模型列表缓存) │ │ └── stream_parser.js # 流式响应解析(对象池优化) │ ├── auth/ │ │ ├── jwt.js # JWT 认证 │ │ ├── token_manager.js # Token 管理(含轮询策略) │ │ ├── token_store.js # Token 文件存储(异步读写) │ │ └── quota_manager.js # 额度缓存管理 │ ├── bin/ │ │ ├── antigravity_requester_android_arm64 # Android ARM64 TLS 请求器 │ │ ├── antigravity_requester_linux_amd64 # Linux AMD64 TLS 请求器 │ │ └── antigravity_requester_windows_amd64.exe # Windows AMD64 TLS 请求器 │ ├── config/ │ │ ├── config.js # 配置加载 │ │ └── init-env.js # 环境变量初始化 │ ├── constants/ │ │ ├── index.js # 应用常量定义 │ │ └── oauth.js # OAuth 常量 │ ├── routes/ │ │ ├── admin.js # 管理接口路由 │ │ ├── claude.js # Claude 路由 │ │ ├── gemini.js # Gemini 路由 │ │ ├── openai.js # OpenAI 路由 │ │ └── sd.js # SD WebUI 兼容接口 │ ├── server/ │ │ ├── handlers/ # 请求处理器 │ │ │ ├── claude.js │ │ │ ├── gemini.js │ │ │ └── openai.js │ │ ├── index.js # 主服务器(含内存管理和心跳) │ │ └── stream.js # 流式响应处理 │ ├── utils/ │ │ ├── configReloader.js # 配置热重载 │ │ ├── converters/ # 格式转换器 │ │ │ ├── claude.js │ │ │ ├── common.js │ │ │ ├── gemini.js │ │ │ └── openai.js │ │ ├── deepMerge.js # 深度合并工具 │ │ ├── envParser.js # 环境变量解析 │ │ ├── errors.js # 统一错误处理 │ │ ├── httpClient.js # HTTP 客户端 │ │ ├── idGenerator.js # ID 生成器 │ │ ├── imageStorage.js # 图片存储 │ │ ├── ipBlockManager.js # IP 封禁管理 │ │ ├── logger.js # 日志模块 │ │ ├── memoryManager.js # 智能内存管理 │ │ ├── parameterNormalizer.js # 统一参数处理 │ │ ├── paths.js # 路径工具(支持 pkg 打包) │ │ ├── thoughtSignatureCache.js # 签名缓存 │ │ ├── toolConverter.js # 工具定义转换 │ │ ├── toolNameCache.js # 工具名称缓存 │ │ └── utils.js # 工具函数(重导出) │ └── AntigravityRequester.js # TLS 指纹请求器封装 ├── test/ │ ├── test-request.js # 请求测试 │ ├── test-image-generation.js # 图片生成测试 │ ├── test-token-rotation.js # Token 轮换测试 │ └── test-transform.js # 转换测试 ├── .env # 环境变量配置(敏感信息,自动生成) ├── .env.example # 环境变量配置示例 ├── config.json # 基础配置文件(自动生成) ├── config.json.example # 基础配置示例 ├── Dockerfile # Docker 构建文件 ├── docker-compose.yml # Docker Compose 配置 └── package.json # 项目配置
对于 Pro 订阅账号,可以跳过 API 验证直接使用随机生成的 ProjectId:
{
"other": {
"skipProjectIdFetch": true
}
}运行 npm run login 登录时会自动使用随机生成的 ProjectId
已有账号也会在使用时自动生成随机 ProjectId
注意:此功能仅适用于 Pro 订阅账号。官方已修复免费账号使用随机 ProjectId 的漏洞。
当 OAuth 登录或添加 Token 时,系统会自动检测账号的订阅资格:
这一机制确保了:
本服务支持将开头连续的多条 system 消息与全局 SystemInstruction 合并:
请求消息:
[system] 你是助手
[system] 请使用中文回答
[user] 你好
合并后:
SystemInstruction = 全局配置的系统提示词 + "\n\n" + "你是助手\n\n请使用中文回答"
messages = [{role: user, content: 你好}]
这一设计:
本服务支持三种 API 格式,每种格式都有完整的参数支持:
{
"model": "gemini-2.0-flash-thinking-exp",
"max_tokens": 16000,
"temperature": 0.7,
"top_p": 0.9,
"top_k": 40,
"thinking_budget": 10000,
"reasoning_effort": "high",
"messages": [...]
}| 参数 | 说明 | 默认值 |
|---|---|---|
| max_tokens | 最大输出 token 数 | 32000 |
| temperature | 温度 (0.0-1.0) | 1 |
| top_p | Top-P 采样 | 1 |
| top_k | Top-K 采样 | 50 |
| thinking_budget | 思考预算 (1024-32000) | 1024 |
| reasoning_effort | 思考强度 (low/medium/high) | - |
| response_format | 支持响应格式 ({ "type": "json_object" },仅 Gemini 模型支持) | - |
{
"model": "claude-sonnet-4-5-thinking",
"max_tokens": 16000,
"temperature": 0.7,
"top_p": 0.9,
"top_k": 40,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [...]
}| 参数 | 说明 | 默认值 |
|---|---|---|
| max_tokens | 最大输出 token 数 | 32000 |
| temperature | 温度 (0.0-1.0) | 1 |
| top_p | Top-P 采样 | 1 |
| top_k | Top-K 采样 | 50 |
| thinking.type | 思考开关 (enabled/disabled) | - |
| thinking.budget_tokens | 思考预算 (1024-32000) | 1024 |
{
"contents": [...],
"generationConfig": {
"maxOutputTokens": 16000,
"temperature": 0.7,
"topP": 0.9,
"topK": 40,
"thinkingConfig": {
"includeThoughts": true,
"thinkingBudget": 10000
}
}
}| 参数 | 说明 | 默认值 |
|---|---|---|
| maxOutputTokens | 最大输出 token 数 | 32000 |
| temperature | 温度 (0.0-1.0) | 1 |
| topP | Top-P 采样 | 1 |
| topK | Top-K 采样 | 50 |
| thinkingConfig.includeThoughts | 是否包含思考内容 | true |
| thinkingConfig.thinkingBudget | 思考预算 (1024-32000) | 1024 |
所有三种格式的参数都会被统一规范化处理,确保一致的行为:
本服务自动适配 DeepSeek 的 reasoning_content 格式,将思维链内容单独输出,避免与正常内容混淆:
{
"choices": [{
"message": {
"content": "最终答案",
"reasoning_content": "这是思考过程..."
}
}]
}| 值 | 思考 Token 预算 |
|---|---|
| low | 1024 |
| medium | 16000 |
| high | 32000 |
本服务经过深度内存优化:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 进程数 | 8+ | 2 |
| 内存占用 | 100MB+ | 50MB+ |
| GC 频率 | 高 | 低 |
内存压力阈值根据用户配置的 memoryThreshold(MB)动态计算:
| 压力级别 | 阈值比例 | 默认值(100MB 配置) | 行为 |
|---|---|---|---|
| LOW | 30% | 30MB | 正常运行 |
| MEDIUM | 60% | 60MB | 轻度清理 |
| HIGH | 100% | 100MB | 积极清理 + GC |
| CRITICAL | >100% | >100MB | 紧急清理 + 强制 GC |
{
"server": {
"memoryThreshold": 100
}
}为防止 Cloudflare 等 CDN 因长时间无响应而断开连接,本服务实现了 SSE 心跳机制:
{
"server": {
"heartbeatInterval": 15000
}
}项目支持三种 API 格式(OpenAI、Gemini、Claude),转换器代码经过优化,提取了公共模块:
src/utils/converters/ ├── common.js # 公共函数(签名处理、消息构建、请求体构建等) ├── openai.js # OpenAI 格式转换器 ├── claude.js # Claude 格式转换器 └── gemini.js # Gemini 格式转换器
| 函数 | 说明 |
|---|---|
| getSignatureContext() | 获取思维签名和工具签名 |
| pushUserMessage() | 添加用户消息到消息数组 |
| findFunctionNameById() | 根据工具调用 ID 查找函数名 |
| pushFunctionResponse() | 添加函数响应到消息数组 |
| createThoughtPart() | 创建带签名的思维 part |
| createFunctionCallPart() | 创建带签名的函数调用 part |
| processToolName() | 处理工具名称映射 |
| pushModelMessage() | 添加模型消息到消息数组 |
| buildRequestBody() | 构建 Antigravity 请求体 |
| mergeSystemInstruction() | 合并系统指令 |
src/utils/parameterNormalizer.js # 统一参数处理
将 OpenAI、Claude、Gemini 三种格式的参数统一转换为内部格式:
| 函数 | 说明 |
|---|---|
| normalizeOpenAIParameters() | 规范化 OpenAI 格式参数 |
| normalizeClaudeParameters() | 规范化 Claude 格式参数 |
| normalizeGeminiParameters() | 规范化 Gemini 格式参数 |
| toGenerationConfig() | 转换为上游 API 格式 |
src/utils/toolConverter.js # 统一的工具定义转换
支持将 OpenAI、Claude、Gemini 三种格式的工具定义转换为 Antigravity 格式。
MIT
| Back | FazBrowse Home | New Git URL |