v2.1.0: 能力路由体系 + 模型管理 + 生图/语音/视频端点 + 大量修复
- 提供商重构: Local Qwen(文本+视觉) / SiliconFlow LLM(文本) / Autodl(文本+视觉) / Autodl Image(生图) - 能力标签: text/vision/audio_out/audio_in/image_gen/video_gen,模型级可配 - AUTO配置绑定能力: auto/auto-text/auto-vision/auto-image/auto-voice-out/auto-voice-in/auto-video - 新端点: /v1/images/generations /v1/audio/speech /v1/audio/transcriptions /v1/video/generations - 模型管理页: 能力切换/增删改/设默认/别名管理 - 修复: 失败切换不再替换用户模型; 熔断冷却后自动恢复; 重试不再白等; embeddings按模型路由 - 修复: 后台模板API路径(/api/admin); 删除v1旧admin目录与双端口混乱 - 修复: run.sh硬编码路径; 死配置RETRY/LOG接线; engine_completions空body防护 - 端口: 16003(16001-16100白名单区间); debug关闭; start.sh部署脚本
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
# 大模型API中转系统
|
||||
# 大模型API中转系统 (LLM Proxy)
|
||||
|
||||
> 兼容OpenAI API格式的多提供商代理系统,支持优先级自动切换
|
||||
> 兼容OpenAI API格式的多提供商代理系统,支持能力(Capability)路由、优先级自动切换
|
||||
|
||||
**版本:v2.1.0**
|
||||
|
||||
## 功能特点
|
||||
|
||||
@@ -9,21 +11,27 @@
|
||||
- 按优先级自动选择可用提供商
|
||||
- 故障自动切换到备用提供商
|
||||
|
||||
### 📡 OpenAI API 兼容
|
||||
- 完全兼容 OpenAI API 格式
|
||||
- 支持 Chat Completions API
|
||||
- 支持 Embeddings API
|
||||
- 支持流式和非流式响应
|
||||
### 🎯 能力路由(v2.1.0 新增)
|
||||
每个模型可标记**能力标签**,AUTO配置**固定绑定一个功能类型**并自动筛选具备该能力的模型:
|
||||
|
||||
### 🎯 智能路由
|
||||
- `auto` 模型自动选择可用提供商
|
||||
| 能力 | 说明 | 端点 |
|
||||
|------|------|------|
|
||||
| `text` 文本推理 | 纯文本对话 | `/v1/chat/completions` |
|
||||
| `vision` 视觉能力 | 多模态图像理解 | `/v1/chat/completions`(消息含图片自动路由) |
|
||||
| `audio_out` 语音输出 | TTS 语音合成 | `/v1/audio/speech` |
|
||||
| `audio_in` 语音输入 | ASR 语音识别 | `/v1/audio/transcriptions` |
|
||||
| `image_gen` 图片生成 | 文生图 | `/v1/images/generations` |
|
||||
| `video_gen` 视频生成 | 文生视频 | `/v1/video/generations` |
|
||||
|
||||
### 📡 OpenAI API 兼容
|
||||
- 完全兼容 OpenAI API 格式(Chat / Embeddings / Images / Audio)
|
||||
- 支持流式和非流式响应
|
||||
- 支持模型别名映射
|
||||
- 请求参数自动适配
|
||||
|
||||
### 🛡️ 高可用
|
||||
- 自动健康检查
|
||||
- 错误计数与熔断
|
||||
- 自动重试机制
|
||||
- 错误计数与熔断(连续失败3次熔断,**冷却期后自动恢复**)
|
||||
- 自动重试(失败切换到下一个托管同一模型的提供商,**不改变用户请求的模型**)
|
||||
|
||||
## 快速开始
|
||||
|
||||
@@ -36,13 +44,18 @@ pip install -r requirements.txt
|
||||
### 启动服务
|
||||
|
||||
```bash
|
||||
./start.sh # 后台启动(PID 管理)
|
||||
./start.sh stop # 停止
|
||||
./start.sh status # 状态
|
||||
# 或前台运行
|
||||
python app.py
|
||||
```
|
||||
|
||||
### 访问地址
|
||||
|
||||
```
|
||||
http://localhost:19007
|
||||
前台API: http://localhost:16003/v1/chat/completions
|
||||
后台管理: http://localhost:16003/admin
|
||||
```
|
||||
|
||||
## API 使用
|
||||
@@ -50,9 +63,9 @@ http://localhost:19007
|
||||
### Chat Completions
|
||||
|
||||
```bash
|
||||
curl http://localhost:19007/v1/chat/completions \
|
||||
curl http://localhost:16003/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer any-key" \
|
||||
-H "Authorization: Bearer ***" \
|
||||
-d '{
|
||||
"model": "auto",
|
||||
"messages": [{"role": "user", "content": "Hello!"}],
|
||||
@@ -60,27 +73,62 @@ curl http://localhost:19007/v1/chat/completions \
|
||||
}'
|
||||
```
|
||||
|
||||
### 列出模型
|
||||
### 列出模型(含能力标签)
|
||||
|
||||
```bash
|
||||
curl http://localhost:19007/v1/models
|
||||
curl http://localhost:16003/v1/models
|
||||
```
|
||||
|
||||
### 流式响应
|
||||
|
||||
```bash
|
||||
curl http://localhost:19007/v1/chat/completions \
|
||||
curl http://localhost:16003/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model": "qwen3.5-4b",
|
||||
"messages": [{"role": "user", "content": "Hello!"}],
|
||||
"model": "auto-text",
|
||||
"messages": [{"role": "user", "content": "讲个笑话"}],
|
||||
"stream": true
|
||||
}'
|
||||
```
|
||||
|
||||
### 图片生成
|
||||
|
||||
```bash
|
||||
curl http://localhost:16003/v1/images/generations \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model": "auto-image",
|
||||
"prompt": "a cute cat, cartoon style",
|
||||
"size": "1024x1024"
|
||||
}'
|
||||
```
|
||||
|
||||
## Auto 配置(按能力固定功能)
|
||||
|
||||
每个 Auto 配置固定一个**功能类型**,调用时 `model="配置名称"` 即自动选择具备该能力的模型:
|
||||
|
||||
| 配置名称 | 功能 | 说明 |
|
||||
|----------|------|------|
|
||||
| `auto` | 文本推理 | 默认,按优先级自动选择 |
|
||||
| `auto-text` | 文本推理 | 纯文本模型 |
|
||||
| `auto-vision` | 视觉能力 | 多模态视觉模型 |
|
||||
| `auto-image` | 图片生成 | 生图模型 |
|
||||
| `auto-voice-out` | 语音输出 | TTS 模型 |
|
||||
| `auto-voice-in` | 语音输入 | ASR 模型 |
|
||||
| `auto-video` | 视频生成 | 视频模型 |
|
||||
|
||||
可在后台「Auto配置」页创建/修改,从模型管理中选择具备对应能力的模型。
|
||||
|
||||
## 模型管理
|
||||
|
||||
后台「模型管理」页:
|
||||
- 每个模型可配置能力标签(文本/视觉/语音/生图/生视频)
|
||||
- 支持添加/编辑/删除模型、设置默认模型
|
||||
- 支持模型别名管理(`qwen`→`unsloth/Qwen3.8-27B-Q6_K` 等)
|
||||
|
||||
## 配置说明
|
||||
|
||||
编辑 `config/settings.py`:
|
||||
默认配置在 `config/settings.py`,运行时配置存于 `data/config.json`(可在后台修改):
|
||||
|
||||
```python
|
||||
UPSTREAM_PROVIDERS = [
|
||||
@@ -89,20 +137,35 @@ UPSTREAM_PROVIDERS = [
|
||||
"priority": 1, # 优先级,数字越小越高
|
||||
"base_url": "https://api.example.com/v1",
|
||||
"api_key": "sk-xxx",
|
||||
"models": ["model-1", "model-2"],
|
||||
"capabilities": ["text", "vision"], # 提供商能力(新模型默认继承)
|
||||
"models": [
|
||||
{"name": "model-1", "capabilities": ["text"]},
|
||||
{"name": "model-2", "capabilities": ["text", "vision"]},
|
||||
],
|
||||
"default_model": "model-1",
|
||||
"timeout": 120,
|
||||
"timeout": 180,
|
||||
"enabled": True,
|
||||
},
|
||||
]
|
||||
```
|
||||
|
||||
### 内置提供商
|
||||
|
||||
| 提供商 | 能力 | 模型 |
|
||||
|--------|------|------|
|
||||
| Local Qwen | 文本+视觉 | `unsloth/Qwen3.8-27B-Q6_K`, `unsloth/Qwen3.8-27B-Q4_K_M` |
|
||||
| SiliconFlow LLM | 文本 | `deepseek-ai/DeepSeek-V4-Flash`, `meituan-longcat/LongCat-2.0` |
|
||||
| Autodl | 文本+视觉 | `qwen3.6-plus`, `GLM-5.3-flash` |
|
||||
| Autodl Image | 图片生成 | `Qwen-Image` |
|
||||
|
||||
### 模型别名
|
||||
|
||||
```python
|
||||
MODEL_ALIASES = {
|
||||
"auto": "auto", # 自动选择
|
||||
"gpt-4": "actual-model", # 别名映射
|
||||
"auto": "auto",
|
||||
"qwen": "unsloth/Qwen3.8-27B-Q6_K",
|
||||
"deepseek": "deepseek-ai/DeepSeek-V4-Flash",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
@@ -113,119 +176,37 @@ MODEL_ALIASES = {
|
||||
| `/` | GET | 服务信息 |
|
||||
| `/v1/chat/completions` | POST | 聊天完成 |
|
||||
| `/v1/embeddings` | POST | 文本嵌入 |
|
||||
| `/v1/images/generations` | POST | 图片生成 |
|
||||
| `/v1/audio/speech` | POST | 语音合成 |
|
||||
| `/v1/audio/transcriptions` | POST | 语音识别 |
|
||||
| `/v1/video/generations` | POST | 视频生成 |
|
||||
| `/v1/models` | GET | 模型列表 |
|
||||
| `/health` | GET | 健康检查 |
|
||||
| `/status` | GET | 详细状态 |
|
||||
| `/admin` | GET | 后台管理 |
|
||||
|
||||
## 使用示例
|
||||
|
||||
### Python (OpenAI SDK)
|
||||
|
||||
```python
|
||||
from openai import OpenAI
|
||||
|
||||
client = OpenAI(
|
||||
base_url="http://localhost:19007/v1",
|
||||
api_key="any-key"
|
||||
)
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model="auto",
|
||||
messages=[
|
||||
{"role": "user", "content": "你好!"}
|
||||
]
|
||||
)
|
||||
|
||||
print(response.choices[0].message.content)
|
||||
```
|
||||
|
||||
### 流式响应
|
||||
|
||||
```python
|
||||
stream = client.chat.completions.create(
|
||||
model="qwen3.5-4b",
|
||||
messages=[{"role": "user", "content": "讲个笑话"}],
|
||||
stream=True
|
||||
)
|
||||
|
||||
for chunk in stream:
|
||||
if chunk.choices[0].delta.content:
|
||||
print(chunk.choices[0].delta.content, end="")
|
||||
```
|
||||
|
||||
## 优先级机制
|
||||
|
||||
当使用 `model="auto"` 时:
|
||||
## 优先级与熔断机制
|
||||
|
||||
当使用 `model="auto"` 系列时:
|
||||
1. 按配置的优先级顺序选择提供商
|
||||
2. 跳过不可用的提供商
|
||||
3. 请求失败自动切换到下一个提供商
|
||||
4. 连续失败3次的提供商暂时标记为不可用
|
||||
|
||||
## 监控
|
||||
|
||||
### 健康检查
|
||||
|
||||
```bash
|
||||
curl http://localhost:19007/health
|
||||
```
|
||||
|
||||
### 详细状态
|
||||
|
||||
```bash
|
||||
curl http://localhost:19007/status
|
||||
```
|
||||
2. 跳过不可用/不具备对应能力的提供商
|
||||
3. 请求失败自动切换到下一个托管同一模型的提供商(保持请求模型不变)
|
||||
4. 连续失败3次的提供商被熔断,冷却期(默认60秒)后自动半开恢复
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
llm-proxy/
|
||||
├── app.py # 主程序
|
||||
├── app.py # 主程序(前台API + 后台管理,单端口)
|
||||
├── start.sh # 启动/停止脚本
|
||||
├── requirements.txt # 依赖
|
||||
├── config/
|
||||
│ └── settings.py # 配置
|
||||
├── logs/ # 日志目录
|
||||
└── README.md
|
||||
│ └── settings.py # 默认配置(提供商/能力/别名/auto)
|
||||
├── data/ # 运行时配置与数据(config.json/stats.json/chats.json)
|
||||
├── logs/ # 日志目录
|
||||
└── templates/ # 后台管理页面
|
||||
```
|
||||
|
||||
## 后台管理
|
||||
|
||||
后台管理系统提供可视化监控和配置查看。
|
||||
|
||||
启动后台:
|
||||
|
||||
```bash
|
||||
python admin/app.py
|
||||
```
|
||||
|
||||
后台地址: http://localhost:19008
|
||||
|
||||
### 功能模块
|
||||
|
||||
| 模块 | 功能 |
|
||||
|------|------|
|
||||
| 仪表盘 | 统计数据、提供商状态、调用流程 |
|
||||
| 提供商管理 | 查看提供商、测试连接、详情 |
|
||||
| 模型管理 | 模型别名、目标模型、提供商映射 |
|
||||
| 日志查看 | 实时日志、自动刷新 |
|
||||
| 系统配置 | 配置查看 |
|
||||
|
||||
## 版本历史
|
||||
|
||||
### v0.2.0 (2026-04-08)
|
||||
- 新增后台管理系统
|
||||
- 仪表盘统计
|
||||
- 提供商管理
|
||||
- 模型管理
|
||||
- 日志查看
|
||||
|
||||
### v0.1.0 (2026-04-08)
|
||||
- 初始版本
|
||||
- 多提供商支持
|
||||
- OpenAI API 兼容
|
||||
- 优先级自动切换
|
||||
- 流式响应支持
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
MIT
|
||||
Reference in New Issue
Block a user