You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.7 KiB
64 lines
2.7 KiB
package com.wok.supportbot.config;
|
|
|
|
import com.wok.supportbot.entity.AiModelConfig;
|
|
import com.wok.supportbot.service.AiModelConfigService;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
|
import org.springframework.context.ApplicationListener;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
/**
|
|
* 模型配置加载器
|
|
* 应用启动完成后,校验数据库中各应用类型的活跃配置是否存在
|
|
*/
|
|
@Component
|
|
@Slf4j
|
|
public class ModelConfigLoader implements ApplicationListener<ApplicationReadyEvent> {
|
|
|
|
@Autowired
|
|
private AiModelConfigService aiModelConfigService;
|
|
|
|
@Value("${spring.ai.dashscope.api-key:}")
|
|
private String dashscopeApiKey;
|
|
|
|
@Override
|
|
public void onApplicationEvent(ApplicationReadyEvent event) {
|
|
log.info("========== AI 模型配置校验 ==========");
|
|
try {
|
|
checkAppTypeConfig("CHAT");
|
|
checkAppTypeConfig("EMBEDDING");
|
|
checkAppTypeConfig("RAG_REWRITE");
|
|
checkAppTypeConfig("RERANK");
|
|
log.info("========== AI 模型配置校验完成 ==========");
|
|
} catch (Exception e) {
|
|
log.warn("模型配置校验异常(不影响启动): {}", e.getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 校验指定应用类型的数据库活跃配置是否存在
|
|
* 仅比较 API Key 一致性(对 DashScope 提供商的配置)
|
|
*/
|
|
private void checkAppTypeConfig(String appType) {
|
|
AiModelConfig activeConfig = aiModelConfigService.getActiveConfigWithFullKey(appType);
|
|
if (activeConfig == null) {
|
|
log.warn(" [{}] ⚠️ 数据库中无活跃配置,请在管理页面配置", appType);
|
|
return;
|
|
}
|
|
|
|
// 仅比较 API Key:如果 DB 配置的 provider 是 dashscope,对比 yml 中的 apiKey
|
|
if ("dashscope".equals(activeConfig.getProvider())
|
|
&& dashscopeApiKey != null && !dashscopeApiKey.isBlank()
|
|
&& !dashscopeApiKey.equals(activeConfig.getApiKey())) {
|
|
log.warn(" [{}] ⚠️ DB 中的 API Key 与 application.yml 不一致!", appType);
|
|
log.warn(" DB : apiKey={}****", AiModelConfigService.maskApiKey(activeConfig.getApiKey()));
|
|
log.warn(" YML : apiKey={}****", AiModelConfigService.maskApiKey(dashscopeApiKey));
|
|
log.warn(" 提示:建议在管理页面统一管理 API Key,或保持 yml 与 DB 一致");
|
|
} else {
|
|
log.info(" [{}] ✅ 活跃配置 [{}] provider={}",
|
|
appType, activeConfig.getModelName(), activeConfig.getProvider());
|
|
}
|
|
}
|
|
}
|