资讯动态

Spring AI 2.0:RAG

发布时间:2026/8/16 4:00:39 来源:尧图企业网站定制
一、简介知识库。二、代码pom.xml!-- pdf解析 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-pdf-document-reader/artifactId/dependencyapplication.ymlspring:servlet:multipart:max-file-size:10MBmax-request-size:20MButilComponentpublicclassRagDocumentLoader{AutowiredprivateVectorStorevectorStore;privatefinalTokenTextSplittertextSplitternewTokenTextSplitter(800,150,5,10000);/** * 上传文件入库支持 txt / pdf */publicvoidloadMultipartFile(MultipartFilefile)throwsIOException{ResourceresourcenewByteArrayResource(file.getBytes());Stringfilenamefile.getOriginalFilename();ListDocumentdocumentList;if(filename!nullfilename.endsWith(.pdf)){//PDF读取PagePdfDocumentReaderpdfReadernewPagePdfDocumentReader(resource);documentListpdfReader.get();}else{//默认当作txt文本TextReadertextReadernewTextReader(resource);documentListtextReader.get();}//分片ListDocumentsplitDocstextSplitter.apply(documentList);//写入向量库vectorStore.add(splitDocs);}publicvoidloadTxt(Resourceresource){ListDocumentdocsnewTextReader(resource).get();ListDocumentsplitDocstextSplitter.apply(docs);vectorStore.add(splitDocs);}publicvoidloadText(Stringcontent){DocumentdocnewDocument(content);vectorStore.add(textSplitter.apply(List.of(doc)));}}Configuration/** * 内存向量库 SimpleVectorStore * 注意重启丢失仅用于开发测试生产替换为Milvus等 * 依赖注入EmbeddingModel使用阿里云百炼的Embedding */BeanpublicVectorStoresimpleVectorStore(EmbeddingModelembeddingModel){returnSimpleVectorStore.builder(embeddingModel).build();}/** * RAG 问答Advisor自定义prompt模板 */BeanpublicQuestionAnswerAdvisorquestionAnswerAdvisor(VectorStorevectorStore){StringragSystemPrompt 你是知识库助手严格依据【参考资料】回答用户问题。 参考资料没有的信息直接回复不知道禁止编造。 【参考资料】 {question_answer_context} ;SearchRequestsearchRequestSearchRequest.builder().topK(1).similarityThreshold(0.6).build();returnnewQuestionAnswerAdvisor(vectorStore,searchRequest,ragSystemPrompt);}BeanpublicChatClientchatClient(ChatClient.BuilderbuilderQuestionAnswerAdvisorquestionAnswerAdvisor,ChatMemorychatMemory){// spring‑ai‑alibaba 环境默认使用的是DashScopeChatModel阿里云百炼聊天模型returnbuilder.builder().defaultAdvisors(questionAnswerAdvisor).build();}Controller也可以删掉 ChatClient 里面的.defaultAdvisors(questionAnswerAdvisor)在接口处手动添加 advisorAutowiredprivateRagDocumentLoaderragDocumentLoader;/** * 文件上传解析并存入向量库 * postman测试POST form‑data keyfile选择txt或者pdf文件 */PostMapping(/upload)publicResponseEntityStringuploadFile(RequestParam(file)MultipartFilefile){if(file.isEmpty()){returnResponseEntity.badRequest().body(文件不能为空);}try{ragDocumentLoader.loadMultipartFile(file);returnResponseEntity.ok(上传成功已加载到向量库);}catch(Exceptione){e.printStackTrace();returnResponseEntity.internalServerError().body(解析失败e.getMessage());}}GetMapping(/chat)publicStringchat(RequestParamStringsid,RequestParamStringquestion){returnchatClient.prompt().user(question).advisors(a-a.param(ChatMemory.CONVERSATION_ID,sid).add(questionAnswerAdvisor)//仅本次请求启用RAG).call().content();}

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价