Jelajahi Sumber

修改知识库上传文件报错问题

feng 11 bulan lalu
induk
melakukan
dc03fa8165

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -72,7 +72,7 @@ spring:
     # 国际化资源文件路径
     basename: i18n/messages
   profiles:
-    active: dev
+    active: prod
 #      active: @profiles.active@
   # 文件上传
   servlet:

+ 23 - 4
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java

@@ -55,14 +55,26 @@ public class VectorStoreServiceImpl implements VectorStoreService {
     }
 
     @Override
-    public void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo) {
+    public void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo)  {
         createSchema(storeEmbeddingBo.getKid(), storeEmbeddingBo.getVectorModelName());
         EmbeddingModel embeddingModel = getEmbeddingModel(storeEmbeddingBo.getEmbeddingModelName(),
                 storeEmbeddingBo.getApiKey(), storeEmbeddingBo.getBaseUrl());
         List<String> chunkList = storeEmbeddingBo.getChunkList();
-        for (String s : chunkList) {
-            Embedding embedding = embeddingModel.embed(s).content();
-            TextSegment segment = TextSegment.from(s);
+
+        XinferenceClient xinferenceClient = new XinferenceClient(storeEmbeddingBo.getBaseUrl());
+        String modelName = storeEmbeddingBo.getEmbeddingModelName();
+        if("quentinz/bge-large-zh-v1.5".contains(modelName)){
+            modelName = "bge-large-zh-v1.5";
+        }
+        for (String text : chunkList) {
+            List<Double> vector;
+            try {
+                vector = xinferenceClient.getEmbedding(modelName, text);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            Embedding embedding = new Embedding(toFloatArray(vector));
+            TextSegment segment = TextSegment.from(text);
             embeddingStore.add(embedding, segment);
         }
     }
@@ -155,5 +167,12 @@ public class VectorStoreServiceImpl implements VectorStoreService {
         }
         return floatList;
     }
+    public static float[] toFloatArray(List<Double> doubleList) {
+        float[] floatArray = new float[doubleList.size()];
+        for (int i = 0; i < doubleList.size(); i++) {
+            floatArray[i] = doubleList.get(i).floatValue();
+        }
+        return floatArray;
+    }
 
 }