增加Excel文档加载功能,处理向量库管理createSchema方法WeaviateEmbeddingStore.builder().build();直接构建报错问题。

This commit is contained in:
zhangpengxiang
2025-05-11 10:55:33 +08:00
parent 9c2586ab43
commit fb492d41f3
5 changed files with 52 additions and 6 deletions

View File

@@ -103,6 +103,18 @@
<version>1.19.6</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-document-parser-apache-tika</artifactId>
</dependency>
<!-- ruoyi-knowledge-api/pom.xml -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.17.0</version>
</dependency>
</dependencies>
</project>

View File

@@ -1,10 +1,7 @@
package org.ruoyi.chain.loader;
import lombok.AllArgsConstructor;
import org.ruoyi.chain.split.CharacterTextSplitter;
import org.ruoyi.chain.split.CodeTextSplitter;
import org.ruoyi.chain.split.MarkdownTextSplitter;
import org.ruoyi.chain.split.TokenTextSplitter;
import org.ruoyi.chain.split.*;
import org.ruoyi.constant.FileType;
import org.springframework.stereotype.Component;
@@ -16,6 +13,8 @@ public class ResourceLoaderFactory {
private final CodeTextSplitter codeTextSplitter;
private final MarkdownTextSplitter markdownTextSplitter;
private final TokenTextSplitter tokenTextSplitter;
private final ExcelTextSplitter excelTextSplitter;
public ResourceLoader getLoaderByFileType(String fileType){
if (FileType.isTextFile(fileType)){
return new TextFileLoader(characterTextSplitter);
@@ -25,6 +24,8 @@ public class ResourceLoaderFactory {
return new PdfFileLoader(characterTextSplitter);
} else if (FileType.isMdFile(fileType)) {
return new MarkDownFileLoader(markdownTextSplitter);
}else if (FileType.isExcel(fileType)) {
return new ExcelFileLoader(excelTextSplitter);
}else if (FileType.isCodeFile(fileType)) {
return new CodeFileLoader(codeTextSplitter);
}else {

View File

@@ -0,0 +1,17 @@
package org.ruoyi.chain.split;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@AllArgsConstructor
@Slf4j
public class ExcelTextSplitter implements TextSplitter{
@Override
public List<String> split(String content, String kid) {
return null;
}
}

View File

@@ -7,6 +7,8 @@ public class FileType {
public static final String DOC = "doc";
public static final String DOCX = "docx";
public static final String PDF = "pdf";
public static final String XLS = "xls";
public static final String XLSX = "xlsx";
public static final String LOG = "log";
public static final String XML = "xml";
@@ -88,4 +90,13 @@ public class FileType {
}
}
public static boolean isExcel(String type){
if (type.equalsIgnoreCase(XLS) || type.equalsIgnoreCase(XLSX)){
return true;
}
else {
return false;
}
}
}

View File

@@ -11,6 +11,7 @@ import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.filter.Filter;
import dev.langchain4j.store.embedding.filter.comparison.IsEqualTo;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore;
import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore;
import dev.langchain4j.store.embedding.weaviate.WeaviateEmbeddingStore;
@@ -39,11 +40,11 @@ public class VectorStoreServiceImpl implements VectorStoreService {
private final ConfigService configService;
Map<String,EmbeddingStore<TextSegment>> storeMap;
Map<String,EmbeddingStore<TextSegment>> storeMap = new HashMap<>();
@Override
public void createSchema(String kid,String modelName) {
EmbeddingStore<TextSegment> embeddingStore = WeaviateEmbeddingStore.builder().build();
EmbeddingStore<TextSegment> embeddingStore;
switch (modelName) {
case "weaviate" -> {
String protocol = configService.getConfigValue("weaviate", "protocol");
@@ -78,6 +79,10 @@ public class VectorStoreServiceImpl implements VectorStoreService {
.collectionName(collectionName)
.build();
}
default -> {
//使用内存
embeddingStore = new InMemoryEmbeddingStore<>();
}
}
storeMap.put(kid,embeddingStore);
}