【功能新增】AI:增加 RedisVectorStore 向量库的接入

This commit is contained in:
YunaiV
2025-03-08 22:09:16 +08:00
parent 44bcc9476d
commit 588c9fe323
7 changed files with 103 additions and 71 deletions

View File

@@ -32,6 +32,7 @@ import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -48,9 +49,14 @@ import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.KNOWLEDGE_SEGM
@Slf4j
public class AiKnowledgeSegmentServiceImpl implements AiKnowledgeSegmentService {
public static final String VECTOR_STORE_METADATA_KNOWLEDGE_ID = "knowledgeId";
public static final String VECTOR_STORE_METADATA_DOCUMENT_ID = "documentId";
public static final String VECTOR_STORE_METADATA_SEGMENT_ID = "segmentId";
private static final String VECTOR_STORE_METADATA_KNOWLEDGE_ID = "knowledgeId";
private static final String VECTOR_STORE_METADATA_DOCUMENT_ID = "documentId";
private static final String VECTOR_STORE_METADATA_SEGMENT_ID = "segmentId";
private static final Map<String, Class<?>> VECTOR_STORE_METADATA_TYPES = Map.of(
VECTOR_STORE_METADATA_KNOWLEDGE_ID, String.class,
VECTOR_STORE_METADATA_DOCUMENT_ID, String.class,
VECTOR_STORE_METADATA_SEGMENT_ID, String.class);
@Resource
private AiKnowledgeSegmentMapper segmentMapper;
@@ -257,7 +263,7 @@ public class AiKnowledgeSegmentServiceImpl implements AiKnowledgeSegmentService
}
private VectorStore getVectorStoreById(AiKnowledgeDO knowledge) {
return modelService.getOrCreateVectorStore(knowledge.getEmbeddingModelId());
return modelService.getOrCreateVectorStore(knowledge.getEmbeddingModelId(), VECTOR_STORE_METADATA_TYPES);
}
private VectorStore getVectorStoreById(Long knowledgeId) {

View File

@@ -13,6 +13,7 @@ import org.springframework.ai.vectorstore.VectorStore;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
/**
* AI 模型 Service 接口
@@ -125,8 +126,9 @@ public interface AiModelService {
* 获得 VectorStore 对象
*
* @param id 编号
* @param metadataFields 元数据的定义
* @return VectorStore 对象
*/
VectorStore getOrCreateVectorStore(Long id);
VectorStore getOrCreateVectorStore(Long id, Map<String, Class<?>> metadataFields);
}

View File

@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.*;
@@ -151,7 +152,7 @@ public class AiModelServiceImpl implements AiModelService {
}
@Override
public VectorStore getOrCreateVectorStore(Long id) {
public VectorStore getOrCreateVectorStore(Long id, Map<String, Class<?>> metadataFields) {
// 获取模型 + 密钥
AiModelDO model = validateModel(id);
AiApiKeyDO apiKey = apiKeyService.validateApiKey(model.getKeyId());
@@ -162,8 +163,9 @@ public class AiModelServiceImpl implements AiModelService {
platform, apiKey.getApiKey(), apiKey.getUrl(), model.getModel());
// 创建或获取 VectorStore 对象
// return modelFactory.getOrCreateVectorStore(SimpleVectorStore.class, embeddingModel);
return modelFactory.getOrCreateVectorStore(QdrantVectorStore.class, embeddingModel);
// return modelFactory.getOrCreateVectorStore(SimpleVectorStore.class, embeddingModel, metadataFields);
return modelFactory.getOrCreateVectorStore(QdrantVectorStore.class, embeddingModel, metadataFields);
// return modelFactory.getOrCreateVectorStore(RedisVectorStore.class, embeddingModel, metadataFields);
}
}