diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java index df499ee3..80c2d8e4 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java @@ -348,6 +348,7 @@ public class SseServiceImpl implements ISseService { return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString(); } + @Override public String webSearch (String prompt) { String zhipuValue = configService.getConfigValue("zhipu", "key"); if(StringUtils.isEmpty(zhipuValue)){ diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java index 66a65772..b7b349b4 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java @@ -1,44 +1,57 @@ package org.ruoyi.chat.service.knowledge.vectorizer; -import com.google.gson.Gson; import io.github.ollama4j.OllamaAPI; import io.github.ollama4j.models.embeddings.OllamaEmbeddingsRequestModel; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.ruoyi.common.core.exception.ServiceException; +import org.ruoyi.domain.vo.ChatModelVo; import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.service.IChatModelService; import org.ruoyi.service.IKnowledgeInfoService; import org.ruoyi.service.VectorizationService; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; - import java.util.ArrayList; -import java.util.Arrays; + import java.util.List; +/** + * @author ageer + */ @Component @Slf4j @RequiredArgsConstructor public class BgeLargeVectorization implements VectorizationService { - String host = "http://localhost:11434/"; - @Lazy @Resource private IKnowledgeInfoService knowledgeInfoService; + @Lazy + @Resource + private final IChatModelService chatModelService; + @Override public List> batchVectorization(List chunkList, String kid) { - OllamaAPI ollamaAPI = new OllamaAPI(host); + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); + + ChatModelVo chatModelVo = chatModelService.selectModelByName(knowledgeInfoVo.getVectorModel()); + + OllamaAPI api = new OllamaAPI(chatModelVo.getApiHost()); + List doubleVector; - try { - doubleVector = ollamaAPI.generateEmbeddings(new OllamaEmbeddingsRequestModel(knowledgeInfoVo.getVectorModel(), new Gson().toJson(chunkList))); - } catch (Exception e) { - throw new RuntimeException(e); - } List> vectorList = new ArrayList<>(); - vectorList.add(doubleVector); + try { + for (String chunk : chunkList) { + doubleVector = api.generateEmbeddings(new OllamaEmbeddingsRequestModel(knowledgeInfoVo.getVectorModel(), chunk)); + vectorList.add(doubleVector); + } + } catch (Exception e) { + throw new ServiceException("文本向量化异常:"+e.getMessage()); + } return vectorList; } @@ -50,15 +63,4 @@ public class BgeLargeVectorization implements VectorizationService { return vectorList.get(0); } - public static void main(String[] args) { - OllamaAPI ollamaAPI = new OllamaAPI("http://localhost:11434/"); - List chunkList = Arrays.asList("天很蓝", "海很深"); - List doubleVector; - try { - doubleVector = ollamaAPI.generateEmbeddings(new OllamaEmbeddingsRequestModel("quentinz/bge-large-zh-v1.5", new Gson().toJson(chunkList))); - } catch (Exception e) { - throw new RuntimeException(e); - } - System.out.println("=== " + doubleVector + " 1==="); - } } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java index f276e512..766eb48a 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java @@ -4,14 +4,15 @@ import jakarta.annotation.Resource; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chat.config.ChatConfig; import org.ruoyi.common.chat.entity.embeddings.Embedding; import org.ruoyi.common.chat.entity.embeddings.EmbeddingResponse; import org.ruoyi.common.chat.openai.OpenAiStreamClient; +import org.ruoyi.domain.vo.ChatModelVo; import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.service.IChatModelService; import org.ruoyi.service.IKnowledgeInfoService; import org.ruoyi.service.VectorizationService; -import org.ruoyi.system.domain.SysModel; -import org.ruoyi.system.service.ISysModelService; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @@ -31,7 +32,7 @@ public class OpenAiVectorization implements VectorizationService { @Lazy @Resource - private ISysModelService sysModelService; + private IChatModelService chatModelService; @Getter private OpenAiStreamClient openAiStreamClient; @@ -49,17 +50,14 @@ public class OpenAiVectorization implements VectorizationService { vectorList.add(new ArrayList<>()); return vectorList; } - SysModel sysModel = sysModelService.selectModelByName(knowledgeInfoVo.getVectorModel()); - String apiHost= sysModel.getApiHost(); - String apiKey= sysModel.getApiKey(); + ChatModelVo chatModelVo = chatModelService.selectModelByName(knowledgeInfoVo.getVectorModel()); + String apiHost= chatModelVo.getApiHost(); + String apiKey= chatModelVo.getApiKey(); openAiStreamClient = chatConfig.createOpenAiStreamClient(apiHost,apiKey); - Embedding embedding = buildEmbedding(chunkList, knowledgeInfoVo); EmbeddingResponse embeddings = openAiStreamClient.embeddings(embedding); - // 处理 OpenAI 返回的嵌入数据 vectorList = processOpenAiEmbeddings(embeddings); - return vectorList; } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java index 8a271aa7..8d138dc3 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java @@ -328,16 +328,6 @@ public class MilvusVectorStore implements VectorStoreService { System.err.println("获取索引失败: " + describeIndexResponseR.getMessage()); } -// // 加载集合到内存 -// LoadCollectionParam loadCollectionParam = LoadCollectionParam.newBuilder() -// .withCollectionName(fullCollectionName) -// .build(); -// R loadResponse = milvusServiceClient.loadCollection(loadCollectionParam); -// if (loadResponse.getStatus() != R.Status.Success.getCode()) { -// System.err.println("加载集合 " + fullCollectionName + " 到内存时出错:" + loadResponse.getMessage()); -// return new ArrayList<>(); -// } - List search_output_fields = Arrays.asList("content", "fv"); List fv = new ArrayList<>(); for (int i = 0; i < queryVector.size(); i++) {