| | ---
|
| | title: Gemini Business2API
|
| | emoji: 💎
|
| | colorFrom: pink
|
| | colorTo: blue
|
| | sdk: docker
|
| | pinned: false
|
| | license: mit
|
| | ---
|
| |
|
| | # Gemini Business2API
|
| |
|
| | 将 Google Gemini Business API 转换为 OpenAI 兼容接口,支持多账户负载均衡。
|
| | 感谢Claude老师!
|
| |
|
| | [](https://opensource.org/licenses/MIT)
|
| | [](https://www.python.org/downloads/)
|
| |
|
| | **快速部署到 HuggingFace Spaces:**
|
| |
|
| | [](https://huggingface.co/spaces/xiaoyukkkk/gemini-business2api?duplicate=true)
|
| |
|
| | ## ✨ 功能特性
|
| |
|
| | ### 核心功能
|
| | - ✅ **OpenAI API 完全兼容** - 无缝对接现有工具
|
| | - ✅ **流式响应支持** - 实时输出
|
| | - ✅ **多模态支持** - 支持 100+ 种文件类型(图片、PDF、Office 文档、音频、视频、代码等)
|
| | - ✅ **图片生成 & 图生图** - 支持 `gemini-3-pro-preview` 模型
|
| | - ✅ **智能文件处理** - 自动识别文件类型,支持 URL 和 Base64 格式
|
| |
|
| | ### 多账户管理
|
| | - ✅ **多账户负载均衡** - 支持多账户轮询,故障自动转移
|
| | - ✅ **智能熔断机制** - 账户连续失败自动熔断,429限流10分钟后自动恢复
|
| | - ✅ **三层重试策略** - 新会话重试、请求重试、账户切换
|
| | - ✅ **智能会话复用** - 自动管理对话历史,缓存过期自动清理
|
| | - ✅ **在线配置管理** - Web界面编辑账户配置,实时生效
|
| | - ✅ **账户过期自动禁用** - 设置过期时间,过期后自动禁用不可选用
|
| | - ✅ **手动禁用/启用** - 管理面板一键禁用/启用账户
|
| | - ✅ **错误永久禁用** - 普通错误触发熔断后永久禁用,需手动启用恢复
|
| |
|
| | ### 系统功能
|
| | - ✅ **JWT自动管理** - 无需手动刷新令牌
|
| | - 📊 **可视化管理面板** - 实时监控账户状态、过期时间、失败计数、累计对话次数
|
| | - 📈 **账户使用统计** - 自动统计每个账户累计对话次数,持久化保存
|
| | - 📝 **公开日志系统** - 实时查看服务运行状态(内存最多3000条,自动淘汰)
|
| | - 🔐 **双重认证保护** - API_KEY 保护聊天接口,ADMIN_KEY 保护管理面板
|
| | - 📡 **实时状态监控** - 公开统计接口,实时查看服务状态和请求统计
|
| |
|
| | ### 性能优化
|
| | - ⚡ **异步文件 I/O** - 避免阻塞事件循环,提升并发性能
|
| | - ⚡ **HTTP 连接池优化** - 提升高并发场景下的稳定性
|
| | - ⚡ **图片并行下载** - 多图场景下显著提升响应速度
|
| | - ⚡ **智能锁优化** - 减少锁竞争,提升账户选择效率
|
| | - ⚡ **会话并发控制** - Session 级别锁,避免对话冲突
|
| |
|
| | ## 📸 功能展示
|
| |
|
| | ### 图片生成效果
|
| |
|
| | <table>
|
| | <tr>
|
| | <td><img src="https://github.com/user-attachments/assets/d6837897-63f2-4a17-ba4a-f59030e37018" alt="图片生成示例1" width="800"/></td>
|
| | <td><img src="https://github.com/user-attachments/assets/dc597631-b00b-4307-bba1-c0ed21db0e1b" alt="图片生成示例2" width="800"/></td>
|
| | </tr>
|
| | <tr>
|
| | <td><img src="https://github.com/user-attachments/assets/4e3a1ffa-dea9-4207-ac9b-bb32f8e83c6f" alt="图片生成示例3" width="800"/></td>
|
| | <td><img src="https://github.com/user-attachments/assets/53a30edd-c2ec-4cd3-a0bd-ccf68884472a" alt="图片生成示例4" width="800"/></td>
|
| | </tr>
|
| | </table>
|
| |
|
| | ### 管理面板
|
| |
|
| | <table>
|
| | <tr>
|
| | <td><img src="https://github.com/user-attachments/assets/d0548b2b-b57e-4857-8ed0-b48b4daef34f" alt="管理面板1" width="800"/></td>
|
| | <td><img src="https://github.com/user-attachments/assets/6b2aff95-e48f-412f-9e6e-2e893595b6dd" alt="管理面板2" width="800"/></td>
|
| | </tr>
|
| | </table>
|
| |
|
| | ### 日志系统
|
| |
|
| | <table>
|
| | <tr>
|
| | <td><img src="https://github.com/user-attachments/assets/4c9c38c4-6322-4057-b5f0-a10f8b82b6ae" alt="日志系统1" width="800"/></td>
|
| | <td><img src="https://github.com/user-attachments/assets/095b86d7-3924-4258-954a-85bda9e8478e" alt="日志系统2" width="800"/></td>
|
| | </tr>
|
| | </table>
|
| |
|
| | ## 🚀 快速开始
|
| |
|
| | ### 方法一: HuggingFace Spaces 部署(推荐)
|
| |
|
| | 1. Fork 本项目到你的 GitHub 账户
|
| | 2. 在 [HuggingFace Spaces](https://huggingface.co/spaces) 创建新 Space
|
| | 3. 选择 Docker SDK,关联你的 GitHub 仓库
|
| | 4. 配置环境变量(Settings → Variables and secrets):
|
| | ```bash
|
| | 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 部署
|
| |
|
| | ```bash
|
| | # 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
|
| | ```
|
| |
|
| | ### 方法三: 本地运行
|
| |
|
| | ```bash
|
| | # 1. 安装依赖
|
| | pip install -r requirements.txt
|
| |
|
| | # 2. 配置环境变量
|
| | cp .env.example .env
|
| | # 编辑 .env 文件,填入实际配置
|
| |
|
| | # 3. 启动服务
|
| | python main.py
|
| | ```
|
| |
|
| | 服务将在 `http://localhost:7860` 启动
|
| |
|
| | ## ⚙️ 配置说明
|
| |
|
| | ### 必需的环境变量
|
| |
|
| | ```bash
|
| | # 账户配置(必需)
|
| | 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.example` 和 `accounts_config.example.json` 文件
|
| |
|
| | ## 🔧 获取配置参数
|
| |
|
| | 1. 访问 [Google Gemini Business](https://business.gemini.google)
|
| | 2. 打开浏览器开发者工具 (F12)
|
| | 3. 切换到 **Application** → **Cookies**,找到:
|
| | - `__Secure-C_SES` → `secure_c_ses`
|
| | - `__Host-C_OSES` → `host_c_oses` (可选)
|
| | 4. 切换到 **Network** 标签,刷新页面
|
| | 5. 找到 `streamGenerate` 请求,查看 Payload:
|
| | - `csesidx` → `csesidx`
|
| | - `configId` → `config_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`
|
| |
|
| | ### 基本对话
|
| |
|
| | ```bash
|
| | 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+ 种文件类型。详细列表请查看 [支持的文件类型清单](docs/SUPPORTED_FILE_TYPES.md)。
|
| |
|
| | #### 图片输入
|
| |
|
| | ```bash
|
| | # 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 文档
|
| |
|
| | ```bash
|
| | 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)
|
| |
|
| | ```bash
|
| | # 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"}}
|
| | ]
|
| | }
|
| | ]
|
| | }'
|
| | ```
|
| |
|
| | #### 音频文件(语音转录)
|
| |
|
| | ```bash
|
| | 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"}}
|
| | ]
|
| | }
|
| | ]
|
| | }'
|
| | ```
|
| |
|
| | #### 视频文件(场景分析)
|
| |
|
| | ```bash
|
| | 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)
|
| |
|
| | 完整列表和使用示例请查看 [支持的文件类型清单](docs/SUPPORTED_FILE_TYPES.md)
|
| |
|
| | ### 图片生成
|
| |
|
| | ```bash
|
| | 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)
|
| |
|
| | ```bash
|
| | 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.json` → `account_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` 环境变量
|
| | - 系统自动从请求头检测域名
|
| |
|
| | **手动设置**:
|
| | ```bash
|
| | BASE_URL=https://your-domain.com
|
| | ```
|
| |
|
| | **使用反向代理**:
|
| |
|
| | 如果你使用自己的域名反向代理到 HuggingFace Space,可以通过以下方式配置:
|
| |
|
| | **Nginx 配置示例**:
|
| | ```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 配置示例**:
|
| | ```typescript
|
| | 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_ses`、`csesidx`、`config_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](LICENSE) 文件了解详情
|
| |
|
| | ---
|
| |
|
| | ## 🙏 致谢
|
| |
|
| | * 源项目:[F佬 Linux.do 讨论](https://linux.do/t/topic/1225645)
|
| | * 源项目:[heixxin/gemini](https://huggingface.co/spaces/heixxin/gemini/tree/main) | [Linux.do 讨论](https://linux.do/t/topic/1226413)
|
| | * 绘图参考:[Gemini-Link-System](https://github.com/qxd-ljy/Gemini-Link-System) | [Linux.do 讨论](https://linux.do/t/topic/1234363)
|
| | * Gemini Business 2API Helper 参考:[Linux.do 讨论](https://linux.do/t/topic/1231008)
|
| |
|
| | ---
|
| |
|
| | ## ⭐ Star History
|
| |
|
| | [](https://www.star-history.com/#Dreamy-rain/gemini-business2api&type=date&legend=top-left)
|
| |
|
| | ---
|
| |
|
| | **如果这个项目对你有帮助,请给个 ⭐ Star!**
|
| |
|