news 2026/3/17 6:40:27

RAG 检索增强生成实战:基于 Spring AI 构建本地知识库 AI 问答系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RAG 检索增强生成实战:基于 Spring AI 构建本地知识库 AI 问答系统

RAG(检索增强生成)作为融合信息检索与大语言模型文本生成的核心技术,能够通过外部知识库动态补充实时、精准的专属信息,从根源上提升大语言模型回答的准确性、时效性,还能有效抑制传统 LLM 的 “幻觉” 问题、解决模型知识过时的痛点,如今已成为企业搭建专属 AI 问答系统、智能助手的主流技术方案。

本文将以 2026 年最新技术栈为基础,详细讲解如何使用 Spring AI 框架快速构建基于本地知识库的 AI 问答系统,涵盖环境配置、文档加载、向量存储、查询增强、单元测试等全流程关键步骤,还额外补充了异常处理优化、多格式文档兼容小贴士和2026 年 Spring AI 新特性亮点,适合新手入门落地,也可供开发者作为项目参考收藏。

1、准备环境

开发工具:IDEA

构建工具:Gradle

开发环境:JDK21(17+即可)

技术框架:SpringBoot3.3.0 + Spring AI Alibaba 1.0.0-M6.1

2、引入Gradle依赖

这里我只引入核心依赖,其他的SpringBoot等基础依赖就不做展示了。

implementation 'com.alibaba.cloud.ai:spring-ai-alibaba-starter:1.0.0-M6.1' implementation 'org.springframework.ai:spring-ai-markdown-document-reader:1.0.0-M6'

3、准备知识库文档

文档可以是Text、PDF或Markdown文件等,这里我们就以Markdown文件为例。

将文档放在resources的document目录里下:

4、文档读取

对自己准备好的知识库文档进行处理,然后保存到向量数据库中。这个过程俗称 ETL(抽取、转换、加载),Spring AI 提供了对 ETL 的支持。

ETL 的 3 大核心组件,按照顺序执行:

  • DocumentReader:读取文档,得到文档列表。
  • DocumentTransformer:转换文档,得到处理后的文档列表。
  • DocumentWriter:将文档列表保存到存储中(可以是向量数据库,也可以是其他存储)

通过 DocumentLoader 文‎档加载配置指定读取文档的细节,比如是否读取代码块、引用块等。还指定了额外的元信息配置‍,提取文档的文件名(fileName)作为文档的元信息⁠,可以便于后续知识库实现更精确的检索。

