File size: 7,839 Bytes
36b7c16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
# OnDemand-API-Proxy 代理服务

## 本项目仅供学习交流使用,请勿用于其他用途

一款基于 Flask 的 API 代理服务,提供兼容 OpenAI API 的接口,支持多种大型语言模型,实现多账户轮询和会话管理。

## 功能特点

- **兼容 OpenAI API**:提供标准的 `/v1/models``/v1/chat/completions` 接口
- **多模型支持**:支持 GPT-4o、Claude 3.7 Sonnet、Gemini 2.0 Flash 等多种模型
- **多轮对话**:通过会话管理保持对话上下文
- **账户轮换**:自动轮询使用多个 on-demand.io 账户,平衡负载
- **会话管理**:自动处理会话超时和重新连接
- **统计面板**:提供实时使用统计和图表展示
- **可配置的认证**:支持通过环境变量或配置文件设置 API 访问令牌
- **Docker 支持**:易于部署到 Hugging Face Spaces 或其他容器环境

## 支持的模型

服务支持以下模型(部分列表):

| API 模型名称 | 实际使用模型 |
|------------|------------|
| `gpt-4o` | predefined-openai-gpt4o |
| `gpt-4o-mini` | predefined-openai-gpt4o-mini |
| `gpt-3.5-turbo` / `gpto3-mini` | predefined-openai-gpto3-mini |
| `gpt-4-turbo` / `gpt-4.1` | predefined-openai-gpt4.1 |
| `gpt-4.1-mini` | predefined-openai-gpt4.1-mini |
| `gpt-4.1-nano` | predefined-openai-gpt4.1-nano |
| `claude-3.5-sonnet` / `claude-3.7-sonnet` | predefined-claude-3.7-sonnet |
| `claude-3-opus` | predefined-claude-3-opus |
| `claude-3-haiku` | predefined-claude-3-haiku |
| `gemini-1.5-pro` / `gemini-2.0-flash` | predefined-gemini-2.0-flash |
| `deepseek-v3` | predefined-deepseek-v3 |
| `deepseek-r1` | predefined-deepseek-r1 |

## 配置说明

### 配置文件 (config.json)

配置文件支持以下参数:

```json
{
  "api_access_token": "你的自定义访问令牌",
  "accounts": [
    {"email": "账户[email protected]", "password": "密码1"},
    {"email": "账户[email protected]", "password": "密码2"}
  ],
  "session_timeout_minutes": 30,
  "max_retries": 3,
  "retry_delay": 1,
  "request_timeout": 30,
  "stream_timeout": 120,
  "rate_limit": 60,
  "debug_mode": false
}
```

### 环境变量

所有配置也可以通过环境变量设置:

- `API_ACCESS_TOKEN`: API 访问令牌
- `ONDEMAND_ACCOUNTS`: JSON 格式的账户信息
- `SESSION_TIMEOUT_MINUTES`: 会话超时时间(分钟)
- `MAX_RETRIES`: 最大重试次数
- `RETRY_DELAY`: 重试延迟(秒)
- `REQUEST_TIMEOUT`: 请求超时(秒)
- `STREAM_TIMEOUT`: 流式请求超时(秒)
- `RATE_LIMIT`: 速率限制(每分钟请求数)
- `DEBUG_MODE`: 调试模式(true/false)

## API 接口说明

### 获取模型列表

```
GET /v1/models
```

返回支持的模型列表,格式与 OpenAI API 兼容。

### 聊天补全

```
POST /v1/chat/completions
```

**请求头:**
```
Authorization: Bearer 你的API访问令牌
Content-Type: application/json
```

**请求体:**
```json
{
  "model": "gpt-4o",
  "messages": [
    {"role": "system", "content": "你是一个有用的助手。"},
    {"role": "user", "content": "你好,请介绍一下自己。"}
  ],
  "temperature": 0.7,
  "max_tokens": 2000,
  "stream": false
}
```

**参数说明:**
- `model`: 使用的模型名称
- `messages`: 对话消息数组
- `temperature`: 温度参数(0-1)
- `max_tokens`: 最大生成令牌数
- `stream`: 是否使用流式响应
- `top_p`: 核采样参数(0-1)
- `frequency_penalty`: 频率惩罚(0-2)
- `presence_penalty`: 存在惩罚(0-2)

## 统计面板

访问根路径 `/` 可以查看使用统计面板,包括:

- 总请求数和成功率
- Token 使用统计
- 每日和每小时使用量图表
- 模型使用情况
- 最近请求历史

