知识库初始化
This commit is contained in:
@@ -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 知识库信息
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user