hajimi-bus-2api / README.md
xiaoyukkkk's picture
Upload 11 files
4f80088 verified
metadata
title: Gemini Business2API
emoji: 💎
colorFrom: pink
colorTo: blue
sdk: docker
pinned: false
license: mit

Gemini Business2API

将 Google Gemini Business API 转换为 OpenAI 兼容接口,支持多账户负载均衡。 感谢Claude老师!

License: MIT Python 3.11+

快速部署到 HuggingFace Spaces:

Deploy to Spaces

✨ 功能特性

核心功能

  • OpenAI API 完全兼容 - 无缝对接现有工具
  • 流式响应支持 - 实时输出
  • 多模态支持 - 支持 100+ 种文件类型(图片、PDF、Office 文档、音频、视频、代码等)
  • 图片生成 & 图生图 - 支持 gemini-3-pro-preview 模型
  • 智能文件处理 - 自动识别文件类型,支持 URL 和 Base64 格式

多账户管理

  • 多账户负载均衡 - 支持多账户轮询,故障自动转移
  • 智能熔断机制 - 账户连续失败自动熔断,429限流10分钟后自动恢复
  • 三层重试策略 - 新会话重试、请求重试、账户切换
  • 智能会话复用 - 自动管理对话历史,缓存过期自动清理
  • 在线配置管理 - Web界面编辑账户配置,实时生效
  • 账户过期自动禁用 - 设置过期时间,过期后自动禁用不可选用
  • 手动禁用/启用 - 管理面板一键禁用/启用账户
  • 错误永久禁用 - 普通错误触发熔断后永久禁用,需手动启用恢复

系统功能

  • JWT自动管理 - 无需手动刷新令牌
  • 📊 可视化管理面板 - 实时监控账户状态、过期时间、失败计数、累计对话次数
  • 📈 账户使用统计 - 自动统计每个账户累计对话次数,持久化保存
  • 📝 公开日志系统 - 实时查看服务运行状态(内存最多3000条,自动淘汰)
  • 🔐 双重认证保护 - API_KEY 保护聊天接口,ADMIN_KEY 保护管理面板
  • 📡 实时状态监控 - 公开统计接口,实时查看服务状态和请求统计

性能优化

  • 异步文件 I/O - 避免阻塞事件循环,提升并发性能
  • HTTP 连接池优化 - 提升高并发场景下的稳定性
  • 图片并行下载 - 多图场景下显著提升响应速度
  • 智能锁优化 - 减少锁竞争,提升账户选择效率
  • 会话并发控制 - Session 级别锁,避免对话冲突

📸 功能展示

图片生成效果

图片生成示例1 图片生成示例2
图片生成示例3 图片生成示例4

管理面板

管理面板1 管理面板2

日志系统

日志系统1 日志系统2

🚀 快速开始

方法一: HuggingFace Spaces 部署(推荐)

  1. Fork 本项目到你的 GitHub 账户
  2. HuggingFace Spaces 创建新 Space
  3. 选择 Docker SDK,关联你的 GitHub 仓库
  4. 配置环境变量(Settings → Variables and secrets):
    ACCOUNTS_CONFIG='[{"secure_c_ses":"your_cookie","csesidx":"your_idx","config_id":"your_config"}]'
    PATH_PREFIX=path_prefix
    ADMIN_KEY=your_admin_key
    API_KEY=your_api_key
    LOGO_URL=https://your-domain.com/logo.png
    CHAT_URL=https://your-chat-app.com
    
  5. 等待构建完成(约 2-3 分钟)
  6. 访问你的 Space URL 开始使用

方法二: Docker 部署

# 1. 克隆项目
git clone https://github.com/YOUR_USERNAME/gemini-business2api.git
cd gemini-business2api

# 2. 构建并运行
docker build -t gemini-business2api .
docker run -d \
  -p 7860:7860 \
  -e ACCOUNTS_CONFIG='[{"secure_c_ses":"your_cookie","csesidx":"your_idx","config_id":"your_config"}]' \
  -e PATH_PREFIX=path_prefix \
  -e ADMIN_KEY=your_admin_key \
  -e API_KEY=your_api_key \
  -e LOGO_URL=https://your-domain.com/logo.png \
  -e CHAT_URL=https://your-chat-app.com \
  gemini-business2api

方法三: 本地运行

# 1. 安装依赖
pip install -r requirements.txt

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入实际配置

