diff --git a/src/main/java/com/superbiz/agent/service/KnowledgeBaseInitService.java b/src/main/java/com/superbiz/agent/service/KnowledgeBaseInitService.java index 7cf64c8..5d57cdf 100644 --- a/src/main/java/com/superbiz/agent/service/KnowledgeBaseInitService.java +++ b/src/main/java/com/superbiz/agent/service/KnowledgeBaseInitService.java @@ -19,6 +19,7 @@ import java.nio.file.attribute.BasicFileAttributes; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Collectors; /** * 知识库初始化服务 @@ -193,12 +194,12 @@ public class KnowledgeBaseInitService { int indexSize = knowledgeIndexService.getIndexSize(); logger.debug("L0 索引大小: {}", indexSize); - // 按分类统计(从 metadata JSON 中提取 category) - Map categoryCount = new HashMap<>(); - apiDocumentRepository.findAll().forEach(doc -> { - String category = extractCategoryFromMetadata(doc.getMetadata()); - categoryCount.merge(category, 1L, Long::sum); - }); + // 按分类统计(从 fault_source 字段读取) + Map categoryCount = apiDocumentRepository.findAll().stream() + .collect(Collectors.groupingBy( + doc -> doc.getFaultSource() != null ? doc.getFaultSource() : "general", + Collectors.counting() + )); stats.setCategoryCount(categoryCount); // Milvus 中的向量数量(需要实现) @@ -250,10 +251,9 @@ public class KnowledgeBaseInitService { document.setApiName(title); // 使用 title 作为 apiName document.setStatus("PENDING"); // 初始状态为 PENDING,索引成功后更新为 INDEXED - // 尝试映射 category 到 FaultCategory(如果匹配的话) - // 否则保持默认值 EXTERNAL_API - // 注意:frontmatter 的 category(api, infrastructure, domain)与 FaultCategory 枚举不完全匹配 - // 真实的分类信息保存在 metadata 中 + // 直接使用 fault_source 字段存储 category(api, infrastructure, domain 等) + // fault_category 字段名虽然不太贴切,但可以用来存储文档分类 + document.setFaultSource(category); // 将 frontmatter 信息保存到 metadata(JSON 格式) String metadataJson = String.format( @@ -283,34 +283,6 @@ public class KnowledgeBaseInitService { .replace("\r", "\\r"); } - /** - * 从 metadata JSON 中提取 category - */ - private String extractCategoryFromMetadata(String metadata) { - if (metadata == null || metadata.isEmpty()) { - return "general"; - } - - try { - // 简单的 JSON 解析(提取 "category":"xxx") - int categoryIndex = metadata.indexOf("\"category\":\""); - if (categoryIndex == -1) { - return "general"; - } - - int startIndex = categoryIndex + "\"category\":\"".length(); - int endIndex = metadata.indexOf("\"", startIndex); - if (endIndex == -1) { - return "general"; - } - - return metadata.substring(startIndex, endIndex); - } catch (Exception e) { - logger.warn("解析 metadata 失败: {}", metadata, e); - return "general"; - } - } - /** * 提取文档正文(去除 frontmatter) */