news 2026/2/8 16:43:58

【珍藏】一文搞懂大模型RAG技术,Spring AI实现全流程解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【珍藏】一文搞懂大模型RAG技术,Spring AI实现全流程解析

RAG概念

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与文本生成的技术,旨在提升大语言模型(LLM)生成内容的准确性和时效性。其核心思想是通过外部知识库动态补充生成所需的信息,从而弥补传统LLM仅依赖训练数据、可能产生“幻觉”或过时回答的缺陷。

简单来说,RA؜G 就像给 AI 配了一个‎知识库,让 AI 回答问题前先查一查特定的知识‍库来获取知识,确保回答是基⁠于真实资料而不是凭空想象。

通过 RAG 技术改造后,AI 就能:

  • 准确回答关于特定内容的问题。
  • 在合适的时机推荐相关课程和服务。
  • 用特定的语气和用户交流。
  • 提供更新、更准确的建议。

Spring AI 为我们实现RAG提供了全流程的支持,接下来就用 Spring AI 实现一个基于本地知识库的 AI 问答。

01准备环境

开发工具:IDEA

构建工具:Gradle

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

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

02引入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'

03准备知识库文档

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

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

04文档读取

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

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

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

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

@Component@Slf4jpublic 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); } return documentList; }}

05向量转换和存储

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

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

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

@Configurationpublic 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); return simpleVectorStore; }}

06查询增强

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

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

@Slf4j@Componentpublic 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); return content; }}

07与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); return content; }

08单元测试

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

文档部分内容:

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

输出结果:

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01教学内容

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例:带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

vx扫描下方二维码即可

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:

04视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)

05行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!

0690+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

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

Python房价趋势分析:构建智能房价监控爬虫系统

一、前言&#xff1a;数据驱动的房地产市场洞察在当今快速变化的房地产市场中&#xff0c;掌握房价趋势对于投资者、购房者和政策制定者都至关重要。传统的房价数据分析往往依赖于官方发布的季度或年度报告&#xff0c;这种滞后性使得实时决策变得困难。本文将通过构建一个先进…

作者头像 李华
网站建设 2026/2/8 3:26:34

HeyGem是否支持并发任务?系统队列机制深度解析

HeyGem是否支持并发任务&#xff1f;系统队列机制深度解析 在AI数字人内容创作日益普及的今天&#xff0c;越来越多的企业和个人开始尝试批量生成口型同步视频。无论是制作系列课程、产品宣传&#xff0c;还是打造虚拟主播内容矩阵&#xff0c;用户都希望系统能“一口气处理多个…

作者头像 李华
网站建设 2026/2/7 22:14:31

ASG三权模式下各管理员的职责是什么

本文档提供了ASG系列产品的维护指导。 文章目录ASG三权模式下各管理员的职责是什么三权模式可以切换到普通模式吗三个默认管理员账号是否可编辑普通模式切换到三权模式后&#xff0c;原来的系统管理员、审计员账号还可以登录吗三权模式下&#xff0c;新建的管理员下可以再创建管…

作者头像 李华
网站建设 2026/2/7 14:30:06

为什么推荐使用批量处理模式?效率提升三倍以上

为什么推荐使用批量处理模式&#xff1f;效率提升三倍以上 在企业级数字内容生产日益自动化的今天&#xff0c;一个看似简单的视频生成流程&#xff0c;往往隐藏着巨大的效率瓶颈。比如&#xff0c;一家教育公司需要为同一段课程音频&#xff0c;生成由不同“数字人”形象讲解的…

作者头像 李华
网站建设 2026/2/6 23:21:16

使用IE浏览器https无法访问设备Web界面

本文档提供了ASG系列产品的维护指导。 文章目录使用IE浏览器https无法访问设备Web界面使用IE浏览器https无法访问设备Web界面 IE浏览器因对证书安全检验级别较高&#xff0c;公司私有证书网站浏览器会禁止用户继续访问&#xff0c;导致无法通过https访问设备。 推荐使用火狐、…

作者头像 李华