diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java index 2c4688c5..fb7709e7 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java @@ -178,7 +178,8 @@ public class AihrModelSeedService { public ChatResponse chat(ChatRequest request) { RuntimeConfig runtime = runtimeConfig(request == null ? null : request.model()); String prompt = request == null || isBlank(request.prompt()) ? "请给出物业管家处理漏水投诉的第一步。" : request.prompt(); - String modelName = request == null || isBlank(request.model()) ? runtime.modelName() : request.model(); + // 运行参数已就绪时以解析出的模型名为准:请求可能带的是 seed 占位模型名(如 gpt-4o-mini),不能透传给供应商 + String modelName = runtime.configured() || request == null || isBlank(request.model()) ? runtime.modelName() : request.model(); if (!runtime.configured()) { return new ChatResponse( @@ -385,7 +386,12 @@ public class AihrModelSeedService { } private RuntimeConfig runtimeConfig(String requestedModel) { - return dbRuntimeConfig(requestedModel) + Optional resolved = dbRuntimeConfig(requestedModel); + if (resolved.isEmpty() && !isBlank(requestedModel)) { + // 请求的模型名在库里不存在(如前端 seed 占位行),回退到默认已启用的 chat 配置 + resolved = dbRuntimeConfig(null); + } + return resolved .orElseGet(() -> new RuntimeConfig(DEFAULT_PROVIDER, fallback(requestedModel, DEFAULT_MODEL), null, null, false, "seed")); } diff --git a/frontend/src/views/system/model/index.vue b/frontend/src/views/system/model/index.vue index 2d0c27b9..9d760afc 100644 --- a/frontend/src/views/system/model/index.vue +++ b/frontend/src/views/system/model/index.vue @@ -471,7 +471,12 @@ const filteredProviders = computed(() => { const activeProvider = computed( () => providers.value.find((item) => item.providerCode === selectedProviderCode.value) ?? providers.value[0] ?? seedProviders[0] ); -const activeChatModel = computed(() => modelRows.value.find((item) => item.category === 'chat' && item.enabled) ?? modelRows.value[0]); +const activeChatModel = computed( + () => + modelRows.value.find((item) => item.category === 'chat' && item.enabled && item.configured) ?? + modelRows.value.find((item) => item.category === 'chat' && item.enabled) ?? + modelRows.value[0] +); const keyText = computed(() => { if (!activeProvider.value.configured) return '未配置'; return showKey.value ? '已配置,接口不回传密钥' : 'sk-************';