知识库初始化

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

@@ -20,6 +20,7 @@ import org.xyzh.api.ai.service.AIFileUploadService;
import org.xyzh.api.ai.service.KnowledgeService;
import org.xyzh.api.file.dto.TbSysFileDTO;
import org.xyzh.api.file.service.FileService;
import org.xyzh.common.core.domain.LoginDomain;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.utils.id.IdUtil;
@@ -75,12 +76,14 @@ public class KnowledgeServiceImpl implements KnowledgeService {
}
// 2. 获取当前用户
String userId = LoginUtil.getCurrentUserId();
if (!StringUtils.hasText(userId)) {
LoginDomain loginDomain = LoginUtil.getCurrentLogin();
if (loginDomain == null || !StringUtils.hasText(loginDomain.getUser().getUserId())) {
return ResultDomain.failure("用户未登录");
}
String userId = loginDomain.getUser().getUserId();
// 3. 生成ID
knowledge.setDeptPath(loginDomain.getUserDepts().get(0).getDeptPath());
knowledge.setOptsn(IdUtil.getOptsn());
knowledge.setKnowledgeId(IdUtil.getSnowflakeId());
knowledge.setCreator(userId);
@@ -126,6 +129,73 @@ public class KnowledgeServiceImpl implements KnowledgeService {
return ResultDomain.failure("创建知识库失败");
}
/**
* @description 内部创建知识库(不检查登录状态,用于系统初始化)
* 注意调用方需要自行设置knowledgeId和creator
* @param knowledge 知识库信息
* @return ResultDomain<TbKnowledge> 创建结果
* @author yslg
* @since 2025-12-20
*/
@Override
public ResultDomain<TbKnowledge> createKnowledgeInternal(TbKnowledge knowledge) {
// 1. 参数校验
if (!StringUtils.hasText(knowledge.getTitle())) {
return ResultDomain.failure("知识库标题不能为空");
}
if (!StringUtils.hasText(knowledge.getKnowledgeId())) {
return ResultDomain.failure("知识库ID不能为空");
}
// 2. 设置默认值
if (!StringUtils.hasText(knowledge.getOptsn())) {
knowledge.setOptsn(IdUtil.getOptsn());
}
if (!StringUtils.hasText(knowledge.getCreator())) {
knowledge.setCreator("system");
}
// 3. 创建Dify知识库
String difyDatasetId = null;
try {
DatasetCreateRequest createRequest = new DatasetCreateRequest();
createRequest.setName(knowledge.getTitle());
createRequest.setDescription(knowledge.getDescription());
if (StringUtils.hasText(knowledge.getDifyIndexingTechnique())) {
createRequest.setIndexingTechnique(knowledge.getDifyIndexingTechnique());
}
DatasetCreateResponse difyResponse = difyApiClient.createDataset(createRequest);
if (difyResponse != null && StringUtils.hasText(difyResponse.getId())) {
difyDatasetId = difyResponse.getId();
knowledge.setDifyDatasetId(difyDatasetId);
} else {
return ResultDomain.failure("创建Dify知识库失败");
}
} catch (Exception e) {
logger.error("创建Dify知识库异常: {}", e.getMessage(), e);
return ResultDomain.failure("创建Dify知识库异常: " + e.getMessage());
}
// 4. 插入数据库
int rows = knowledgeMapper.insertKnowledge(knowledge);
if (rows > 0) {
logger.info("内部创建知识库成功: knowledgeId={}, title={}", knowledge.getKnowledgeId(), knowledge.getTitle());
return ResultDomain.success("创建知识库成功", knowledge);
}
// 数据库保存失败补偿删除Dify知识库
if (StringUtils.hasText(difyDatasetId)) {
try {
difyApiClient.deleteDataset(difyDatasetId);
logger.info("补偿删除Dify知识库成功: difyDatasetId={}", difyDatasetId);
} catch (Exception e) {
logger.warn("补偿删除Dify知识库失败: {}", e.getMessage());
}
}
return ResultDomain.failure("创建知识库失败");
}
/**
* @description 更新知识库包含dify知识库各种参数的配置
* @param knowledge 知识库信息

View File

@@ -14,7 +14,7 @@
<result column="embedding_model_provider" property="embeddingModelProvider" jdbcType="VARCHAR"/>
<result column="rerank_model" property="rerankModel" jdbcType="VARCHAR"/>
<result column="rerank_model_provider" property="rerankModelProvider" jdbcType="VARCHAR"/>
<result column="reranking_enable" property="rerankingEnable" jdbcType="INTEGER"/>
<result column="reranking_enable" property="rerankingEnable" jdbcType="BOOLEAN"/>
<result column="retrieval_top_k" property="retrievalTopK" jdbcType="INTEGER"/>
<result column="retrieval_score_threshold" property="retrievalScoreThreshold" jdbcType="DECIMAL"/>
<result column="document_count" property="documentCount" jdbcType="INTEGER"/>