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.
78 lines
3.2 KiB
78 lines
3.2 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;
|
|
|
|
/**
|
|
* 模型配置加载器
|
|
* 应用启动完成后,从数据库读取活跃配置并与 application.yml 中的配置进行一致性校验
|
|
*/
|
|
@Component
|
|
@Slf4j
|
|
public class ModelConfigLoader implements ApplicationListener<ApplicationReadyEvent> {
|
|
|
|
@Autowired
|
|
private AiModelConfigService aiModelConfigService;
|
|
|
|
@Value("${spring.ai.dashscope.api-key:}")
|
|
private String dashscopeApiKey;
|
|
|
|
@Value("${spring.ai.dashscope.chat.options.model:qwen-turbo}")
|
|
private String chatModelName;
|
|
|
|
@Value("${spring.ai.dashscope.embedding.options.model:text-embedding-v2}")
|
|
private String embeddingModelName;
|
|
|
|
@Override
|
|
public void onApplicationEvent(ApplicationReadyEvent event) {
|
|
log.info("========== AI 模型配置校验 ==========");
|
|
try {
|
|
checkAppTypeConfig("CHAT", chatModelName);
|
|
checkAppTypeConfig("PRODUCT_EXTRACT", chatModelName);
|
|
checkAppTypeConfig("EMBEDDING", embeddingModelName);
|
|
checkAppTypeConfig("RAG_REWRITE", chatModelName);
|
|
log.info("========== AI 模型配置校验完成 ==========");
|
|
} catch (Exception e) {
|
|
log.warn("模型配置校验异常(不影响启动): {}", e.getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 校验指定应用类型的数据库配置与 application.yml 配置是否一致
|
|
*
|
|
* @param appType 应用类型
|
|
* @param ymlModelName yml 中配置的模型名称
|
|
*/
|
|
private void checkAppTypeConfig(String appType, String ymlModelName) {
|
|
AiModelConfig activeConfig = aiModelConfigService.getActiveConfigWithFullKey(appType);
|
|
if (activeConfig == null) {
|
|
log.warn(" [{}] 数据库中无活跃配置,将使用 application.yml 默认值", appType);
|
|
return;
|
|
}
|
|
|
|
String dbModelName = activeConfig.getModelName();
|
|
String dbApiKey = activeConfig.getApiKey();
|
|
boolean modelMismatch = !ymlModelName.equals(dbModelName);
|
|
boolean apiKeyMismatch = !dashscopeApiKey.equals(dbApiKey);
|
|
|
|
if (modelMismatch || apiKeyMismatch) {
|
|
log.warn(" [{}] ⚠️ 数据库配置与 application.yml 不一致!", appType);
|
|
log.warn(" DB : modelName={}, apiKey={}****",
|
|
dbModelName,
|
|
AiModelConfigService.maskApiKey(dbApiKey));
|
|
log.warn(" YML : modelName={}, apiKey={}****",
|
|
ymlModelName,
|
|
AiModelConfigService.maskApiKey(dashscopeApiKey));
|
|
log.warn(" 提示:请更新 application.yml 并重启服务使配置生效");
|
|
} else {
|
|
log.info(" [{}] ✅ 活跃配置 [{}] provider={} (与 application.yml 一致)",
|
|
appType, dbModelName, activeConfig.getProvider());
|
|
}
|
|
}
|
|
}
|