diff --git a/src/main/java/com/superbiz/agent/controller/DocumentController.java b/src/main/java/com/superbiz/agent/controller/DocumentController.java index 70465d8..0d1c6f2 100644 --- a/src/main/java/com/superbiz/agent/controller/DocumentController.java +++ b/src/main/java/com/superbiz/agent/controller/DocumentController.java @@ -28,6 +28,7 @@ public class DocumentController { @PostMapping("/upload") public Result uploadDocument( @RequestParam("file") MultipartFile file, + @RequestParam(value = "category", required = false) String category, @RequestParam(value = "faultCategory", required = false) String faultCategory, @RequestParam(value = "faultSource", required = false) String faultSource, @RequestParam(value = "apiName", required = false) String apiName, @@ -38,6 +39,7 @@ public class DocumentController { try { DocumentUploadRequest request = DocumentUploadRequest.builder() .file(file) + .category(category) .faultCategory(faultCategory) .faultSource(faultSource) .apiName(apiName) diff --git a/src/main/java/com/superbiz/agent/dto/DocumentUploadRequest.java b/src/main/java/com/superbiz/agent/dto/DocumentUploadRequest.java index 535077c..f87850a 100644 --- a/src/main/java/com/superbiz/agent/dto/DocumentUploadRequest.java +++ b/src/main/java/com/superbiz/agent/dto/DocumentUploadRequest.java @@ -20,6 +20,11 @@ public class DocumentUploadRequest { */ private MultipartFile file; + /** + * 文档类别(api、domain、troubleshoot 等,默认 upload) + */ + private String category; + /** * 故障类别(默认 EXTERNAL_API) */ diff --git a/src/main/java/com/superbiz/agent/service/DocumentManagementService.java b/src/main/java/com/superbiz/agent/service/DocumentManagementService.java index 5af4ae1..a74ea70 100644 --- a/src/main/java/com/superbiz/agent/service/DocumentManagementService.java +++ b/src/main/java/com/superbiz/agent/service/DocumentManagementService.java @@ -110,11 +110,15 @@ public class DocumentManagementService { // 6. 向量化并索引 try { - vectorIndexService.indexDocumentChunks(docId, chunks); + String category = request.getCategory(); + if (category == null || category.isBlank()) { + category = "upload"; // 默认类别 + } + vectorIndexService.indexDocumentChunks(docId, chunks, category); document.setStatus("INDEXED"); document.setIndexedAt(LocalDateTime.now()); apiDocumentRepository.save(document); - log.info("文档索引完成,docId: {}", docId); + log.info("文档索引完成,docId: {}, 类别: {}", docId, category); } catch (Exception e) { log.error("文档索引失败,docId: {}", docId, e); diff --git a/src/main/java/com/superbiz/agent/service/VectorIndexService.java b/src/main/java/com/superbiz/agent/service/VectorIndexService.java index 9100db5..a548879 100644 --- a/src/main/java/com/superbiz/agent/service/VectorIndexService.java +++ b/src/main/java/com/superbiz/agent/service/VectorIndexService.java @@ -172,14 +172,15 @@ public class VectorIndexService { * * @param docId 文档ID * @param chunks 文档分块列表 + * @param category 文档类别(api、domain、troubleshoot 等) * @throws Exception 索引失败时抛出异常 */ - public void indexDocumentChunks(String docId, List chunks) throws Exception { + public void indexDocumentChunks(String docId, List chunks, String category) throws Exception { if (chunks == null || chunks.isEmpty()) { throw new IllegalArgumentException("文档分块列表为空"); } - logger.info("开始索引文档分块,docId: {}, 分块数: {}", docId, chunks.size()); + logger.info("开始索引文档分块,docId: {}, 分块数: {}, 类别: {}", docId, chunks.size(), category); // 1. 删除该文档的旧数据(如果存在) deleteDocumentChunks(docId); @@ -192,8 +193,8 @@ public class VectorIndexService { // 生成向量 List vector = embeddingService.generateEmbedding(chunk.getContent()); - // 构建元数据(使用 docId 作为来源标识) - Map metadata = buildDocumentMetadata(docId, chunk, chunks.size()); + // 构建元数据(使用 docId 和 category) + Map metadata = buildDocumentMetadata(docId, chunk, chunks.size(), category); // 插入到 Milvus insertToMilvus(chunk.getContent(), vector, metadata, chunk.getChunkIndex()); @@ -206,7 +207,7 @@ public class VectorIndexService { } } - logger.info("文档索引完成,docId: {}, 共 {} 个分块", docId, chunks.size()); + logger.info("文档索引完成,docId: {}, 共 {} 个分块,类别: {}", docId, chunks.size(), category); } /** @@ -252,7 +253,7 @@ public class VectorIndexService { /** * 构建文档元数据(用于上传文档) */ - private Map buildDocumentMetadata(String docId, DocumentChunk chunk, int totalChunks) { + private Map buildDocumentMetadata(String docId, DocumentChunk chunk, int totalChunks, String category) { Map metadata = new HashMap<>(); // 文档标识 @@ -268,8 +269,8 @@ public class VectorIndexService { metadata.put("title", chunk.getTitle()); } - // 默认类别:上传文档 - metadata.put("category", "upload"); + // 文档类别 + metadata.put("category", category != null && !category.isBlank() ? category : "upload"); return metadata; }