Skip to content

AntiHub-Project/Antigv-plugin

Repository files navigation

反重力 to OpenAI API 代理服务

一个功能强大的 反重力 API 转 OpenAI 兼容格式的代理服务,支持多用户管理、OAuth认证、配额管理、流式响应、工具调用和多账号轮换。

📝 声明

本项目基于 liuw1535antigravity2api-nodejs 进行开发和扩展。感谢原作者的开源贡献!

✨ 功能特性

  • 🔄 OpenAI API 兼容格式 - 完全兼容 OpenAI API v1 接口
  • 🌊 流式和非流式响应 - 支持 SSE 流式输出和传统响应
  • 🛠️ 工具调用支持 - 完整支持 Function Calling 功能
  • 👥 多用户管理 - 支持多用户隔离,每个用户独立的 API Key
  • 🔄 多账号自动轮换 - 智能账号切换,提高服务可用性
  • 🔐 OAuth 认证 - 基于 Google OAuth 的安全认证
  • 🔄 Token 自动刷新 - 自动处理 Token 过期和刷新
  • 📊 配额管理系统 - 精确的配额监控和自动恢复机制
  • 🖼️ 图片输入支持 - 支持 Base64 编码的多模态输入
  • 🧠 思维链输出 - 支持 AI 思考过程输出
  • 📈 使用统计 - 详细的配额消耗和使用记录

🚀 快速开始

环境要求

  • Node.js >= 18.0.0
  • PostgreSQL >= 12

1. 安装依赖

npm install

2. 配置数据库

复制配置文件模板并替换为你自己的实际数据:

cp config.json.example config.json

3. 初始化数据库

创建数据库和表结构:

# 创建数据库
createdb antigv

# 导入表结构
psql -U postgres -d antigv -f schema.sql

4. 启动服务

npm start

服务将在 http://0.0.0.0:8045 启动。

5. 创建第一个用户

使用管理员 API Key 创建用户:

curl -X POST http://localhost:8045/api/users \
  -H "Authorization: Bearer sk-admin-your-secret-key-here" \
  -H "Content-Type: application/json" \
  -d '{"name": "测试用户"}'

响应会返回用户的 API Key,用于后续操作。

📖 API 使用

获取模型列表

curl http://localhost:8045/v1/models \
  -H "Authorization: Bearer sk-user-api-key"

聊天补全(流式)

curl http://localhost:8045/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-user-api-key" \
  -d '{
    "model": "gemini-3-pro-high",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

聊天补全(非流式)

curl http://localhost:8045/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-user-api-key" \
  -d '{
    "model": "gemini-3-pro-high",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": false
  }'

工具调用示例

curl http://localhost:8045/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-user-api-key" \
  -d '{
    "model": "gemini-3-pro-high",
    "messages": [{"role": "user", "content": "北京天气怎么样"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "获取天气信息",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {"type": "string", "description": "城市名称"}
          }
        }
      }
    }]
  }'

图片输入示例

支持 Base64 编码的图片输入:

curl http://localhost:8045/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-user-api-key" \
  -d '{
    "model": "gemini-3-pro-high",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "这张图片里有什么?"},
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
          }
        }
      ]
    }],
    "stream": true
  }'

支持的图片格式:

  • JPEG/JPG (data:image/jpeg;base64,...)
  • PNG (data:image/png;base64,...)
  • GIF (data:image/gif;base64,...)
  • WebP (data:image/webp;base64,...)

🔐 账号管理

添加 Google 账号

  1. 获取 OAuth 授权 URL:
curl -X POST http://localhost:8045/api/oauth/authorize \
  -H "Authorization: Bearer sk-user-api-key" \
  -H "Content-Type: application/json" \
  -d '{"is_shared": 0}'
  1. 在浏览器中打开返回的 auth_url 进行授权
  2. 授权成功后会自动回调保存账号信息

查看账号列表

curl http://localhost:8045/api/accounts \
  -H "Authorization: Bearer sk-user-api-key"

📊 配额管理

查看用户配额

curl http://localhost:8045/api/quotas/user \
  -H "Authorization: Bearer sk-user-api-key"

查看配额消耗记录

curl "http://localhost:8045/api/quotas/consumption?limit=100" \
  -H "Authorization: Bearer sk-user-api-key"

配额机制说明

  • 专属账号 (is_shared=0): 不消耗配额池,仅作记录
  • 共享账号 (is_shared=1): 消耗用户共享配额池
  • 配额上限: 2 × 用户共享账号数量
  • 自动恢复: 每小时恢复 2n × 0.2 (n为共享账号数)

⚙️ 配置说明

config.json 完整配置

