# 大模型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