Spaces:
Running
Running
Upload README.md
Browse files
README.md
CHANGED
|
@@ -22,15 +22,24 @@ license: mit
|
|
| 22 |
|
| 23 |
## ✨ 功能特性
|
| 24 |
|
|
|
|
| 25 |
- ✅ **OpenAI API 完全兼容** - 无缝对接现有工具
|
| 26 |
- ✅ **流式响应支持** - 实时输出
|
| 27 |
- ✅ **多模态支持** - 文本 + 图片输入
|
| 28 |
- ✅ **图片生成 & 图生图** - 支持 `gemini-3-pro-preview` 模型
|
|
|
|
|
|
|
| 29 |
- ✅ **多账户负载均衡** - 支持多账户轮询,故障自动转移
|
| 30 |
-
- ✅
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
- ✅ **JWT自动管理** - 无需手动刷新令牌
|
| 32 |
-
- 📊 **可视化管理面板** -
|
| 33 |
-
- 📝 **公开日志系统** -
|
|
|
|
| 34 |
|
| 35 |
## 📸 功能展示
|
| 36 |
|
|
@@ -147,6 +156,26 @@ PROXY=http://127.0.0.1:7890
|
|
| 147 |
LOGO_URL=https://your-domain.com/logo.png
|
| 148 |
CHAT_URL=https://your-chat-app.com
|
| 149 |
MODEL_NAME=gemini-business
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
```
|
| 151 |
|
| 152 |
### 多账户配置示例
|
|
@@ -206,12 +235,19 @@ ACCOUNTS_CONFIG='[
|
|
| 206 |
|
| 207 |
### 访问端点
|
| 208 |
|
| 209 |
-
| 端点
|
| 210 |
-
|
|
| 211 |
-
| `/{PATH_PREFIX}/v1/models`
|
| 212 |
-
| `/{PATH_PREFIX}/
|
| 213 |
-
| `/
|
| 214 |
-
| `/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
|
| 216 |
**访问示例**:
|
| 217 |
|
|
@@ -296,12 +332,31 @@ curl -X POST http://localhost:7860/v1/v1/chat/completions \
|
|
| 296 |
|
| 297 |
## ❓ 常见问题
|
| 298 |
|
| 299 |
-
### 1.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 300 |
|
| 301 |
- **临时存储**: 图片保存在 `./images/`,可通过 URL 访问
|
| 302 |
- **重启后会丢失**,建议使用持久化存储
|
| 303 |
|
| 304 |
-
###
|
| 305 |
|
| 306 |
**自动检测**(推荐):
|
| 307 |
- 不设置 `BASE_URL` 环境变量
|
|
@@ -338,18 +393,24 @@ Deno.serve(handler);
|
|
| 338 |
|
| 339 |
配置反向代理后,将 `BASE_URL` 设置为你的自定义域名即可。
|
| 340 |
|
| 341 |
-
###
|
| 342 |
|
| 343 |
- **API_KEY**: 保护聊天接口 (`/v1/chat/completions`)
|
| 344 |
- **ADMIN_KEY**: 保护管理面板 (`/admin`)
|
| 345 |
|
| 346 |
可以设置相同的值,也可以分开
|
| 347 |
|
| 348 |
-
###
|
| 349 |
|
| 350 |
- **公开日志**: 访问 `/public/log/html` (无需密钥)
|
| 351 |
- **管理面板**: 访问 `/admin?key=YOUR_ADMIN_KEY`
|
| 352 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 353 |
## 🔧 油猴脚本使用说明
|
| 354 |
|
| 355 |
本项目提供油猴脚本辅助获取配置参数,使用前需要配置 TamperMonkey:
|
|
@@ -373,21 +434,32 @@ Deno.serve(handler);
|
|
| 373 |
|
| 374 |
```
|
| 375 |
gemini-business2api/
|
| 376 |
-
├── main.py #
|
|
|
|
|
|
|
|
|
|
|
|
|
| 377 |
├── util/ # 工具模块
|
| 378 |
-
│ └── streaming_parser.py
|
| 379 |
├── requirements.txt # Python依赖
|
| 380 |
-
├── Dockerfile # Docker
|
| 381 |
├── README.md # 项目文档
|
| 382 |
├── .env.example # 环境变量配置示例
|
| 383 |
-
|
| 384 |
-
└── .gitignore # Git忽略文件
|
| 385 |
```
|
| 386 |
|
| 387 |
-
|
| 388 |
-
- `
|
| 389 |
-
- `
|
| 390 |
-
- `
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 391 |
|
| 392 |
## 🛠️ 技术栈
|
| 393 |
|
|
|
|
| 22 |
|
| 23 |
## ✨ 功能特性
|
| 24 |
|
| 25 |
+
### 核心功能
|
| 26 |
- ✅ **OpenAI API 完全兼容** - 无缝对接现有工具
|
| 27 |
- ✅ **流式响应支持** - 实时输出
|
| 28 |
- ✅ **多模态支持** - 文本 + 图片输入
|
| 29 |
- ✅ **图片生成 & 图生图** - 支持 `gemini-3-pro-preview` 模型
|
| 30 |
+
|
| 31 |
+
### 多账户管理
|
| 32 |
- ✅ **多账户负载均衡** - 支持多账户轮询,故障自动转移
|
| 33 |
+
- ✅ **智能熔断机制** - 账户连续失败自动熔断并冷却恢复
|
| 34 |
+
- ✅ **三层重试策略** - 新会话重试、请求重试、账户切换
|
| 35 |
+
- ✅ **智能会话复用** - 自动管理对话历史,缓存过期自动清理
|
| 36 |
+
- ✅ **在线配置管理** - Web界面编辑账户配置,实时生效
|
| 37 |
+
|
| 38 |
+
### 系统功能
|
| 39 |
- ✅ **JWT自动管理** - 无需手动刷新令牌
|
| 40 |
+
- 📊 **可视化管理面板** - 实时监控账户状态、过期时间、失败计数
|
| 41 |
+
- 📝 **公开日志系统** - 实时查看服务运行状态(内存最多3000条,自动淘汰)
|
| 42 |
+
- 🔐 **双重认证保护** - API_KEY 保护聊天接口,ADMIN_KEY 保护管理面板
|
| 43 |
|
| 44 |
## 📸 功能展示
|
| 45 |
|
|
|
|
| 156 |
LOGO_URL=https://your-domain.com/logo.png
|
| 157 |
CHAT_URL=https://your-chat-app.com
|
| 158 |
MODEL_NAME=gemini-business
|
| 159 |
+
|
| 160 |
+
# 重试配置(可选)
|
| 161 |
+
MAX_NEW_SESSION_TRIES=5 # 新会话尝试账户数(默认5)
|
| 162 |
+
MAX_REQUEST_RETRIES=3 # 请求失败重试次数(默认3)
|
| 163 |
+
MAX_ACCOUNT_SWITCH_TRIES=5 # 每次重试查找账户次数(默认5)
|
| 164 |
+
ACCOUNT_FAILURE_THRESHOLD=3 # 账户失败阈值,达到后熔断(默认3)
|
| 165 |
+
ACCOUNT_COOLDOWN_SECONDS=300 # 账户冷却时间,秒(默认300=5分钟)
|
| 166 |
+
SESSION_CACHE_TTL_SECONDS=3600 # 会话缓存过期时间,秒(默认3600=1小时)
|
| 167 |
+
```
|
| 168 |
+
|
| 169 |
+
### 重试机制说明
|
| 170 |
+
|
| 171 |
+
系统提供三层重试保护:
|
| 172 |
+
|
| 173 |
+
1. **新会话创建重试**:创建新对话时,如果账户失败,自动切换到其他账户(最多尝试5个)
|
| 174 |
+
2. **请求失败重试**:对话过程中出错,自动重试并切换账户(最多重试3次)
|
| 175 |
+
3. **智能熔断机制**:
|
| 176 |
+
- 账户连续失败3次 → 自动标记为不可用
|
| 177 |
+
- 冷却5分钟后自动恢复
|
| 178 |
+
- JWT失败和请求失败都会触发熔断
|
| 179 |
```
|
| 180 |
|
| 181 |
### 多账户配置示例
|
|
|
|
| 235 |
|
| 236 |
### 访问端点
|
| 237 |
|
| 238 |
+
| 端点 | 方法 | 说明 |
|
| 239 |
+
| -------------------------------------- | ------ | --------------------------- |
|
| 240 |
+
| `/{PATH_PREFIX}/v1/models` | GET | 获取模型列表 |
|
| 241 |
+
| `/{PATH_PREFIX}/v1/chat/completions` | POST | 聊天接口(需API_KEY) |
|
| 242 |
+
| `/{PATH_PREFIX}/admin` | GET | 管理面板(需ADMIN_KEY) |
|
| 243 |
+
| `/{PATH_PREFIX}/admin/accounts` | GET | 获取账户状态(需ADMIN_KEY) |
|
| 244 |
+
| `/{PATH_PREFIX}/admin/accounts-config` | GET | 获取账户配置(需ADMIN_KEY) |
|
| 245 |
+
| `/{PATH_PREFIX}/admin/accounts-config` | PUT | 更新账户配置(需ADMIN_KEY) |
|
| 246 |
+
| `/{PATH_PREFIX}/admin/accounts/{id}` | DELETE | 删除指定账户(需ADMIN_KEY) |
|
| 247 |
+
| `/{PATH_PREFIX}/admin/log` | GET | 获取系统日志(需ADMIN_KEY) |
|
| 248 |
+
| `/{PATH_PREFIX}/admin/log` | DELETE | 清空系统日志(需ADMIN_KEY) |
|
| 249 |
+
| `/public/log/html` | GET | 公开日志页面(无需认证) |
|
| 250 |
+
| `/public/stats` | GET | 公开统计信息(无需认证) |
|
| 251 |
|
| 252 |
**访问示例**:
|
| 253 |
|
|
|
|
| 332 |
|
| 333 |
## ❓ 常见问题
|
| 334 |
|
| 335 |
+
### 1. 如何在线编辑账户配置?
|
| 336 |
+
|
| 337 |
+
访问管理面板 `/{PATH_PREFIX}/admin?key=YOUR_ADMIN_KEY`,点击"编辑配置"按钮:
|
| 338 |
+
- ✅ 实时编辑 JSON 格式配置
|
| 339 |
+
- ✅ 保存后立即生效,无需重启
|
| 340 |
+
- ✅ 配置保存到 `accounts.json` 文件
|
| 341 |
+
- ⚠️ 重启后从环境变量 `ACCOUNTS_CONFIG` 重新加载
|
| 342 |
+
|
| 343 |
+
**建议**:在线修改后,同步更新环境变量 `ACCOUNTS_CONFIG`,避免重启后配置丢失。
|
| 344 |
+
|
| 345 |
+
### 2. 账户熔断后如何恢复?
|
| 346 |
+
|
| 347 |
+
账户连续失败3次后会自动熔断(标记为不可用):
|
| 348 |
+
- ⏰ 冷却期:5分钟(可通过 `ACCOUNT_COOLDOWN_SECONDS` 配置)
|
| 349 |
+
- 🔄 自动恢复:冷却期过后自动重新尝试
|
| 350 |
+
- ✅ 成功后:失败计数重置为0,账���恢复正常
|
| 351 |
+
|
| 352 |
+
可在管理面板实时查看账户状态和失败计数。
|
| 353 |
+
|
| 354 |
+
### 3. 图片生成后在哪里找到文件?
|
| 355 |
|
| 356 |
- **临时存储**: 图片保存在 `./images/`,可通过 URL 访问
|
| 357 |
- **重启后会丢失**,建议使用持久化存储
|
| 358 |
|
| 359 |
+
### 4. 如何设置 BASE_URL?
|
| 360 |
|
| 361 |
**自动检测**(推荐):
|
| 362 |
- 不设置 `BASE_URL` 环境变量
|
|
|
|
| 393 |
|
| 394 |
配置反向代理后,将 `BASE_URL` 设置为你的自定义域名即可。
|
| 395 |
|
| 396 |
+
### 5. API_KEY 和 ADMIN_KEY 的区别?
|
| 397 |
|
| 398 |
- **API_KEY**: 保护聊天接口 (`/v1/chat/completions`)
|
| 399 |
- **ADMIN_KEY**: 保护管理面板 (`/admin`)
|
| 400 |
|
| 401 |
可以设置相同的值,也可以分开
|
| 402 |
|
| 403 |
+
### 6. 如何查看日志?
|
| 404 |
|
| 405 |
- **公开日志**: 访问 `/public/log/html` (无需密钥)
|
| 406 |
- **管理面板**: 访问 `/admin?key=YOUR_ADMIN_KEY`
|
| 407 |
|
| 408 |
+
日志系统说明:
|
| 409 |
+
- 内存存储最多 3000 条日志
|
| 410 |
+
- 超过上限自动删除最旧的日志
|
| 411 |
+
- 重启后清空(内存存储)
|
| 412 |
+
- 可通过 API 手动清空日志
|
| 413 |
+
|
| 414 |
## 🔧 油猴脚本使用说明
|
| 415 |
|
| 416 |
本项目提供油猴脚本辅助获取配置参数,使用前需要配置 TamperMonkey:
|
|
|
|
| 434 |
|
| 435 |
```
|
| 436 |
gemini-business2api/
|
| 437 |
+
├── main.py # 主程序入口
|
| 438 |
+
├── core/ # 核心模块
|
| 439 |
+
│ ├── __init__.py
|
| 440 |
+
│ ├── auth.py # 认证装饰器
|
| 441 |
+
│ └── templates.py # HTML模板生成
|
| 442 |
├── util/ # 工具模块
|
| 443 |
+
│ └── streaming_parser.py # 流式JSON解析器
|
| 444 |
├── requirements.txt # Python依赖
|
| 445 |
+
├── Dockerfile # Docker构建文件
|
| 446 |
├── README.md # 项目文档
|
| 447 |
├── .env.example # 环境变量配置示例
|
| 448 |
+
└── accounts_config.example.json # 多账户配置示例
|
|
|
|
| 449 |
```
|
| 450 |
|
| 451 |
+
**运行时生成的文件和目录**:
|
| 452 |
+
- `accounts.json` - 账户配置持久化文件(Web编辑后保存)
|
| 453 |
+
- `stats.json` - 统计数据(访问量、请求数等)
|
| 454 |
+
- `images/` - 生成的图片存储目录
|
| 455 |
+
- HF Pro: `/data/images`(持久化,重启不丢失)
|
| 456 |
+
- 其他环境: `./images`(临时存储,重启会丢失)
|
| 457 |
+
|
| 458 |
+
**日志系统**:
|
| 459 |
+
- 内存日志缓冲区:最多保存 3000 条日志
|
| 460 |
+
- 自动淘汰机制:超过上限自动删除最旧的日志(FIFO)
|
| 461 |
+
- 重启后清空:日志存储在内存中,重启后丢失
|
| 462 |
+
- 内存占用:约 450KB - 750KB(非常小,不会爆炸)
|
| 463 |
|
| 464 |
## 🛠️ 技术栈
|
| 465 |
|