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)