From 962c2b693c5593723c13d62da3e31e7996703fcb Mon Sep 17 00:00:00 2001 From: Yzm Date: Fri, 17 Oct 2025 16:31:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor(vector-store):=20=E7=A7=BB=E9=99=A4Vec?= =?UTF-8?q?torStoreStrategy=E6=8E=A5=E5=8F=A3=E5=B9=B6=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E6=A8=A1=E5=BC=8F=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除VectorStoreStrategy接口,直接使用VectorStoreService作为策略接口 简化VectorStoreStrategyFactory实现,移除冗余方法 更新相关实现类以适配新的接口结构 --- .../service/impl/VectorStoreServiceImpl.java | 17 ++++++------- .../strategy/AbstractVectorStoreStrategy.java | 3 ++- .../service/strategy/VectorStoreStrategy.java | 18 ------------- .../strategy/VectorStoreStrategyFactory.java | 25 +++---------------- .../impl/MilvusVectorStoreStrategy.java | 1 - 5 files changed, 13 insertions(+), 51 deletions(-) delete mode 100644 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategy.java 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 263e50f2..a52f3cc4 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 @@ -2,16 +2,13 @@ package org.ruoyi.service.impl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.ruoyi.common.core.service.ConfigService; import org.ruoyi.domain.bo.QueryVectorBo; import org.ruoyi.domain.bo.StoreEmbeddingBo; import org.ruoyi.service.VectorStoreService; -import org.ruoyi.service.strategy.VectorStoreStrategy; import org.ruoyi.service.strategy.VectorStoreStrategyFactory; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import java.util.*; -import java.util.stream.Collectors; /** * 向量库管理 @@ -30,14 +27,14 @@ public class VectorStoreServiceImpl implements VectorStoreService { /** * 获取当前配置的向量库策略 */ - private VectorStoreStrategy getCurrentStrategy() { + private VectorStoreService getCurrentStrategy() { return strategyFactory.getStrategy(); } @Override public void createSchema(String vectorModelName, String kid) { log.info("创建向量库schema: vectorModelName={}, kid={}, modelName={}", vectorModelName, kid); - VectorStoreStrategy strategy = getCurrentStrategy(); + VectorStoreService strategy = getCurrentStrategy(); strategy.createSchema(vectorModelName, kid); } @@ -45,7 +42,7 @@ public class VectorStoreServiceImpl implements VectorStoreService { public void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo) { log.info("存储向量数据: kid={}, docId={}, 数据条数={}", storeEmbeddingBo.getKid(), storeEmbeddingBo.getDocId(), storeEmbeddingBo.getChunkList().size()); - VectorStoreStrategy strategy = getCurrentStrategy(); + VectorStoreService strategy = getCurrentStrategy(); strategy.storeEmbeddings(storeEmbeddingBo); } @@ -53,28 +50,28 @@ public class VectorStoreServiceImpl implements VectorStoreService { public List getQueryVector(QueryVectorBo queryVectorBo) { log.info("查询向量数据: kid={}, query={}, maxResults={}", queryVectorBo.getKid(), queryVectorBo.getQuery(), queryVectorBo.getMaxResults()); - VectorStoreStrategy strategy = getCurrentStrategy(); + VectorStoreService strategy = getCurrentStrategy(); return strategy.getQueryVector(queryVectorBo); } @Override public void removeById(String id, String modelName) { log.info("根据ID删除向量数据: id={}, modelName={}", id, modelName); - VectorStoreStrategy strategy = getCurrentStrategy(); + VectorStoreService strategy = getCurrentStrategy(); strategy.removeById(id, modelName); } @Override public void removeByDocId(String docId, String kid) { log.info("根据docId删除向量数据: docId={}, kid={}", docId, kid); - VectorStoreStrategy strategy = getCurrentStrategy(); + VectorStoreService strategy = getCurrentStrategy(); strategy.removeByDocId(docId, kid); } @Override public void removeByFid(String fid, String kid) { log.info("根据fid删除向量数据: fid={}, kid={}", fid, kid); - VectorStoreStrategy strategy = getCurrentStrategy(); + VectorStoreService strategy = getCurrentStrategy(); strategy.removeByFid(fid, kid); } } diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/AbstractVectorStoreStrategy.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/AbstractVectorStoreStrategy.java index 07f0866f..100e4a3a 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/AbstractVectorStoreStrategy.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/AbstractVectorStoreStrategy.java @@ -9,6 +9,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.core.config.VectorStoreProperties; import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.service.VectorStoreService; /** * 向量库策略抽象基类 @@ -18,7 +19,7 @@ import org.ruoyi.common.core.utils.StringUtils; */ @Slf4j @RequiredArgsConstructor -public abstract class AbstractVectorStoreStrategy implements VectorStoreStrategy { +public abstract class AbstractVectorStoreStrategy implements VectorStoreService { protected final VectorStoreProperties vectorStoreProperties; diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategy.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategy.java deleted file mode 100644 index b0c965d6..00000000 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategy.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.ruoyi.service.strategy; - -import org.ruoyi.service.VectorStoreService; - -/** - * 向量库策略接口 - * 继承VectorStoreService以避免重复定义相同的方法 - * - * @author Yzm - */ -public interface VectorStoreStrategy extends VectorStoreService { - - /** - * 获取向量库类型标识 - * @return 向量库类型(如:weaviate, milvus) - */ - String getVectorStoreType(); -} \ No newline at end of file diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategyFactory.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategyFactory.java index 579b989f..0bab68cc 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategyFactory.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/VectorStoreStrategyFactory.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.core.config.VectorStoreProperties; import org.ruoyi.service.strategy.impl.MilvusVectorStoreStrategy; import org.ruoyi.service.strategy.impl.WeaviateVectorStoreStrategy; +import org.ruoyi.service.VectorStoreService; import org.springframework.stereotype.Component; import java.util.HashMap; @@ -26,7 +27,7 @@ public class VectorStoreStrategyFactory { private final WeaviateVectorStoreStrategy weaviateStrategy; private final MilvusVectorStoreStrategy milvusStrategy; - private Map strategies; + private Map strategies; @PostConstruct public void init() { @@ -39,36 +40,18 @@ public class VectorStoreStrategyFactory { /** * 获取当前配置的向量库策略 */ - public VectorStoreStrategy getStrategy() { + public VectorStoreService getStrategy() { String vectorStoreType = vectorStoreProperties.getType(); if (vectorStoreType == null || vectorStoreType.trim().isEmpty()) { vectorStoreType = "weaviate"; // 默认使用weaviate } - - VectorStoreStrategy strategy = strategies.get(vectorStoreType.toLowerCase()); + VectorStoreService strategy = strategies.get(vectorStoreType.toLowerCase()); if (strategy == null) { log.warn("未找到向量库策略: {}, 使用默认策略: weaviate", vectorStoreType); strategy = strategies.get("weaviate"); } - log.debug("使用向量库策略: {}", vectorStoreType); return strategy; } - /** - * 根据类型获取向量库策略 - */ - public VectorStoreStrategy getStrategy(String type) { - if (type == null || type.trim().isEmpty()) { - return getStrategy(); - } - - VectorStoreStrategy strategy = strategies.get(type.toLowerCase()); - if (strategy == null) { - log.warn("未找到向量库策略: {}, 使用默认策略", type); - return getStrategy(); - } - - return strategy; - } } \ No newline at end of file diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/impl/MilvusVectorStoreStrategy.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/impl/MilvusVectorStoreStrategy.java index 07ee2ba6..d262a7e3 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/impl/MilvusVectorStoreStrategy.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/strategy/impl/MilvusVectorStoreStrategy.java @@ -46,7 +46,6 @@ public class MilvusVectorStoreStrategy extends AbstractVectorStoreStrategy { public void createSchema(String vectorModelName, String kid) { String url = vectorStoreProperties.getMilvus().getUrl(); String collectionName = vectorStoreProperties.getMilvus().getCollectionname() + kid; - // 使用 LangChain4j 的 MilvusEmbeddingStore 来确保集合存在(按需创建) MilvusEmbeddingStore store = MilvusEmbeddingStore.builder() .uri(url) .collectionName(collectionName)