diff --git a/platform/backend/app/core/nvidia_client.py b/platform/backend/app/core/nvidia_client.py
index 5265b19..db90ca2 100644
--- a/platform/backend/app/core/nvidia_client.py
+++ b/platform/backend/app/core/nvidia_client.py
@@ -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:
diff --git a/platform/frontend/admin.html b/platform/frontend/admin.html
index 1a13d16..c5ef28e 100644
--- a/platform/frontend/admin.html
+++ b/platform/frontend/admin.html
@@ -607,8 +607,9 @@
-
-
+
+
+
@@ -718,9 +719,9 @@ const llmConfigs = ref([]);
Object.assign(llmConfigForm, row);
} else {
llmConfigDialogTitle.value = '新增配置'; editingLLMConfigId.value = null;
- llmConfigForm.id = null; llmConfigForm.name = ''; llmConfigForm.provider = 'opencode-go'; llmConfigForm.model = 'deepseek-v4-pro';
- llmConfigForm.base_url = 'https://opencode.ai/zen/go/v1'; llmConfigForm.api_key = ''; llmConfigForm.temperature = 0.7;
- llmConfigForm.max_tokens = 131072; llmConfigForm.system_prompt = ''; llmConfigForm.user_prompt_template = ''; llmConfigForm.is_active = true;
+ llmConfigForm.id = null; llmConfigForm.name = ''; llmConfigForm.provider = 'sensenova'; llmConfigForm.model = 'deepseek-v4-flash';
+ llmConfigForm.base_url = 'https://token.sensenova.cn/v1'; llmConfigForm.api_key = ''; llmConfigForm.temperature = 0.3;
+ llmConfigForm.max_tokens = 4000; llmConfigForm.system_prompt = ''; llmConfigForm.user_prompt_template = ''; llmConfigForm.is_active = true;
}
llmConfigDialogVisible.value = true;
};