# 3. 启动服务
python main.py

服务将在 http://localhost:7860 启动

⚙️ 配置说明

必需的环境变量

# 账户配置(必需)
ACCOUNTS_CONFIG='[{"secure_c_ses":"your_cookie","csesidx":"your_idx","config_id":"your_config"}]'

# 路径前缀(必需)
PATH_PREFIX=path_prefix

# 管理员密钥(必需)
ADMIN_KEY=your_admin_key

# API访问密钥(可选,推荐设置)
API_KEY=your_api_key

# 图片URL生成(可选,推荐设置)
BASE_URL=https://your-domain.com

# 全局代理(可选)
PROXY=http://127.0.0.1:7890

# 公开展示配置(可选)
LOGO_URL=https://your-domain.com/logo.png
CHAT_URL=https://your-chat-app.com
MODEL_NAME=gemini-business

# 重试配置(可选)
MAX_NEW_SESSION_TRIES=5        # 新会话尝试账户数(默认5)
MAX_REQUEST_RETRIES=3          # 请求失败重试次数(默认3)
MAX_ACCOUNT_SWITCH_TRIES=5     # 每次重试查找账户次数(默认5)
ACCOUNT_FAILURE_THRESHOLD=3    # 账户失败阈值,达到后熔断(默认3)
RATE_LIMIT_COOLDOWN_SECONDS=600 # 429限流冷却时间,秒(默认600=10分钟)
SESSION_CACHE_TTL_SECONDS=3600 # 会话缓存过期时间,秒(默认3600=1小时)

重试机制说明

系统提供三层重试保护:

  1. 新会话创建重试:创建新对话时,如果账户失败,自动切换到其他账户(最多尝试5个)
  2. 请求失败重试:对话过程中出错,自动重试并切换账户(最多重试3次)
  3. 智能熔断机制
    • 账户连续失败3次 → 自动标记为不可用
    • 429限流错误:冷却10分钟后自动恢复
    • 普通错误:永久禁用,需手动启用
    • JWT失败和请求失败都会触发熔断

### 多账户配置示例

