ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
@@ -348,6 +348,7 @@ return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString(); } @Override public String webSearch (String prompt) { String zhipuValue = configService.getConfigValue("zhipu", "key"); if(StringUtils.isEmpty(zhipuValue)){ 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<List<Double>> batchVectorization(List<String> 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<Double> doubleVector; try { doubleVector = ollamaAPI.generateEmbeddings(new OllamaEmbeddingsRequestModel(knowledgeInfoVo.getVectorModel(), new Gson().toJson(chunkList))); } catch (Exception e) { throw new RuntimeException(e); } List<List<Double>> 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 @@ return vectorList.get(0); } public static void main(String[] args) { OllamaAPI ollamaAPI = new OllamaAPI("http://localhost:11434/"); List<String> chunkList = Arrays.asList("天很蓝", "海很深"); List<Double> 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==="); } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java
@@ -4,14 +4,15 @@ 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 @@ @Lazy @Resource private ISysModelService sysModelService; private IChatModelService chatModelService; @Getter private OpenAiStreamClient openAiStreamClient; @@ -49,17 +50,14 @@ 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; } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java
@@ -328,16 +328,6 @@ System.err.println("获取索引失败: " + describeIndexResponseR.getMessage()); } // // 加载集合到内存 // LoadCollectionParam loadCollectionParam = LoadCollectionParam.newBuilder() // .withCollectionName(fullCollectionName) // .build(); // R<RpcStatus> loadResponse = milvusServiceClient.loadCollection(loadCollectionParam); // if (loadResponse.getStatus() != R.Status.Success.getCode()) { // System.err.println("加载集合 " + fullCollectionName + " 到内存时出错:" + loadResponse.getMessage()); // return new ArrayList<>(); // } List<String> search_output_fields = Arrays.asList("content", "fv"); List<Float> fv = new ArrayList<>(); for (int i = 0; i < queryVector.size(); i++) {