Spring AI 2.0:RAG

发布时间:2026/10/5 6:59:32
Spring AI 2.0:RAG 一、简介知识库。二、代码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();}

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询