Update README.md
Browse files
README.md
CHANGED
@@ -1,273 +1,11 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
-
|
12 |
-
- **账户轮换**:自动轮询使用多个 on-demand.io 账户,平衡负载
|
13 |
-
- **会话管理**:自动处理会话超时和重新连接
|
14 |
-
- **统计面板**:提供实时使用统计和图表展示
|
15 |
-
- **可配置的认证**:支持通过环境变量或配置文件设置 API 访问令牌
|
16 |
-
- **Docker 支持**:易于部署到 Hugging Face Spaces 或其他容器环境
|
17 |
-
|
18 |
-
## 支持的模型
|
19 |
-
|
20 |
-
服务支持以下模型(部分列表):
|
21 |
-
|
22 |
-
| API 模型名称 | 实际使用模型 |
|
23 |
-
|------------|------------|
|
24 |
-
| `gpt-4o` | predefined-openai-gpt4o |
|
25 |
-
| `gpt-4o-mini` | predefined-openai-gpt4o-mini |
|
26 |
-
| `gpt-3.5-turbo` / `gpto3-mini` | predefined-openai-gpto3-mini |
|
27 |
-
| `gpt-4-turbo` / `gpt-4.1` | predefined-openai-gpt4.1 |
|
28 |
-
| `gpt-4.1-mini` | predefined-openai-gpt4.1-mini |
|
29 |
-
| `gpt-4.1-nano` | predefined-openai-gpt4.1-nano |
|
30 |
-
| `claude-3.5-sonnet` / `claude-3.7-sonnet` | predefined-claude-3.7-sonnet |
|
31 |
-
| `claude-3-opus` | predefined-claude-3-opus |
|
32 |
-
| `claude-3-haiku` | predefined-claude-3-haiku |
|
33 |
-
| `gemini-1.5-pro` / `gemini-2.0-flash` | predefined-gemini-2.0-flash |
|
34 |
-
| `deepseek-v3` | predefined-deepseek-v3 |
|
35 |
-
| `deepseek-r1` | predefined-deepseek-r1 |
|
36 |
-
|
37 |
-
## 配置说明
|
38 |
-
|
39 |
-
### 配置文件 (config.json)
|
40 |
-
|
41 |
-
配置文件支持以下参数:
|
42 |
-
|
43 |
-
```json
|
44 |
-
{
|
45 |
-
"api_access_token": "你的自定义访问令牌",
|
46 |
-
"accounts": [
|
47 |
-
{"email": "账户[email protected]", "password": "密码1"},
|
48 |
-
{"email": "账户[email protected]", "password": "密码2"}
|
49 |
-
],
|
50 |
-
"session_timeout_minutes": 30,
|
51 |
-
"max_retries": 3,
|
52 |
-
"retry_delay": 1,
|
53 |
-
"request_timeout": 30,
|
54 |
-
"stream_timeout": 120,
|
55 |
-
"rate_limit": 60,
|
56 |
-
"debug_mode": false
|
57 |
-
}
|
58 |
-
```
|
59 |
-
|
60 |
-
### 环境变量
|
61 |
-
|
62 |
-
所有配置也可以通过环境变量设置:
|
63 |
-
|
64 |
-
- `API_ACCESS_TOKEN`: API 访问令牌
|
65 |
-
- `ONDEMAND_ACCOUNTS`: JSON 格式的账户信息
|
66 |
-
- `SESSION_TIMEOUT_MINUTES`: 会话超时时间(分钟)
|
67 |
-
- `MAX_RETRIES`: 最大重试次数
|
68 |
-
- `RETRY_DELAY`: 重试延迟(秒)
|
69 |
-
- `REQUEST_TIMEOUT`: 请求超时(秒)
|
70 |
-
- `STREAM_TIMEOUT`: 流式请求超时(秒)
|
71 |
-
- `RATE_LIMIT`: 速率限制(每分钟请求数)
|
72 |
-
- `DEBUG_MODE`: 调试模式(true/false)
|
73 |
-
|
74 |
-
## API 接口说明
|
75 |
-
|
76 |
-
### 获取模型列表
|
77 |
-
|
78 |
-
```
|
79 |
-
GET /v1/models
|
80 |
-
```
|
81 |
-
|
82 |
-
返回支持的模型列表,格式与 OpenAI API 兼容。
|
83 |
-
|
84 |
-
### 聊天补全
|
85 |
-
|
86 |
-
```
|
87 |
-
POST /v1/chat/completions
|
88 |
-
```
|
89 |
-
|
90 |
-
**请求头:**
|
91 |
-
```
|
92 |
-
Authorization: Bearer 你的API访问令牌
|
93 |
-
Content-Type: application/json
|
94 |
-
```
|
95 |
-
|
96 |
-
**请求体:**
|
97 |
-
```json
|
98 |
-
{
|
99 |
-
"model": "gpt-4o",
|
100 |
-
"messages": [
|
101 |
-
{"role": "system", "content": "你是一个有用的助手。"},
|
102 |
-
{"role": "user", "content": "你好,请介绍一下自己。"}
|
103 |
-
],
|
104 |
-
"temperature": 0.7,
|
105 |
-
"max_tokens": 2000,
|
106 |
-
"stream": false
|
107 |
-
}
|
108 |
-
```
|
109 |
-
|
110 |
-
**参数说明:**
|
111 |
-
- `model`: 使用的模型名称
|
112 |
-
- `messages`: 对话消息数组
|
113 |
-
- `temperature`: 温度参数(0-1)
|
114 |
-
- `max_tokens`: 最大生成令牌数
|
115 |
-
- `stream`: 是否使用流式响应
|
116 |
-
- `top_p`: 核采样参数(0-1)
|
117 |
-
- `frequency_penalty`: 频率惩罚(0-2)
|
118 |
-
- `presence_penalty`: 存在惩罚(0-2)
|
119 |
-
|
120 |
-
## 统计面板
|
121 |
-
|
122 |
-
访问根路径 `/` 可以查看使用统计面板,包括:
|
123 |
-
|
124 |
-
- 总请求数和成功率
|
125 |
-
- Token 使用统计
|
126 |
-
- 每日和每小时使用量图表
|
127 |
-
- 模型使用情况
|
128 |
-
- 最近请求历史
|
129 |
-
|
130 |
-
## 部署指南
|
131 |
-
|
132 |
-
### Hugging Face Spaces 部署(推荐)
|
133 |
-
|
134 |
-
1. **创建 Hugging Face 账户**:
|
135 |
-
- 访问 [https://huggingface.co/](https://huggingface.co/) 注册账户
|
136 |
-
|
137 |
-
2. **创建 Space**:
|
138 |
-
- 点击 [创建新的 Space](https://huggingface.co/new-space)
|
139 |
-
- 填写 Space 名称
|
140 |
-
- **重要**:选择 `Docker` 作为 Space 类型
|
141 |
-
- 设置权限(公开或私有)
|
142 |
-
|
143 |
-
3. **上传代码**:
|
144 |
-
- 将以下文件上传到你的 Space 代码仓库:
|
145 |
-
- `app.py`(主程序)
|
146 |
-
- `routes.py`(路由定义)
|
147 |
-
- `config.py`(配置管理)
|
148 |
-
- `auth.py`(认证模块)
|
149 |
-
- `client.py`(客户端实现)
|
150 |
-
- `utils.py`(工具函数)
|
151 |
-
- `requirements.txt`(依赖列表)
|
152 |
-
- `Dockerfile`(Docker 配置)
|
153 |
-
- `templates/`(模板目录)
|
154 |
-
- `static/`(静态资源目录)
|
155 |
-
|
156 |
-
4. **配置账户信息和 API 访问令牌**:
|
157 |
-
- 进入 Space 的 "Settings" → "Repository secrets"
|
158 |
-
- 添加 `ONDEMAND_ACCOUNTS` Secret:
|
159 |
-
```json
|
160 |
-
{
|
161 |
-
"accounts": [
|
162 |
-
{"email": "你的邮箱[email protected]", "password": "你的密码1"},
|
163 |
-
{"email": "你的邮箱[email protected]", "password": "你的密码2"}
|
164 |
-
]
|
165 |
-
}
|
166 |
-
```
|
167 |
-
- 添加 `API_ACCESS_TOKEN` Secret 设置自定义访问令牌
|
168 |
-
- 如果不设置,将使用默认值 "sk-2api-ondemand-access-token-2025"
|
169 |
-
|
170 |
-
5. **可选配置**:
|
171 |
-
- 添加其他环境变量如 `SESSION_TIMEOUT_MINUTES`、`RATE_LIMIT` 等
|
172 |
-
|
173 |
-
6. **完成部署**:
|
174 |
-
- Hugging Face 会自动构建 Docker 镜像并部署你的 API
|
175 |
-
- 访问你的 Space URL(如 `https://你的用户名-你的space名称.hf.space`)
|
176 |
-
|
177 |
-
### 本地部署
|
178 |
-
|
179 |
-
1. **克隆代码**:
|
180 |
-
```bash
|
181 |
-
git clone https://github.com/你的用户名/ondemand-api-proxy.git
|
182 |
-
cd ondemand-api-proxy
|
183 |
-
```
|
184 |
-
|
185 |
-
2. **安装依赖**:
|
186 |
-
```bash
|
187 |
-
pip install -r requirements.txt
|
188 |
-
```
|
189 |
-
|
190 |
-
3. **配置**:
|
191 |
-
- 创建 `config.json` 文件:
|
192 |
-
```json
|
193 |
-
{
|
194 |
-
"api_access_token": "你的自定义访问令牌",
|
195 |
-
"accounts": [
|
196 |
-
{"email": "账户[email protected]", "password": "密码1"},
|
197 |
-
{"email": "账户[email protected]", "password": "密码2"}
|
198 |
-
]
|
199 |
-
}
|
200 |
-
```
|
201 |
-
- 或设置环境变量
|
202 |
-
|
203 |
-
4. **启动服务**:
|
204 |
-
```bash
|
205 |
-
python app.py
|
206 |
-
```
|
207 |
-
|
208 |
-
5. **访问服务**:
|
209 |
-
- API 接口:`http://localhost:5000/v1/chat/completions`
|
210 |
-
- 统计面板:`http://localhost:5000/`
|
211 |
-
|
212 |
-
### Docker 部署
|
213 |
-
|
214 |
-
```bash
|
215 |
-
# 构建镜像
|
216 |
-
docker build -t ondemand-api-proxy .
|
217 |
-
|
218 |
-
# 运行容器
|
219 |
-
docker run -p 7860:7860 \
|
220 |
-
-e API_ACCESS_TOKEN="你的访问令牌" \
|
221 |
-
-e ONDEMAND_ACCOUNTS='{"accounts":[{"email":"账户[email protected]","password":"密码1"}]}' \
|
222 |
-
ondemand-api-proxy
|
223 |
-
```
|
224 |
-
|
225 |
-
## 客户端连接
|
226 |
-
|
227 |
-
### Cherry Studio 连接
|
228 |
-
|
229 |
-
1. 打开 Cherry Studio
|
230 |
-
2. 进入设置 → API 设置
|
231 |
-
3. 选择 "OpenAI API"
|
232 |
-
4. API 密钥填入你配置的 API 访问令牌
|
233 |
-
5. API 地址填入你的服务地址(如 `https://你的用户名-你的space名称.hf.space/v1`)
|
234 |
-
|
235 |
-
### 其他 OpenAI 兼容客户端
|
236 |
-
|
237 |
-
任何支持 OpenAI API 的客户端都可以连接到此服务,只需将 API 地址修改为你的服务地址即可。
|
238 |
-
|
239 |
-
## 故障排除
|
240 |
-
|
241 |
-
### 常见问题
|
242 |
-
|
243 |
-
1. **认证失败**:
|
244 |
-
- 检查 API 访问令牌是否正确配置
|
245 |
-
- 确认请求头中包含 `Authorization: Bearer 你的令牌`
|
246 |
-
|
247 |
-
2. **账户连接问题**:
|
248 |
-
- 确认 on-demand.io 账户信息正确
|
249 |
-
- 检查账户是否被限制或封禁
|
250 |
-
|
251 |
-
3. **模型不可用**:
|
252 |
-
- 确认请求的模型名称在支持列表中
|
253 |
-
- 检查 on-demand.io 是否支持该模型
|
254 |
-
|
255 |
-
4. **统计图表显示错误**:
|
256 |
-
- 清除浏览器缓存后重试
|
257 |
-
- 检查浏览器控制台是否有错误信息
|
258 |
-
|
259 |
-
## 安全建议
|
260 |
-
|
261 |
-
1. **永远不要**在代码中硬编码账户信息和访问令牌
|
262 |
-
2. 使用环境变量或安全的配置管理系统存储敏感信息
|
263 |
-
3. 定期更换 API 访问令牌
|
264 |
-
4. 限制 API 的访问范围,只允许受信任的客户端连接
|
265 |
-
5. 启用速率限制防止滥用
|
266 |
-
|
267 |
-
## 贡献与反馈
|
268 |
-
|
269 |
-
欢迎提交 Issue 和 Pull Request 来改进此项目。如有任何问题或建议,请随时联系。
|
270 |
-
|
271 |
-
## 许可证
|
272 |
-
|
273 |
-
本项目采用 MIT 许可证。
|
|
|
1 |
+
---
|
2 |
+
title: Mamm
|
3 |
+
emoji: 💻
|
4 |
+
colorFrom: blue
|
5 |
+
colorTo: gray
|
6 |
+
sdk: docker
|
7 |
+
pinned: false
|
8 |
+
app_port: 3000
|
9 |
+
---
|
10 |
+
|
11 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|