解决AI中大文件上传的问题

This commit is contained in:
chenxudong 2025-04-08 09:14:23 +08:00
parent 081bbbd629
commit 98ed6eafdb
4 changed files with 27 additions and 7 deletions

View File

@ -62,6 +62,10 @@ public class ElePropertyConfig {
@Value("${backup.mysql.path}") @Value("${backup.mysql.path}")
private String sqlDirs; private String sqlDirs;
@Getter
@Value("${ai.store.max.docs:200}")
private Integer aiMaxDocs;
public String getEleTmpPath() { public String getEleTmpPath() {
if (EleCommonUtil.isWinOs()) { if (EleCommonUtil.isWinOs()) {
return winPrefix + eleTmpPath; return winPrefix + eleTmpPath;

View File

@ -32,6 +32,7 @@ import org.springframework.ai.document.DocumentReader;
import org.springframework.ai.ollama.OllamaChatModel; import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.ai.reader.TextReader; import org.springframework.ai.reader.TextReader;
import org.springframework.ai.reader.pdf.PagePdfDocumentReader; import org.springframework.ai.reader.pdf.PagePdfDocumentReader;
import org.springframework.ai.transformer.splitter.TokenTextSplitter;
import org.springframework.ai.vectorstore.VectorStore; import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -115,7 +116,7 @@ public class ChatService {
case "txt", "csv", "text" -> { case "txt", "csv", "text" -> {
Path tempFile = saveUploadedFileToTemp(file); Path tempFile = saveUploadedFileToTemp(file);
DocumentReader documentReader = new TextReader(String.valueOf(tempFile.toUri().toURL())); DocumentReader documentReader = new TextReader(String.valueOf(tempFile.toUri().toURL()));
documents = documentReader.get(); documents = new TokenTextSplitter().apply(documentReader.get());
Files.deleteIfExists(tempFile); Files.deleteIfExists(tempFile);
} }
case "xls" -> { case "xls" -> {
@ -212,6 +213,7 @@ public class ChatService {
return ElectromagneticResultUtil.fail("-1", StrFormatter.format("当前格式 {} 不支持", fileType)); return ElectromagneticResultUtil.fail("-1", StrFormatter.format("当前格式 {} 不支持", fileType));
} }
} }
documents = documents.subList(0, Math.min(elePropertyConfig.getAiMaxDocs(), documents.size()));
vectorStore.write(documents); vectorStore.write(documents);
for (Document document : documents) { for (Document document : documents) {
aiFileUploadRecordMapper.insert(new AiFileUploadRecord().setId(IdWorker.getSnowFlakeIdString()) aiFileUploadRecordMapper.insert(new AiFileUploadRecord().setId(IdWorker.getSnowFlakeIdString())

View File

@ -34,6 +34,7 @@ pagehelper.reasonable=false
server.port=12396 server.port=12396
winPrefix:D:/tmp winPrefix:D:/tmp
data.ele.tmp.path=/szsd/data/ele/prj/dev/tmp data.ele.tmp.path=/szsd/data/ele/prj/dev/tmp
ai.store.max.docs=200
# sys path # sys path
data.sys.prj.path=/szsd/data/ele/prj/dev/sys_project/ data.sys.prj.path=/szsd/data/ele/prj/dev/sys_project/
data.sys.upload.path=/szsd/data/ele/prj/dev/sys_upload/ data.sys.upload.path=/szsd/data/ele/prj/dev/sys_upload/

View File

@ -2,10 +2,15 @@
//import jakarta.annotation.Resource; //import jakarta.annotation.Resource;
//import org.junit.jupiter.api.Test; //import org.junit.jupiter.api.Test;
//import org.springframework.ai.document.Document; //import org.springframework.ai.document.Document;
//import org.springframework.ai.reader.pdf.PagePdfDocumentReader; //import org.springframework.ai.document.DocumentReader;
//import org.springframework.ai.reader.TextReader;
//import org.springframework.ai.transformer.splitter.TokenTextSplitter;
//import org.springframework.ai.vectorstore.VectorStore; //import org.springframework.ai.vectorstore.VectorStore;
//import org.springframework.boot.test.context.SpringBootTest; //import org.springframework.boot.test.context.SpringBootTest;
// //
//import java.io.File;
//import java.net.MalformedURLException;
//import java.nio.file.Path;
//import java.util.List; //import java.util.List;
// //
//@SpringBootTest(classes = Application.class) //@SpringBootTest(classes = Application.class)
@ -15,11 +20,19 @@
// private VectorStore vectorStore; // private VectorStore vectorStore;
// //
// @Test // @Test
// public void testTree() { // public void testTree() throws MalformedURLException {
// String path = "D:/wjj.pdf"; // String path = "D:/明朝那些事儿.txt";
// PagePdfDocumentReader pagePdfDocumentReader = new PagePdfDocumentReader(path); // File file = new File(path);
// List<Document> read = pagePdfDocumentReader.read(); // Path tempFile = file.toPath();
// System.out.println("read = " + read); // DocumentReader documentReader = new TextReader(String.valueOf(tempFile.toUri().toURL()));
// List<Document> documents = new TokenTextSplitter().apply(documentReader.get());
// documents = documents.subList(0, 200);
// vectorStore.write(documents);
//
//// Path tempFile = Paths.get(file.getAbsolutePath());
//// DocumentReader documentReader = new TextReader(String.valueOf(tempFile.toUri().toURL()));
//// List<Document> documents = documentReader.get();
//// vectorStore.write(documents);
// } // }
// //
//} //}