Skip to content

Commit 0010a64

Browse files
committed
feat: Add lineage service for KnowledgeBaseService
1 parent ca4dd61 commit 0010a64

1 file changed

Lines changed: 61 additions & 8 deletions

File tree

backend/services/rag-indexer-service/src/main/java/com/datamate/rag/indexer/application/KnowledgeBaseService.java

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.baomidou.mybatisplus.core.metadata.IPage;
44
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5+
import com.datamate.common.domain.enums.EdgeType;
56
import com.datamate.common.domain.enums.NodeType;
7+
import com.datamate.common.domain.model.LineageEdge;
68
import com.datamate.common.domain.model.LineageNode;
79
import com.datamate.common.domain.service.LineageService;
810
import com.datamate.common.infrastructure.exception.BusinessException;
@@ -12,6 +14,10 @@
1214
import com.datamate.common.setting.domain.entity.ModelConfig;
1315
import com.datamate.common.setting.domain.repository.ModelConfigRepository;
1416
import com.datamate.common.setting.infrastructure.client.ModelClient;
17+
import com.datamate.datamanagement.domain.model.dataset.Dataset;
18+
import com.datamate.datamanagement.domain.model.dataset.DatasetFile;
19+
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetFileRepository;
20+
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetRepository;
1521
import com.datamate.rag.indexer.domain.model.FileStatus;
1622
import com.datamate.rag.indexer.domain.model.KnowledgeBase;
1723
import com.datamate.rag.indexer.domain.model.RagChunk;
@@ -39,7 +45,10 @@
3945

4046
import java.util.Collections;
4147
import java.util.List;
48+
import java.util.Objects;
4249
import java.util.Optional;
50+
import java.util.Set;
51+
import java.util.stream.Collectors;
4352

4453
/**
4554
* 知识库服务类
@@ -54,6 +63,8 @@ public class KnowledgeBaseService {
5463
private final RagFileRepository ragFileRepository;
5564
private final ApplicationEventPublisher eventPublisher;
5665
private final ModelConfigRepository modelConfigRepository;
66+
private final DatasetRepository datasetRepository;
67+
private final DatasetFileRepository datasetFileRepository;
5768
private final MilvusService milvusService;
5869
private final LineageService lineageService;
5970

@@ -67,7 +78,6 @@ public String create(KnowledgeBaseCreateReq request) {
6778
KnowledgeBase knowledgeBase = new KnowledgeBase();
6879
BeanUtils.copyProperties(request, knowledgeBase);
6980
knowledgeBaseRepository.save(knowledgeBase);
70-
addKnowledgeBaseToGraph(knowledgeBase);
7181
return knowledgeBase.getId();
7282
}
7383

@@ -156,6 +166,7 @@ public void addFiles(AddFilesReq request) {
156166
}).toList();
157167
ragFileRepository.saveBatch(ragFiles, 100);
158168
eventPublisher.publishEvent(new DataInsertedEvent(knowledgeBase, request));
169+
updateLineageGraph(knowledgeBase, request.getFiles());
159170
}
160171

161172
public PagedResponse<RagFile> listFiles(String knowledgeBaseId, RagFileReq request) {
@@ -228,12 +239,54 @@ public List<SearchResp.SearchResult> retrieve(RetrieveReq request) {
228239
return searchResults;
229240
}
230241

231-
private void addKnowledgeBaseToGraph(KnowledgeBase knowledgeBase) {
232-
LineageNode fromNode = new LineageNode();
233-
fromNode.setId(knowledgeBase.getId());
234-
fromNode.setName(knowledgeBase.getName());
235-
fromNode.setDescription(knowledgeBase.getDescription());
236-
fromNode.setNodeType(NodeType.KNOWLEDGE_BASE);
237-
lineageService.generateGraph(fromNode, null, null);
242+
/**
243+
* 向知识库添加文件的时候,将相关数据集加入血缘图
244+
*
245+
* @param knowledgeBase 知识库
246+
* @param files 数据集中选择的文件
247+
*/
248+
private void updateLineageGraph(KnowledgeBase knowledgeBase, List<AddFilesReq.FileInfo> files) {
249+
LineageNode kbNode = lineageService.getNodeById(knowledgeBase.getId());
250+
if (kbNode == null) {
251+
kbNode = new LineageNode();
252+
kbNode.setId(knowledgeBase.getId());
253+
kbNode.setNodeType(NodeType.KNOWLEDGE_BASE);
254+
kbNode.setName(knowledgeBase.getName());
255+
kbNode.setDescription(knowledgeBase.getDescription());
256+
}
257+
258+
// 获取所有唯一的数据集ID
259+
Set<String> datasetIds = files.stream()
260+
.map(fileInfo -> {
261+
DatasetFile datasetFile = datasetFileRepository.getById(fileInfo.id());
262+
return datasetFile != null ? datasetFile.getDatasetId() : null;
263+
})
264+
.filter(Objects::nonNull)
265+
.collect(Collectors.toSet());
266+
267+
// 为每个数据集创建血缘关系
268+
for (String datasetId : datasetIds) {
269+
Dataset dataset = datasetRepository.getById(datasetId);
270+
if (dataset == null) continue;
271+
272+
// 创建源数据集节点
273+
LineageNode datasetNode = new LineageNode();
274+
datasetNode.setId(dataset.getId());
275+
datasetNode.setNodeType(NodeType.DATASET);
276+
datasetNode.setName(dataset.getName());
277+
datasetNode.setDescription(dataset.getDescription());
278+
279+
// 创建血缘边
280+
LineageEdge edge = new LineageEdge();
281+
edge.setProcessId(knowledgeBase.getId());
282+
edge.setName("");
283+
edge.setEdgeType(EdgeType.KNOWLEDGE_BASE);
284+
edge.setDescription("Add the files from dataset to the knowledge base.");
285+
edge.setFromNodeId(dataset.getId());
286+
edge.setToNodeId(knowledgeBase.getId());
287+
288+
// 生成血缘图
289+
lineageService.generateGraph(datasetNode, edge, kbNode);
290+
}
238291
}
239292
}

0 commit comments

Comments
 (0)