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)
配置文件支持以下参数:
{
"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
请求体:
{
"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 部署(推荐)
创建 Hugging Face 账户:
创建 Space:
- 点击 创建新的 Space
- 填写 Space 名称
- 重要:选择
Docker
作为 Space 类型 - 设置权限(公开或私有)
上传代码:
- 将以下文件上传到你的 Space 代码仓库:
app.py
(主程序)routes.py
(路由定义)config.py
(配置管理)auth.py
(认证模块)client.py
(客户端实现)utils.py
(工具函数)requirements.txt
(依赖列表)Dockerfile
(Docker 配置)templates/
(模板目录)static/
(静态资源目录)
- 将以下文件上传到你的 Space 代码仓库:
配置账户信息和 API 访问令牌:
- 进入 Space 的 "Settings" → "Repository secrets"
- 添加
ONDEMAND_ACCOUNTS
Secret:{ "accounts": [ {"email": "你的邮箱[email protected]", "password": "你的密码1"}, {"email": "你的邮箱[email protected]", "password": "你的密码2"} ] }
- 添加
API_ACCESS_TOKEN
Secret 设置自定义访问令牌- 如果不设置,将使用默认值 "sk-2api-ondemand-access-token-2025"
可选配置:
- 添加其他环境变量如
SESSION_TIMEOUT_MINUTES
、RATE_LIMIT
等
- 添加其他环境变量如
完成部署:
- Hugging Face 会自动构建 Docker 镜像并部署你的 API
- 访问你的 Space URL(如
https://你的用户名-你的space名称.hf.space
)
本地部署
克隆代码:
git clone https://github.com/你的用户名/ondemand-api-proxy.git cd ondemand-api-proxy
安装依赖:
pip install -r requirements.txt
配置:
- 创建
config.json
文件:{ "api_access_token": "你的自定义访问令牌", "accounts": [ {"email": "账户[email protected]", "password": "密码1"}, {"email": "账户[email protected]", "password": "密码2"} ] }
- 或设置环境变量
- 创建
启动服务:
python app.py
访问服务:
- API 接口:
http://localhost:5000/v1/chat/completions
- 统计面板:
http://localhost:5000/
- API 接口:
Docker 部署
# 构建镜像
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 连接
- 打开 Cherry Studio
- 进入设置 → API 设置
- 选择 "OpenAI API"
- API 密钥填入你配置的 API 访问令牌
- API 地址填入你的服务地址(如
https://你的用户名-你的space名称.hf.space/v1
)
其他 OpenAI 兼容客户端
任何支持 OpenAI API 的客户端都可以连接到此服务,只需将 API 地址修改为你的服务地址即可。
故障排除
常见问题
认证失败:
- 检查 API 访问令牌是否正确配置
- 确认请求头中包含
Authorization: Bearer 你的令牌
账户连接问题:
- 确认 on-demand.io 账户信息正确
- 检查账户是否被限制或封禁
模型不可用:
- 确认请求的模型名称在支持列表中
- 检查 on-demand.io 是否支持该模型
统计图表显示错误:
- 清除浏览器缓存后重试
- 检查浏览器控制台是否有错误信息
安全建议
- 永远不要在代码中硬编码账户信息和访问令牌
- 使用环境变量或安全的配置管理系统存储敏感信息
- 定期更换 API 访问令牌
- 限制 API 的访问范围,只允许受信任的客户端连接
- 启用速率限制防止滥用
贡献与反馈
欢迎提交 Issue 和 Pull Request 来改进此项目。如有任何问题或建议,请随时联系。
许可证
本项目采用 MIT 许可证。