```bash
ACCOUNTS_CONFIG='[
  {
    "id": "account_1",
    "secure_c_ses": "CSE.Ad...",
    "csesidx": "498...",
    "config_id": "0cd...",
    "host_c_oses": "COS.Af...",
    "expires_at": "2025-12-23 23:03:20"
  },
  {
    "id": "account_2",
    "secure_c_ses": "CSE.Ad...",
    "csesidx": "208...",
    "config_id": "782..."
  }
]'

配置字段说明:

  • secure_c_ses (必需): __Secure-C_SES Cookie 值
  • csesidx (必需): 会话索引
  • config_id (必需): 配置 ID
  • id (可选): 账户标识
  • host_c_oses (可选): __Host-C_OSES Cookie 值
  • expires_at (可选): 过期时间,格式 YYYY-MM-DD HH:MM:SS

提示: 参考项目根目录的 .env.exampleaccounts_config.example.json 文件

🔧 获取配置参数

  1. 访问 Google Gemini Business
  2. 打开浏览器开发者工具 (F12)
  3. 切换到 ApplicationCookies,找到:
    • __Secure-C_SESsecure_c_ses
    • __Host-C_OSEShost_c_oses (可选)
  4. 切换到 Network 标签,刷新页面
  5. 找到 streamGenerate 请求,查看 Payload:
    • csesidxcsesidx
    • configIdconfig_id

📖 API 使用

支持的模型

模型名称 说明 图片生成
gemini-auto 自动选择最佳模型(默认)
gemini-2.5-flash Flash 2.5 - 快速响应
gemini-2.5-pro Pro 2.5 - 高质量输出
gemini-3-flash-preview Flash 3 预览版
gemini-3-pro-preview Pro 3 预览版

访问端点

端点 方法 说明
/{PATH_PREFIX}/v1/models GET 获取模型列表
/{PATH_PREFIX}/v1/chat/completions POST 聊天接口(需API_KEY)
/{PATH_PREFIX} GET 管理面板(需ADMIN_KEY)
/{PATH_PREFIX}/accounts GET 获取账户状态(需ADMIN_KEY)
/{PATH_PREFIX}/accounts-config GET 获取账户配置(需ADMIN_KEY)
/{PATH_PREFIX}/accounts-config PUT 更新账户配置(需ADMIN_KEY)
/{PATH_PREFIX}/accounts/{id} DELETE 删除指定账户(需ADMIN_KEY)
/{PATH_PREFIX}/accounts/{id}/disable PUT 禁用指定账户(需ADMIN_KEY)
/{PATH_PREFIX}/accounts/{id}/enable PUT 启用指定账户(需ADMIN_KEY)
/{PATH_PREFIX}/log GET 获取系统日志(需ADMIN_KEY)
/{PATH_PREFIX}/log DELETE 清空系统日志(需ADMIN_KEY)
/public/log/html GET 公开日志页面(无需认证)
/public/stats GET 公开统计信息(无需认证)
/public/stats/html GET 实时状态监控页面(无需认证)

访问示例

假设你的配置为:

  • Space URL: https://your-space.hf.space
  • PATH_PREFIX: my_prefix
  • ADMIN_KEY: my_admin_key

则访问地址为:

  • 管理面板: https://your-space.hf.space/my_prefix?key=my_admin_key
  • 公开日志: https://your-space.hf.space/public/log/html
  • API 端点: https://your-space.hf.space/my_prefix/v1/chat/completions

基本对话

curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-flash",
    "messages": [
      {"role": "user", "content": "Hello!"}
    ],
    "stream": true
  }'

多模态输入(支持 100+ 种文件类型)

本项目支持图片、PDF、Office 文档、音频、视频、代码等 100+ 种文件类型。详细列表请查看 支持的文件类型清单

图片输入

# Base64 格式
curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "这张图片里有什么?"},
          {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,<base64_encoded_image>"}}
        ]
      }
    ]
  }'

# URL 格式(自动下载并转换)
curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "分析这张图片"},
          {"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
        ]
      }
    ]
  }'

PDF 文档

curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "总结这个PDF的内容"},
          {"type": "image_url", "image_url": {"url": "https://example.com/document.pdf"}}
        ]
      }
    ]
  }'

Office 文档(Word、Excel、PowerPoint)

# Word 文档
curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "总结这个Word文档"},
          {"type": "image_url", "image_url": {"url": "https://example.com/document.docx"}}
        ]
      }
    ]
  }'

# Excel 表格
curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "分析这个Excel数据"},
          {"type": "image_url", "image_url": {"url": "https://example.com/data.xlsx"}}
        ]
      }
    ]
  }'

音频文件(语音转录)

curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "转录这段音频"},
          {"type": "image_url", "image_url": {"url": "https://example.com/audio.mp3"}}
        ]
      }
    ]
  }'

视频文件(场景分析)

curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "描述这个视频的内容"},
          {"type": "image_url", "image_url": {"url": "https://example.com/video.mp4"}}
        ]
      }
    ]
  }'

支持的文件类型(12 个分类,100+ 种格式):

  • 🖼️ 图片文件 - 11 种格式(PNG, JPEG, WebP, GIF, BMP, TIFF, SVG, ICO, HEIC, HEIF, AVIF)
  • 📄 文档文件 - 9 种格式(PDF, TXT, Markdown, HTML, XML, CSV, TSV, RTF, LaTeX)
  • 📊 Microsoft Office - 6 种格式(.docx, .doc, .xlsx, .xls, .pptx, .ppt)
  • 📝 Google Workspace - 3 种格式(Docs, Sheets, Slides)
  • 💻 代码文件 - 19 种语言(Python, JavaScript, TypeScript, Java, C/C++, Go, Rust, PHP, Ruby, Swift, Kotlin, Scala, Shell, PowerShell, SQL, R, MATLAB 等)
  • 🎨 Web 开发 - 8 种格式(CSS, SCSS, LESS, JSON, YAML, TOML, Vue, Svelte)
  • 🎵 音频文件 - 10 种格式(MP3, WAV, AAC, M4A, OGG, FLAC, AIFF, WMA, OPUS, AMR)
  • 🎬 视频文件 - 10 种格式(MP4, MOV, AVI, MPEG, WebM, FLV, WMV, MKV, 3GPP, M4V)
  • 📦 数据文件 - 6 种格式(JSON, JSONL, CSV, TSV, Parquet, Avro)
  • 🗜️ 压缩文件 - 5 种格式(ZIP, RAR, 7Z, TAR, GZ)
  • 🔧 配置文件 - 5 种格式(YAML, TOML, INI, ENV, Properties)
  • 📚 电子书 - 2 种格式(EPUB, MOBI)

完整列表和使用示例请查看 支持的文件类型清单

图片生成

curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-3-pro-preview",
    "messages": [
      {"role": "user", "content": "画一只可爱的猫咪"}
    ]
  }'

图生图(Image-to-Image)

curl -X POST http://localhost:7860/v1/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "model": "gemini-3-pro-preview",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "将这张图片改成水彩画风格"},
          {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,<base64_encoded_image>"}}
        ]
      }
    ]
  }'

❓ 常见问题

1. 如何在线编辑账户配置?

访问管理面板 /{PATH_PREFIX}?key=YOUR_ADMIN_KEY,点击"编辑配置"按钮:

  • ✅ 实时编辑 JSON 格式配置
  • ✅ 保存后立即生效,无需重启
  • ✅ 配置保存到 accounts.json 文件
  • ⚠️ 重启后从环境变量 ACCOUNTS_CONFIG 重新加载

建议:在线修改后,同步更新环境变量 ACCOUNTS_CONFIG,避免重启后配置丢失。

2. 账户熔断后如何恢复?

账户连续失败3次后会自动熔断(标记为不可用):

  • 429限流错误:冷却10分钟后自动恢复(可通过 RATE_LIMIT_COOLDOWN_SECONDS 配置)
  • 🔄 普通错误:永久禁用,需在管理面板手动点击"启用"按钮恢复
  • 成功后:失败计数重置为0,账户恢复正常

可在管理面板实时查看账户状态和失败计数。

3. 账户禁用功能有哪些?

管理面板提供完整的账户禁用管理功能,不同禁用状态有不同的恢复方式:

📋 账户状态说明

状态 显示 颜色 自动恢复 恢复方式 倒计时
正常 正常/即将过期 绿色/橙色 - -
过期禁用 过期禁用 灰色 修改过期时间
手动禁用 手动禁用 灰色 点击"启用"按钮
错误禁用 错误禁用 红色 点击"启用"按钮
429限流 429限流 橙色 ✅ 10分钟 自动恢复或点击"启用"

⚙️ 功能说明

  1. 账户过期自动禁用

    • 在账户配置中设置 expires_at 字段(格式:YYYY-MM-DD HH:MM:SS
    • 过期后账户自动禁用,不参与轮询选择
    • 页面显示灰色半透明卡片,仅保留"删除"按钮
    • 需要修改过期时间才能重新启用
  2. 手动禁用/启用

    • 管理面板每个账户卡片都有"禁用"按钮
    • 点击后立即禁用,不参与轮询选择
    • 显示灰色半透明卡片,提供"启用"+"删除"按钮
    • 点击"启用"按钮即可恢复
  3. 错误自动禁用(永久)

    • 账户连续失败3次触发(非429错误)
    • 自动标记为不可用,永久禁用
    • 显示红色半透明卡片,提供"启用"+"删除"按钮
    • 需要手动点击"启用"按钮恢复
  4. 429限流自动禁用(临时)

    • 账户连续遇到429错误3次触发
    • 自动冷却10分钟(可配置 RATE_LIMIT_COOLDOWN_SECONDS
    • 显示橙色卡片,带倒计时显示(如:567秒 (429限流)
    • 冷却期过后自动恢复,或手动点击"启用"立即恢复

💡 使用建议

  • 临时维护:使用"手动禁用"功能暂时停用账户
  • 账户轮换:设置过期时间,到期自动禁用
  • 故障排查:错误禁用的账户需检查后再手动启用
  • 429限流:耐心等待10分钟自动恢复,或检查请求频率

4. 账户对话次数统计如何工作?

系统自动统计每个账户的累计对话次数,无需手动操作。

📊 统计说明

  • 自动计数:每次聊天请求成功后自动 +1
  • 持久化保存:保存到 data/stats.json 文件,重启不丢失
  • 实时显示:管理面板账户卡片实时显示累计次数
  • 数据位置data/stats.jsonaccount_conversations 字段

📈 显示位置

管理面板账户卡片中,"剩余时长"行下方:

过期时间: 2025-12-31 23:59:59
剩余时长: 72.5 小时
累计对话: 123 次  ← 蓝色加粗显示

💡 数据说明

  • 统计范围:仅统计成功的对话请求
  • 失败请求:不计入累计次数
  • 数据格式:{"account_id": conversation_count}
  • 重置方式:目前需要手动编辑 data/stats.json 文件

5. 图片生成后在哪里找到文件?

  • 临时存储: 图片保存在 ./data/images/,可通过 URL 访问
  • 重启后会丢失,建议使用持久化存储

6. 如何设置 BASE_URL?

自动检测(推荐):

  • 不设置 BASE_URL 环境变量
  • 系统自动从请求头检测域名

手动设置:

BASE_URL=https://your-domain.com

使用反向代理:

如果你使用自己的域名反向代理到 HuggingFace Space,可以通过以下方式配置:

Nginx 配置示例:

location / {
    proxy_pass https://your-username-space-name.hf.space;
    proxy_set_header Host your-username-space-name.hf.space;
    proxy_ssl_server_name on;
}

Deno Deploy 配置示例:

async function handler(request: Request): Promise<Response> {
  const url = new URL(request.url);
  url.host = 'your-username-space-name.hf.space';
  return fetch(new Request(url, request));
}

Deno.serve(handler);

配置反向代理后,将 BASE_URL 设置为你的自定义域名即可。

7. API_KEY 和 ADMIN_KEY 的区别?

  • API_KEY: 保护聊天接口 (/v1/chat/completions)
  • ADMIN_KEY: 保护管理面板 (//{PATH_PREFIX})

可以设置相同的值,也可以分开

8. 如何查看日志?

  • 公开日志: 访问 /public/log/html (无需密钥)
  • 管理面板: 访问 /?key=YOUR_ADMIN_KEY/{PATH_PREFIX}?key=YOUR_ADMIN_KEY

日志系统说明:

  • 内存存储最多 3000 条日志
  • 超过上限自动删除最旧的日志
  • 重启后清空(内存存储)
  • 可通过 API 手动清空日志

🔧 油猴脚本使用说明

本项目提供油猴脚本辅助获取配置参数,使用前需要配置 TamperMonkey:

TamperMonkey 设置

  1. 配置模式:改为 高级
  2. 安全设置:允许脚本访问 Cookie 改为 All

Google Chrome 额外设置

  1. 打开油猴扩展设置
  2. 启用 允许运行用户脚本
  3. 设置 有权访问的网站 权限

配置完成后即可使用脚本自动获取 secure_c_sescsesidxconfig_id 等参数。


📁 项目结构

gemini-business2api/
├── main.py                        # 主程序入口
├── core/                          # 核心模块
│   ├── __init__.py
│   ├── auth.py                    # 认证装饰器
│   └── templates.py               # HTML模板生成
├── util/                          # 工具模块
│   └── streaming_parser.py       # 流式JSON解析器
├── docs/                         # 文档目录
│   └── SUPPORTED_FILE_TYPES.md   # 支持的文件类型清单
├── data/                         # 运行时数据目录
│   ├── stats.json                # 统计数据(gitignore)
│   └── images/                   # 生成的图片(gitignore)
├── script/                       # 辅助脚本
│   ├── copy-config.js            # 油猴脚本:复制配置到剪贴板
│   └── download-config.js        # 油猴脚本:下载配置文件
├── requirements.txt               # Python依赖
├── Dockerfile                     # Docker构建文件
├── README.md                      # 项目文档
├── .env.example                   # 环境变量配置示例
└── accounts_config.example.json   # 多账户配置示例

运行时生成的文件和目录:

  • accounts.json - 账户配置持久化文件(Web编辑后保存)
  • data/stats.json - 统计数据(访问量、请求数等)
  • data/images/ - 生成的图片存储目录
    • HF Pro: /data/images(持久化,重启不丢失)
    • 其他环境: ./data/images(临时存储,重启会丢失)

日志系统:

  • 内存日志缓冲区:最多保存 3000 条日志
  • 自动淘汰机制:超过上限自动删除最旧的日志(FIFO)
  • 重启后清空:日志存储在内存中,重启后丢失
  • 内存占用:约 450KB - 750KB(非常小,不会爆炸)

🛠️ 技术栈

  • Python 3.11+
  • FastAPI - 现代Web框架
  • Uvicorn - ASGI服务器
  • httpx - HTTP客户端
  • Docker - 容器化部署

📝 License

MIT License - 查看 LICENSE 文件了解详情


🙏 致谢


⭐ Star History

Star History Chart


如果这个项目对你有帮助,请给个 ⭐ Star!