diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java index 7e1f6f9b..917652c4 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java @@ -131,7 +131,31 @@ public class VectorStoreServiceImpl implements VectorStoreService { createSchema(kid,modelName); // 根据条件删除向量数据 Filter simpleFilter = new IsEqualTo("kid", kid); - embeddingStore.removeAll(simpleFilter); + removeByFilter(simpleFilter); + } + + public void removeByFilter(Filter filter) { + List dummyVector = new ArrayList<>(); + // TODO 模型维度 + int dimension = 1024; + for (int i = 0; i < dimension; i++) { + dummyVector.add(0.0f); + } + Embedding dummyEmbedding = Embedding.from(dummyVector); + EmbeddingSearchRequest request = EmbeddingSearchRequest.builder() + .queryEmbedding(dummyEmbedding) + .filter(filter) + .maxResults(10000) + .build(); + // 搜索 + List idsToDelete = embeddingStore.search(request) + .matches().stream() + .map(EmbeddingMatch::embeddingId) + .collect(Collectors.toList()); + // 删除 + if (!idsToDelete.isEmpty()) { + embeddingStore.removeAll(idsToDelete); + } } @Override diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java index 89b68630..06ad06b6 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java @@ -405,4 +405,5 @@ public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService { .set(KnowledgeAttach::getVectorStatus, DealStatus.STATUS_10) .eq(KnowledgeAttach::getVectorStatus, DealStatus.STATUS_40)); } + @Scheduled(fixedDelay = 180000) // 3分钟执行一次 }