本地 RAG 知识库
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

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());
}
}
}