【功能新增】AI:增加 RedisVectorStore 向量库的接入
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user