{
  "server": {
    "port": 8045,
    "host": "0.0.0.0"
  },
  "oauth": {
    "callbackUrl": "https://your-domain.com/api/oauth/callback"
  },
  "database": {
    "host": "localhost",
    "port": 5432,
    "database": "反重力",
    "user": "postgres",
    "password": "your_password",
    "max": 20,
    "idleTimeoutMillis": 30000,
    "connectionTimeoutMillis": 2000
  },
  "api": {
    "url": "https://daily-cloudcode-pa.sandbox.googleapis.com/v1internal:streamGenerateContent?alt=sse",
    "modelsUrl": "https://daily-cloudcode-pa.sandbox.googleapis.com/v1internal:fetchAvailableModels",
    "host": "daily-cloudcode-pa.sandbox.googleapis.com",
    "userAgent": "反重力/1.11.3 windows/amd64"
  },
  "defaults": {
    "temperature": 1,
    "top_p": 0.85,
    "top_k": 50,
    "max_tokens": 8096
  },
  "security": {
    "maxRequestSize": "50mb",
    "adminApiKey": "sk-admin-your-secret-key-here"
  },
  "systemInstruction": ""
}
配置项 说明 默认值
server.port 服务端口 8045
server.host 监听地址 0.0.0.0
oauth.callbackUrl OAuth 回调地址 -
database.* 数据库连接配置 -
security.adminApiKey 管理员 API Key -
security.maxRequestSize 最大请求体大小 50mb
defaults.temperature 默认温度参数 1
defaults.top_p 默认 top_p 0.85
defaults.top_k 默认 top_k 50
defaults.max_tokens 默认最大 token 数 8096

🛠️ 开发命令

# 启动服务
npm start

# 开发模式(自动重启)
npm run dev

# 手动执行配额恢复任务
node scripts/quota-recovery-cron.js

📁 项目结构

.
├── data/                      # 数据存储目录(自动生成)
│   └── accounts.json          # Token 存储(旧版本)
├── scripts/                   # 脚本目录
│   ├── oauth-server.js        # OAuth 登录服务
│   └── quota-recovery-cron.js # 配额恢复定时任务
├── src/                       # 源代码目录
│   ├── api/                   # API 调用逻辑
│   │   ├── client.js          # 单账号客户端
│   │   └── multi_account_client.js # 多账号客户端
│   ├── auth/                  # 认证模块
│   │   └── token_manager.js   # Token 管理
│   ├── config/                # 配置模块
│   │   └── config.js          # 配置加载
│   ├── db/                    # 数据库模块
│   │   └── database.js        # 数据库连接
│   ├── server/                # 服务器模块
│   │   ├── index.js           # 主服务器
│   │   └── routes.js          # 路由定义
│   ├── services/              # 业务服务
│   │   ├── account.service.js # 账号服务
│   │   ├── oauth.service.js   # OAuth 服务
│   │   ├── quota.service.js   # 配额服务
│   │   └── user.service.js    # 用户服务
│   └── utils/                 # 工具模块
│       ├── logger.js          # 日志模块
│       └── utils.js           # 工具函数
├── test/                      # 测试目录
│   ├── debug-request.js       # 调试脚本
│   └── test-transform.js      # 测试脚本
├── config.json                # 配置文件
├── config.json.example        # 配置文件模板
├── package.json               # 项目配置
├── API.md                     # 详细 API 文档
└── README.md                  # 项目说明

🔧 工作流程

用户和账号管理流程

  1. 管理员创建用户 - 使用管理员 API Key 创建用户,获取用户 API Key
  2. 用户添加账号 - 用户使用自己的 API Key 通过 OAuth 添加 Google 账号
  3. 账号自动管理 - 系统自动处理 Token 刷新和账号轮换
  4. 配额监控 - 实时监控配额使用,自动恢复和预警

聊天请求处理流程

  1. 认证验证 - 验证用户 API Key
  2. 账号选择 - 根据用户和模型选择可用账号(优先专属账号)
  3. 配额检查 - 检查账号配额是否充足
  4. Token 管理 - 自动刷新过期 Token
  5. API 调用 - 调用 反重力 API
  6. 响应转换 - 转换为 OpenAI 兼容格式
  7. 配额更新 - 更新配额使用记录

⚠️ 注意事项

  1. 安全配置

    • config.json 包含敏感信息,请勿泄露
    • 管理员 API Key 仅用于管理操作
    • 生产环境请使用强密码和 HTTPS
  2. 配额管理

    • 共享账号会消耗配额池,专属账号不会
    • 配额每小时自动恢复一次
    • 建议定期监控配额使用情况
  3. 账号维护

    • Token 会自动刷新,无需手动维护
    • 刷新失败的账号会自动禁用
    • 建议为每个用户配置多个备用账号
  4. 性能优化

    • 支持多账号并发请求
    • 自动负载均衡和故障转移
    • 建议根据使用量调整数据库连接池大小

📄 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request 来改进这个项目。

📞 支持

如果遇到问题,请查看 API.md 获取详细的 API 文档,或提交 Issue 获取帮助。

About

This is the implementation of Antigv plugin.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published