feat: 后台管理增加提供商动态管理功能

- 新增:添加新的大模型接口提供商
- 新增:编辑已有提供商的参数(API地址、Key、模型列表等)
- 新增:删除提供商
- 新增:拖拽排序调整auto模式的优先级顺序
- 新增:启用/禁用提供商开关
- 优化:主服务动态读取配置,后台修改实时生效
This commit is contained in:
2026-04-08 18:14:09 +08:00
parent 292ff7b03e
commit 82100cdf00
5 changed files with 819 additions and 124 deletions

View File

@@ -1,12 +1,19 @@
"""
大模型API中转系统配置
大模型API中转系统配置 - 支持动态修改
"""
# 上游模型配置(按优先级排序,从高到低)
UPSTREAM_PROVIDERS = [
import json
from pathlib import Path
# 配置文件路径
CONFIG_FILE = Path(__file__).parent.parent / 'data' / 'config.json'
# 默认上游模型配置
DEFAULT_PROVIDERS = [
{
"name": "local-qwen",
"priority": 1, # 数字越小优先级越高
"id": "local-qwen",
"name": "Local Qwen",
"priority": 1,
"base_url": "http://192.168.2.5:1234/v1",
"api_key": "sk-lm-fuP5tGU8:Hi7YU87jHyDP6Ay8Tl2j",
"models": ["qwen3.5-4b", "qwen3.5", "qwen"],
@@ -15,7 +22,8 @@ UPSTREAM_PROVIDERS = [
"enabled": True,
},
{
"name": "siliconflow-deepseek",
"id": "siliconflow-deepseek",
"name": "SiliconFlow DeepSeek",
"priority": 2,
"base_url": "https://api.siliconflow.cn/v1",
"api_key": "sk-fhpoexpptvjghpnphtaxbkhjwulzovoqfffbckcfscjmwhcg",
@@ -26,22 +34,118 @@ UPSTREAM_PROVIDERS = [
},
]
# 模型别名映射
MODEL_ALIASES = {
# auto 自动选择可用模型
# 默认模型别名
DEFAULT_MODEL_ALIASES = {
"auto": "auto",
# Qwen别名
"qwen": "qwen3.5-4b",
"qwen3.5": "qwen3.5-4b",
"qwen3.5-4b": "qwen3.5-4b",
# DeepSeek别名
"deepseek": "Pro/deepseek-ai/DeepSeek-V3.2",
"deepseek-v3": "Pro/deepseek-ai/DeepSeek-V3.2",
"deepseek-v3.2": "Pro/deepseek-ai/DeepSeek-V3.2",
}
def load_config():
"""加载配置"""
if CONFIG_FILE.exists():
try:
data = json.loads(CONFIG_FILE.read_text(encoding='utf-8'))
return data
except:
pass
return {
"providers": DEFAULT_PROVIDERS,
"model_aliases": DEFAULT_MODEL_ALIASES,
}
def save_config(config):
"""保存配置"""
CONFIG_FILE.parent.mkdir(parents=True, exist_ok=True)
CONFIG_FILE.write_text(json.dumps(config, ensure_ascii=False, indent=2), encoding='utf-8')
def get_providers():
"""获取提供商列表"""
config = load_config()
return config.get("providers", DEFAULT_PROVIDERS)
def get_provider(provider_id):
"""获取单个提供商"""
providers = get_providers()
for p in providers:
if p.get("id") == provider_id:
return p
return None
def add_provider(provider):
"""添加提供商"""
config = load_config()
providers = config.get("providers", [])
# 生成ID
if not provider.get("id"):
provider["id"] = provider["name"].lower().replace(" ", "-").replace(".", "-")
providers.append(provider)
config["providers"] = providers
save_config(config)
return provider
def update_provider(provider_id, data):
"""更新提供商"""
config = load_config()
providers = config.get("providers", [])
for i, p in enumerate(providers):
if p.get("id") == provider_id:
providers[i] = {**p, **data}
config["providers"] = providers
save_config(config)
return providers[i]
return None
def delete_provider(provider_id):
"""删除提供商"""
config = load_config()
providers = config.get("providers", [])
providers = [p for p in providers if p.get("id") != provider_id]
config["providers"] = providers
save_config(config)
return True
def update_priority(provider_ids):
"""更新优先级顺序"""
config = load_config()
providers = config.get("providers", [])
# 按新顺序设置优先级
for i, pid in enumerate(provider_ids):
for p in providers:
if p.get("id") == pid:
p["priority"] = i + 1
config["providers"] = providers
save_config(config)
return providers
def get_model_aliases():
"""获取模型别名"""
config = load_config()
return config.get("model_aliases", DEFAULT_MODEL_ALIASES)
def update_model_alias(alias, target):
"""更新模型别名"""
config = load_config()
aliases = config.get("model_aliases", {})
aliases[alias] = target
config["model_aliases"] = aliases
save_config(config)
return aliases
# 初始化配置
config = load_config()
UPSTREAM_PROVIDERS = config.get("providers", DEFAULT_PROVIDERS)
MODEL_ALIASES = config.get("model_aliases", DEFAULT_MODEL_ALIASES)
# 服务配置
SERVER_CONFIG = {
"host": "0.0.0.0",
@@ -59,18 +163,11 @@ LOG_CONFIG = {
# 重试配置
RETRY_CONFIG = {
"max_retries": 3,
"retry_delay": 1, # 秒
"retry_delay": 1,
"retry_on_errors": [
"connection_error",
"timeout",
"rate_limit",
"server_error",
],
}
# 健康检查配置
HEALTH_CHECK = {
"enabled": True,
"interval": 60, # 秒
"timeout": 10,
}