@Component @Slf4j public class DocumentLoader{private final ResourcePatternResolver resourcePatternResolver;public DocumentLoader(ResourcePatternResolver resourcePatternResolver){this.resourcePatternResolver=resourcePatternResolver;}/** * 加载多篇Markdown文档 * @param * @return java.util.List<org.springframework.ai.document.Document>*/ public List<Document>loadMarkDownList(){List<Document>documentList=new ArrayList<>();// 加载Markdown文档列表 try{Resource[]markDownList=resourcePatternResolver.getResources("classpath*:document/*.md");for(Resource markDown:markDownList){String filename=markDown.getFilename();// 加载markdown文档构造器 MarkdownDocumentReaderConfig documentReaderConfig=MarkdownDocumentReaderConfig.builder()// 有分隔符就创建新文档 .withHorizontalRuleCreateDocument(true)// 是否包含代码块 .withIncludeCodeBlock(true)// 是否包含引用格式 .withIncludeBlockquote(true)// 添加额外信息 .withAdditionalMetadata("filename", filename).build();MarkdownDocumentReader markdownDocumentReader=new MarkdownDocumentReader(markDown, documentReaderConfig);documentList.addAll(markdownDocumentReader.read());}}catch(IOException e){BizException.of("加载Markdown文档列表失败:", e);}returndocumentList;}}

5、向量转换和存储

为了实现方便؜,我们使用 Spri‎ng AI 内置的、基于内存读写的向量数据库‍ SimpleVect⁠orStore 来保存文档。

SimpleVe؜ctorStore 实现了 Ve‎ctorStore 接口,而 VectorStore 接口集成了‍ DocumentWriter,⁠所以具备文档写入能力。

实现初始化向量数据库并且保存文档的方法。代码如下:

@Configuration public class VectorStoreConfig{@Resource private DocumentLoader documentLoader;@Bean VectorStore vectorStore(EmbeddingModel dashscopeEmbeddingModel){SimpleVectorStore simpleVectorStore=SimpleVectorStore.builder(dashscopeEmbeddingModel).build();// 加载文档 List<Document>documentList=documentLoader.loadMarkDownList();simpleVectorStore.add(documentList);returnsimpleVectorStore;}}

6、查询增强

Spring AI 通过؜ Advisor 特性提供了开箱即用的 RAG 功‎能。主要是 QuestionAnswerAdvisor 问答拦截器和RetrievalAug‍mentationAdvisor 检索增强拦截器⁠。

查询增强的原理:向量数据库存储着 AI 模型本身不知道的数据,当用户问题‎发送给 AI 模型时,QuestionAnswerAdvisor 会查询向量数据库,获取与用户问题相关的文档‍。然后从向量数据库返回的响应会被附加到用户文本中,为 ⁠AI 模型提供上下文,帮助其生成回答。

@Slf4j @Component public class CodeAssistantApp{private final ChatClient chatClient;/** * 系统提示词 */ private static final String SYSTEM_PROMPT="扮演资深的软件开发专家。开场向用户表明身份,告知用户可以提出难以解决的编程问题。\"+\n"+"\"引导用户详述问题需求,以便给出专属解决方案。";/** * 初始化ChatClient * @param chatModel */ public CodeAssistantApp(ChatModel chatModel){ChatMemory chatMemory=new InMemoryChatMemory();chatClient=ChatClient.builder(chatModel).defaultSystem(SYSTEM_PROMPT)// 拦截器 .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory), // 自定义拦截器,按需开启 new CustomLoggerAdvisor()// 自定义重读拦截器,增强推理能力,增加成本,按需开启 //new ReReadingAdvisor()).build();}/** * 基础对话(支持多轮对话记忆) * @param message * @param chatId * @return java.lang.String */ public String doChat(String message, String chatId){ChatResponse response=chatClient .prompt().user(message)// 将当前对话的 ID(chatId)传入,AI 客户端会根据这个 ID 去查找该对话的历史记录 .advisors(spec ->spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)// 表示最多获取最近的10条历史消息作为上下文,供 AI 在生成回复时参考 .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY,10)).call().chatResponse();String content="";if(Objects.nonNull(response)){content=response.getResult().getOutput().getText();}log.info("content: {}", content);returncontent;}}

7、与RAG知识库对话方法

/** * RAG 知识库 对话 * @param message * @param chatId * @return java.lang.String */ public String doChatWithRag(String message, String chatId){ChatResponse chatResponse=chatClient .prompt().user(message).advisors(spec ->spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY,10))// 开启日志 .advisors(new CustomLoggerAdvisor())// 应用知识库问答 .advisors(new QuestionAnswerAdvisor(vectorStore)).call().chatResponse();String content=chatResponse.getResult().getOutput().getText();log.info("content: {}", content);returncontent;}

8、单元测试

故意提问一个文档内有回答的问题。

文档部分内容:

@Test voiddoChatWithRag(){String chatId=UUID.randomUUID().toString();String message="进程和线程的区别";String answer=codeAssistantApp.doChatWithRag(message, chatId);Assertions.assertNotNull(answer);}

输出结果:

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2025 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》下方扫码获取~

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

以上资料如何领取?

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

以上全套大模型资料如何领取?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/16 20:01:07

工厂老板犹豫不签单?用这招击中他的决策要点

很多销售在面对工厂老板的时候&#xff0c;常常会陷入到“反复沟通却迟迟不能做出决定”的困境之中。对方看了报价、试了样品、方案也进行了修改&#xff0c;但总说&#xff1a;“再看看”“不急”“等资金到位”。其实事实上&#xff0c;老板不是不想合作&#xff0c;而是你没…

作者头像 李华
网站建设 2026/3/15 9:32:48

公链钱包开发:跨链通信、量子安全与DeFi生态的“三重革命”

引言&#xff1a;数字钱包——区块链世界的“入口之战” 2025年&#xff0c;全球加密货币用户突破5亿&#xff0c;链上资产总价值超8万亿美元。在这场金融革命中&#xff0c;数字钱包作为用户与区块链交互的核心工具&#xff0c;正经历从“存储工具”到“生态入口”的范式转变…

作者头像 李华
网站建设 2026/3/11 7:26:13

(修复方案)CVE-2021-29441: Alibaba Nacos User-Agent 存在鉴权绕过

&#xff08;修复方案&#xff09;CVE-2021-29441: Alibaba Nacos User-Agent 存在鉴权绕过 1. 升级 Nacos 版本2. 修改配置文件 以下修复方案 1 和 2 必须同时执行 1. 升级 Nacos 版本 该漏洞受影响版本&#xff1a; Nacos ≤ 2.0.0-ALPHA.1&#xff08;ALPHA是预发布版本&a…

作者头像 李华