知识库初始化

This commit is contained in:
2025-12-20 12:03:26 +08:00
parent 566d03491b
commit 1498b91bcf
9 changed files with 3562 additions and 34 deletions

View File

@@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.dubbo.config.annotation.DubboReference;
import org.bouncycastle.jcajce.provider.asymmetric.EXTERNAL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
@@ -14,6 +13,7 @@ import org.xyzh.api.ai.dto.TbKnowledge;
import org.xyzh.api.ai.service.KnowledgeService;
import org.xyzh.api.system.service.SysConfigService;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.utils.id.IdUtil;
/**
* @description 初始化客服系统必须的8个知识库4个内部知识库4个外部知识库运行结束即销毁
@@ -44,16 +44,13 @@ public class KnowledgeInit {
List<TbKnowledge> knowledges = buildKnowledgeConfigs();
int successCount = 0;
int skipCount = 0;
for (TbKnowledge knowledge : knowledges) {
if (checkKnowledgeExists(knowledge)) {
logger.info("知识库已存在,跳过: {}", knowledge.getTitle());
for(TbKnowledge knowledge : knowledges){
if(!checkKnowledgeExists(knowledge.getKnowledgeId())){
if(createKnowledge(knowledge)){
successCount++;
}
}else{
skipCount++;
continue;
}
if (createKnowledge(knowledge)) {
successCount++;
}
}
@@ -66,6 +63,18 @@ public class KnowledgeInit {
*/
private List<TbKnowledge> buildKnowledgeConfigs() {
List<TbKnowledge> knowledges = new ArrayList<>();
// 从数据库获取知识库配置默认信息
TbKnowledge baseKnowledge = new TbKnowledge();
baseKnowledge.setDifyIndexingTechnique(sysConfigService.getStringConfig("dify.knowledge.indexing.tchnique"));
baseKnowledge.setEmbeddingModel(sysConfigService.getStringConfig("dify.knowledge.embedding.model"));
baseKnowledge.setEmbeddingModelProvider(sysConfigService.getStringConfig("dify.knowledge.embedding.model.provider"));
baseKnowledge.setRerankingEnable(sysConfigService.getBooleanConfig("dify.knowledge.reranking.enable"));
baseKnowledge.setRerankModel(sysConfigService.getStringConfig("dify.knowledge.rerank.model"));
baseKnowledge.setRerankModelProvider(sysConfigService.getStringConfig("dify.knowledge.rerank.model.provider"));
baseKnowledge.setRetrievalTopK(sysConfigService.getIntConfig("dify.knowledge.retrieval.top.k"));
baseKnowledge.setRetrievalScoreThreshold(sysConfigService.getDoubleConfig("dify.knowledge.retrieval.score.threshold"));
// 外部知识库
TbKnowledge outerDevOperKnowledge = new TbKnowledge();
outerDevOperKnowledge.setKnowledgeId("workcase_outer_device_operate");
@@ -125,12 +134,29 @@ public class KnowledgeInit {
knowledges.add(innerServChatKnowledge);
// 统一设置dify知识库相关参数,并设置service为workcase
for(TbKnowledge knowledge: knowledges){
knowledge.setService(SERVICE_WORKCASE);
knowledge.setOptsn(IdUtil.getOptsn());
// 从baseKnowledge同步知识库默认配置
knowledge.setDifyIndexingTechnique(baseKnowledge.getDifyIndexingTechnique());
knowledge.setEmbeddingModel(baseKnowledge.getEmbeddingModel());
knowledge.setEmbeddingModelProvider(baseKnowledge.getEmbeddingModelProvider());
knowledge.setRerankingEnable(baseKnowledge.getRerankingEnable());
knowledge.setRerankModel(baseKnowledge.getRerankModel());
knowledge.setRerankModelProvider(baseKnowledge.getRerankModelProvider());
knowledge.setRetrievalTopK(baseKnowledge.getRetrievalTopK());
knowledge.setRetrievalScoreThreshold(baseKnowledge.getRetrievalScoreThreshold());
}
return knowledges;
}
private boolean checkKnowledgeExists(TbKnowledge knowledge){
return true;
private boolean checkKnowledgeExists(String knowledgeId){
ResultDomain<TbKnowledge> knowledge = knowledgeService.getKnowledgeById(knowledgeId);
if(knowledge.getSuccess() && knowledge.getData() != null){
return true;
}
return false;
}
/**
@@ -138,7 +164,7 @@ public class KnowledgeInit {
*/
private boolean createKnowledge(TbKnowledge knowledge) {
ResultDomain<TbKnowledge> result = knowledgeService.createKnowledge(knowledge);
ResultDomain<TbKnowledge> result = knowledgeService.createKnowledgeInternal(knowledge);
if (result.getSuccess()) {
logger.info("创建知识库成功: {} [{}]", knowledge.getTitle(), knowledge.getCategory());