## 部署指南

### Hugging Face Spaces 部署(推荐)

1. **创建 Hugging Face 账户**   - 访问 [https://huggingface.co/](https://huggingface.co/) 注册账户

2. **创建 Space**   - 点击 [创建新的 Space](https://huggingface.co/new-space)
   - 填写 Space 名称
   - **重要**:选择 `Docker` 作为 Space 类型
   - 设置权限(公开或私有)

3. **上传代码**   - 将以下文件上传到你的 Space 代码仓库:
     - `app.py`(主程序)
     - `routes.py`(路由定义)
     - `config.py`(配置管理)
     - `auth.py`(认证模块)
     - `client.py`(客户端实现)
     - `utils.py`(工具函数)
     - `requirements.txt`(依赖列表)
     - `Dockerfile`(Docker 配置)
     - `templates/`(模板目录)
     - `static/`(静态资源目录)

4. **配置账户信息和 API 访问令牌**   - 进入 Space 的 "Settings" → "Repository secrets"
   - 添加 `ONDEMAND_ACCOUNTS` Secret:
     ```json
     {
       "accounts": [
         {"email": "你的邮箱[email protected]", "password": "你的密码1"},
         {"email": "你的邮箱[email protected]", "password": "你的密码2"}
       ]
     }
     ```
   - 添加 `API_ACCESS_TOKEN` Secret 设置自定义访问令牌
     - 如果不设置,将使用默认值 "sk-2api-ondemand-access-token-2025"

5. **可选配置**   - 添加其他环境变量如 `SESSION_TIMEOUT_MINUTES``RATE_LIMIT`6. **完成部署**   - Hugging Face 会自动构建 Docker 镜像并部署你的 API
   - 访问你的 Space URL(如 `https://你的用户名-你的space名称.hf.space`### 本地部署

1. **克隆代码**```bash
   git clone https://github.com/你的用户名/ondemand-api-proxy.git
   cd ondemand-api-proxy
   ```

2. **安装依赖**```bash
   pip install -r requirements.txt
   ```

3. **配置**   - 创建 `config.json` 文件:
     ```json
     {
       "api_access_token": "你的自定义访问令牌",
       "accounts": [
         {"email": "账户[email protected]", "password": "密码1"},
         {"email": "账户[email protected]", "password": "密码2"}
       ]
     }
     ```
   - 或设置环境变量

4. **启动服务**```bash
   python app.py
   ```
   
5. **访问服务**   - API 接口:`http://localhost:5000/v1/chat/completions`
   - 统计面板:`http://localhost:5000/`

### Docker 部署

```bash
# 构建镜像
docker build -t ondemand-api-proxy .

# 运行容器
docker run -p 7860:7860 \
  -e API_ACCESS_TOKEN="你的访问令牌" \
  -e ONDEMAND_ACCOUNTS='{"accounts":[{"email":"账户[email protected]","password":"密码1"}]}' \
  ondemand-api-proxy
```

## 客户端连接

### Cherry Studio 连接

1. 打开 Cherry Studio
2. 进入设置 → API 设置
3. 选择 "OpenAI API"
4. API 密钥填入你配置的 API 访问令牌
5. API 地址填入你的服务地址(如 `https://你的用户名-你的space名称.hf.space/v1`### 其他 OpenAI 兼容客户端

任何支持 OpenAI API 的客户端都可以连接到此服务,只需将 API 地址修改为你的服务地址即可。

## 故障排除

### 常见问题

1. **认证失败**   - 检查 API 访问令牌是否正确配置
   - 确认请求头中包含 `Authorization: Bearer 你的令牌`

2. **账户连接问题**   - 确认 on-demand.io 账户信息正确
   - 检查账户是否被限制或封禁

3. **模型不可用**   - 确认请求的模型名称在支持列表中
   - 检查 on-demand.io 是否支持该模型

4. **统计图表显示错误**   - 清除浏览器缓存后重试
   - 检查浏览器控制台是否有错误信息

## 安全建议

1. **永远不要**在代码中硬编码账户信息和访问令牌
2. 使用环境变量或安全的配置管理系统存储敏感信息
3. 定期更换 API 访问令牌
4. 限制 API 的访问范围,只允许受信任的客户端连接
5. 启用速率限制防止滥用

## 贡献与反馈

欢迎提交 Issue 和 Pull Request 来改进此项目。如有任何问题或建议,请随时联系。

## 许可证

本项目采用 MIT 许可证。