feat(llm): LLM 配置完全通过管理后台维护

- _get_provider_config 改从 DB 读取 api_key(.env 为 fallback)
- 前端 admin.html 新增 sensenova provider 选项,默认值更新为 sensenova
- 新增提供商不再需要改代码,后台直接配即可
This commit is contained in:
Yuzhiran Dev
2026-06-01 14:23:24 +08:00
parent 2c17f006fc
commit 475945418e
2 changed files with 17 additions and 14 deletions
+11 -9
View File
@@ -50,29 +50,31 @@ def _get_active_provider() -> str:
def _get_provider_config(provider: Optional[str] = None) -> dict:
p = provider or _get_active_provider()
# 优先从 DB 读取该供应商的配置
model = None
base_url = None
# 优先从 DB 读取该供应商的完整配置(包括 api_key
db_model = None
db_base_url = None
db_api_key = None
try:
from ..database import SessionLocal
from ..models import LLMConfig
db = SessionLocal()
cfg = db.query(LLMConfig).filter(LLMConfig.provider == p).order_by(LLMConfig.is_active.desc()).first()
if cfg:
model = cfg.model
base_url = cfg.base_url
db_model = cfg.model
db_base_url = cfg.base_url
db_api_key = cfg.api_key
db.close()
except Exception:
pass
# 回退到代码默认值
fb = _FALLBACK.get(p, {})
api_key = _API_KEYS.get(p, "")
api_key = db_api_key or _API_KEYS.get(p, "")
if not api_key:
raise LLMError(f"{p} API_KEY 未配置,请在 .env 中设置")
raise LLMError(f"{p} API_KEY 未配置,请在管理后台 LLM 配置中设置 API Key")
return {
"api_key": api_key,
"model": model or fb.get("model", ""),
"base_url": base_url or fb.get("base_url", ""),
"model": db_model or fb.get("model", ""),
"base_url": db_base_url or fb.get("base_url", ""),
}
def _get_db_defaults(provider: Optional[str] = None) -> dict: