Files
llm-proxy/README.md
T
hz4th_coder 178968ba1a 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部署脚本
2026-08-28 11:41:17 +08:00

213 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 大模型API中转系统 (LLM Proxy)
> 兼容OpenAI API格式的多提供商代理系统,支持能力(Capability)路由、优先级自动切换
**版本:v2.1.0**
## 功能特点
### 🔄 多提供商支持
- 支持配置多个上游大模型提供商
- 按优先级自动选择可用提供商
- 故障自动切换到备用提供商
### 🎯 能力路由(v2.1.0 新增)
每个模型可标记**能力标签**,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次熔断,**冷却期后自动恢复**)
- 自动重试(失败切换到下一个托管同一模型的提供商,**不改变用户请求的模型**)
## 快速开始
### 安装依赖
```bash
pip install -r requirements.txt
```
### 启动服务
```bash
./start.sh # 后台启动(PID 管理)
./start.sh stop # 停止
./start.sh status # 状态
# 或前台运行
python app.py
```
### 访问地址
```
前台API: http://localhost:16003/v1/chat/completions
后台管理: http://localhost:16003/admin
```
## API 使用
### Chat Completions
```bash
curl http://localhost:16003/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "auto",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": false
}'
```
### 列出模型(含能力标签)
```bash
curl http://localhost:16003/v1/models
```
### 流式响应
```bash
curl http://localhost:16003/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"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`,运行时配置存于 `data/config.json`(可在后台修改):
```python
UPSTREAM_PROVIDERS = [
{
"name": "provider-name",
"priority": 1, # 优先级,数字越小越高
"base_url": "https://api.example.com/v1",
"api_key": "sk-xxx",
"capabilities": ["text", "vision"], # 提供商能力(新模型默认继承)
"models": [
{"name": "model-1", "capabilities": ["text"]},
{"name": "model-2", "capabilities": ["text", "vision"]},
],
"default_model": "model-1",
"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",
"qwen": "unsloth/Qwen3.8-27B-Q6_K",
"deepseek": "deepseek-ai/DeepSeek-V4-Flash",
...
}
```
## 端点
| 端点 | 方法 | 说明 |
|------|------|------|
| `/` | 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 | 后台管理 |
## 优先级与熔断机制
当使用 `model="auto"` 系列时:
1. 按配置的优先级顺序选择提供商
2. 跳过不可用/不具备对应能力的提供商
3. 请求失败自动切换到下一个托管同一模型的提供商(保持请求模型不变)
4. 连续失败3次的提供商被熔断,冷却期(默认60秒)后自动半开恢复
## 项目结构
```
llm-proxy/
├── app.py # 主程序(前台API + 后台管理,单端口)
├── start.sh # 启动/停止脚本
├── requirements.txt # 依赖
├── config/
│ └── settings.py # 默认配置(提供商/能力/别名/auto)
├── data/ # 运行时配置与数据(config.json/stats.json/chats.json
├── logs/ # 日志目录
└── templates/ # 后台管理页面
```
## License
MIT