SpringBoot LangChain4j RAG知识库(四)
4、上传接口
提前配置好使用的嵌入模型,向量数据库连接参数
上传接口
/**
* 上传文件并向量化
* @param file
* @param id
* @return
* @throws IOException
*/
@PostMapping("/addFile")
public AjaxResult addFile(@RequestParam("file") MultipartFile file, @RequestParam("id") String id) throws IOException {
String contentType = file.getContentType();
//文件名
String fileName = file.getOriginalFilename();
//文件后缀
RagConfigFile boFile = new RagConfigFile();
boFile.setRagConfigId(Long.valueOf(id));
boFile.setOriginalName(fileName);
boFile.setFileSuffix(Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf(".") + 1));
ragConfigFileService.insertRagConfigFile(boFile);
//保存到向量库
FileUploadDocument fileUploadDocument = new FileUploadDocument();
List<Document> document = fileUploadDocument.processUploadedFile(file);
RagConfig ragConfig = ragConfigService.selectRagConfigById(Long.valueOf(id));
if(!StringUtils.isNull(ragConfig)) {
//向量模型 配置
RagEmbeddingUseConfig ragEmbeddingUseConfigVo = ragEmbeddingUseConfigService.selectRagEmbeddingUseConfigById(ragConfig.getEmbeddingUseConfigId());
RagEmbeddingConfig ragEmbeddingConfigVo = ragEmbeddingConfigService.selectRagEmbeddingConfigById(ragEmbeddingUseConfigVo.getEmbeddingConfigId());
ragConfig.setRagEmbeddingConfig(ragEmbeddingConfigVo);
ragConfig.setRagEmbeddingUseConfig(ragEmbeddingUseConfigVo);
}
RagConfigTool.getEmbeddingStoreIngestorFile(ragConfig,document);
return success(contentType);
}保存测试

聊天接口测试
@GetMapping("/chat")
public String test(String msg) {
HttpClientBuilder httpClientBuilder = new SpringRestClientBuilder();
if (assistant == null) {
ChatModel ollamaChatModel = OllamaChatModel.builder()
.baseUrl("http://192.168.2.136:11434")
.modelName("qwen3:8b")
.httpClientBuilder(httpClientBuilder)
.logRequests(true)
.logResponses(true)
.build();
//RAG 知识库
RagConfig vo = ragConfigService.selectRagConfigById(1L);
if(!StringUtils.isNull(vo)) {
//向量模型 配置
RagEmbeddingUseConfig ragEmbeddingUseConfigVo = ragEmbeddingUseConfigService
.selectRagEmbeddingUseConfigById(vo.getEmbeddingUseConfigId());
RagEmbeddingConfig ragEmbeddingConfigVo = ragEmbeddingConfigService
.selectRagEmbeddingConfigById(ragEmbeddingUseConfigVo.getEmbeddingConfigId());
vo.setRagEmbeddingConfig(ragEmbeddingConfigVo);
vo.setRagEmbeddingUseConfig(ragEmbeddingUseConfigVo);
}
ContentRetriever contentRetriever = RagConfigTool.getContentRetriever(vo);
assistant = AiServices.builder(Assistant.class)
.chatModel(ollamaChatModel)
.chatMemoryProvider(getChatMemoryProvider("12345"))
.contentRetriever(contentRetriever)
.build();
}
String chat = assistant.chat("12345", msg);
return chat;
}返回数据中包含向量数据库中的数据

RAG 总结
使用milvus 作为RAG的存储引擎,将文本数据保存到向量数据库中时需要使用Langchain4j中的文档解析器将文本文件解析为document,使用向量嵌入模型多document进行向量化入库操作将所需的只是进行保存,在在调用时将向量数据放入到agent中就可以优先使用知识库的知识进行问答,