22
33import com .baomidou .mybatisplus .core .metadata .IPage ;
44import com .baomidou .mybatisplus .extension .plugins .pagination .Page ;
5+ import com .datamate .common .domain .enums .EdgeType ;
56import com .datamate .common .domain .enums .NodeType ;
7+ import com .datamate .common .domain .model .LineageEdge ;
68import com .datamate .common .domain .model .LineageNode ;
79import com .datamate .common .domain .service .LineageService ;
810import com .datamate .common .infrastructure .exception .BusinessException ;
1214import com .datamate .common .setting .domain .entity .ModelConfig ;
1315import com .datamate .common .setting .domain .repository .ModelConfigRepository ;
1416import 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 ;
1521import com .datamate .rag .indexer .domain .model .FileStatus ;
1622import com .datamate .rag .indexer .domain .model .KnowledgeBase ;
1723import com .datamate .rag .indexer .domain .model .RagChunk ;
3945
4046import java .util .Collections ;
4147import java .util .List ;
48+ import java .util .Objects ;
4249import 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