❝
厌倦了在一堆PDF文档中翻找信息?想让AI帮你读懂那些枯燥的技术文档?别担心,今天我们就来搭建一个本地RAG系统,让你的文档变得"会说话"!
❞
什么是RAG?为什么要用它?
RAG(Retrieval-Augmented Generation)听起来很高大上,其实就是"检索增强生成"的意思。简单来说,就是让AI先从你的文档中找到相关内容,然后基于这些内容来回答你的问题。

图1:RAG的工作原理 - 从文档到答案的智能之旅
想象一下:你有一份100页的技术报告,想知道里面关于"人工智能在教育中的应用"的内容。传统方法是Ctrl+F搜索,然后人工阅读;而RAG系统会帮你找到相关段落,并用自然语言总结出答案。这就像有了一个永远不会累的研究助手!
为什么选择Spring AI + Ollama?
Spring AI:Java生态的AI新星
Spring AI是Spring家族的新成员,专门为Java开发者打造的AI框架。它的好处在于:
- 「熟悉的Spring风格」:如果你用过Spring Boot,上手Spring AI毫无压力
- 「丰富的集成」:支持多种AI模型和向量数据库
- 「简洁的API」:几行代码就能搞定复杂的AI任务
Ollama:本地AI的好伙伴
Ollama让你在本地运行各种开源AI模型,不需要:
- ❌ 昂贵的GPU服务器
- ❌ 复杂的模型部署
- ❌ 担心数据隐私
只需要一台普通电脑,就能拥有自己的AI助手!
系统架构:简单而强大
我们的RAG系统架构非常简洁,但功能强大:

图2:Spring AI RAG系统架构 - 从文档到智能问答的完整流程
这个架构的精妙之处在于:
- 「PDF阅读器」:自动解析PDF文档
- 「向量化模型」:将文档内容转换为数学向量
- 「向量存储」:高效存储和检索向量
- 「聊天模型」:基于检索到的内容生成答案
核心代码解析:不到100行的魔法
让我们看看核心实现,代码简洁得让人惊讶:
scss
@SpringBootApplication
public class SpringRagDemoApplication implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// 1. 读取PDF文档 - 就像看书一样简单
PagePdfDocumentReader reader = new PagePdfDocumentReader(
"classpath:2025-Microsoft-AI-in-Education-Report.pdf"
);
List<Document> documents = reader.read();
// 2. 初始化Ollama API
OllamaApi ollamaApi = OllamaApi.builder().build();
// 3. 创建向量化模型 - 把文字变成数学
EmbeddingModel embeddingModel = OllamaEmbeddingModel.builder()
.ollamaApi(ollamaApi)
.defaultOptions(OllamaOptions.builder()
.model("qwen2.5:latest")
.build())
.build();
// 4. 创建向量存储 - AI的记忆宫殿
VectorStore vectorStore = SimpleVectorStore.builder(embeddingModel)
.build();
// 5. 将文档存储到向量库
vectorStore.add(documents);
// 6. 创建聊天模型
ChatModel chatModel = OllamaChatModel.builder()
.ollamaApi(ollamaApi)
.defaultOptions(OllamaOptions.builder()
.model("qwen2.5:latest")
.build())
.build();
// 7. 开始智能问答 - 魔法时刻!
var result = ChatClient.builder(chatModel)
.build()
.prompt()
.advisors(new QuestionAnswerAdvisor(vectorStore))
.user("请概括文档中的内容")
.call()
.content();
System.out.println(result);
}
}
看到了吗?不到100行代码,我们就实现了一个完整的RAG系统!这就是Spring AI的魅力所在。
工作流程:AI如何理解你的文档
让我们深入了解系统的工作流程:

图3:RAG系统的工作时序图 - AI助手的一天
这个流程的精髓在于:
- 「文档预处理」:AI先"阅读"整个文档
- 「向量化存储」:将文档内容转换为AI能理解的格式
- 「智能检索」:根据用户问题找到相关内容
- 「增强生成」:基于检索到的内容生成答案
快速上手:5分钟搭建你的AI助手
环境准备
ruby
# 1. 安装Ollama(macOS用户)
brew install ollama
# 2. 启动Ollama服务
ollama serve
# 3. 下载中文模型
ollama pull qwen2.5:latest
运行项目
bash
# 克隆项目
git clone https://gitee.com/martinzh717/spring-ai-rag-demo
cd spring-rag-demo
# 一键运行
mvn clean compile exec:java -Dexec.mainClass="cn.jishuba.spring.rag.SpringRagDemoApplication"
就这么简单!你的AI文档助手就开始工作了。
项目结构:简洁而完整
bash
spring-rag-demo/
├── 📄 pom.xml # Maven配置 - 依赖管理
├── 📖 README.md # 项目说明
└── src/main/
├── java/cn/jishuba/spring/rag/
│ └── 🚀 SpringRagDemoApplication.java # 核心代码
└── resources/
└── 📄 2025-Microsoft-AI-in-Education-Report.pdf # 示例文档
整个项目结构非常清晰,核心代码只有一个文件!这就是Spring AI的威力 - 用最少的代码实现最强的功能。
技术细节:深入理解RAG的工作原理
文档向量化:让AI理解文本

图4:文档向量化过程 - 从文字到数学的转换
向量化是RAG系统的核心技术。AI模型会将文本转换为高维向量,相似的文本会有相似的向量。这样,当用户提问时,系统就能找到最相关的文档片段。
相似性搜索:AI如何找到相关内容
AI通过计算向量之间的相似度来找到相关内容。这就像在多维空间中找到最近的邻居一样。
实际应用场景:RAG能为你做什么?
- 「技术文档问答」:快速找到API使用方法
- 「学习资料总结」:提取知识点和重要概念
- 「合同条款查询」:快速定位特定条款
- 「研究报告分析」:提取关键数据和结论
总结:AI时代的文档处理新方式
通过这个Spring AI RAG演示项目,我们看到了:
- 「技术门槛降低」:不需要深度学习专业知识
- 「部署简单」:本地运行,无需云端服务
- 「效果显著」:智能问答,提高工作效率
- 「扩展性强」:可以轻松添加新功能
RAG技术正在改变我们处理文档的方式。想象一下,你的所有技术文档、学习资料、研究报告都能"开口说话",随时回答你的问题。这不是科幻,而是现在就能实现的技术!
如果这篇文章对你有帮助,别忘了点个赞哦!有问题欢迎在评论区讨论。