package org.ruoyi.chat.factory;
|
|
import cn.hutool.core.util.StrUtil;
|
import jakarta.annotation.Resource;
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.ruoyi.chat.service.knowledge.BgeLargeVectorizationImpl;
|
import org.ruoyi.chat.service.knowledge.OpenAiVectorizationImpl;
|
import org.ruoyi.domain.vo.KnowledgeInfoVo;
|
import org.ruoyi.service.IKnowledgeInfoService;
|
import org.ruoyi.service.VectorizationService;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* 文本向量化
|
* @author huangkh
|
*/
|
@Component
|
@Slf4j
|
public class VectorizationFactory {
|
|
private final OpenAiVectorizationImpl openAiVectorization;
|
|
private final BgeLargeVectorizationImpl bgeLargeVectorization;
|
|
@Lazy
|
@Resource
|
private IKnowledgeInfoService knowledgeInfoService;
|
|
public VectorizationFactory(OpenAiVectorizationImpl openAiVectorization, BgeLargeVectorizationImpl bgeLargeVectorization) {
|
this.openAiVectorization = openAiVectorization;
|
this.bgeLargeVectorization = bgeLargeVectorization;
|
}
|
|
public VectorizationService getEmbedding(String kid){
|
String vectorModel = "text-embedding-3-small";
|
if (StrUtil.isNotEmpty(kid)) {
|
KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid));
|
if (knowledgeInfoVo != null && StrUtil.isNotEmpty(knowledgeInfoVo.getVectorModel())) {
|
vectorModel = knowledgeInfoVo.getVectorModel();
|
}
|
}
|
return switch (vectorModel) {
|
case "quentinz/bge-large-zh-v1.5" -> bgeLargeVectorization;
|
default -> openAiVectorization;
|
};
|
}
|
}
|