Spring AI 2.0实战:Java零代码接入大模型+RAG知识库,企业级直接上线
如果你是个Java老炮,过去几年看着Python那帮兄弟在大模型领域呼风唤雨,心里肯定不是滋味。人家用几行Python代码就能调GPT、搭知识库,咱们Java这边还在吭哧吭哧写HTTP客户端,感觉就像别人都在开特斯拉了,我们还在手摇启动拖拉机。好消息是,Spring AI 2.0来了。这玩意儿简直就是给Java程序员发了一张"AI头等舱机票"——不用换语言、不用学Python,靠着咱们熟悉的Spr
文章目录
无意间发现了一个CSDN大神的人工智能教程,忍不住分享一下给大家。很通俗易懂,重点是还非常风趣幽默,像看小说一样。床送门放这了👉 http://blog.csdn.net/jiangjunshow
前言
如果你是个Java老炮,过去几年看着Python那帮兄弟在大模型领域呼风唤雨,心里肯定不是滋味。人家用几行Python代码就能调GPT、搭知识库,咱们Java这边还在吭哧吭哧写HTTP客户端,感觉就像别人都在开特斯拉了,我们还在手摇启动拖拉机。
好消息是,Spring AI 2.0来了。这玩意儿简直就是给Java程序员发了一张"AI头等舱机票"——不用换语言、不用学Python,靠着咱们熟悉的Spring Boot那一套,几行配置就能让Java应用用上大模型,还能搭企业级的RAG知识库。
2025年12月11日,Spring AI 2.0.0 M1正式发布,今年1月又发布了M2版本。这次更新可不是小打小闹,而是直接基于Spring Boot 4和Java 21重构,把AI能力彻底整合进了Spring生态。本文就带你用最新的Spring AI 2.0,从零开始搭建一个能直接上线的大模型应用。
一、Spring AI 2.0到底牛在哪?
1.1 告别"二等公民"身份
之前的Java AI库,说白了都是对着OpenAI的API做HTTP包装,感觉像个外包翻译官。Spring AI 2.0不一样,它直接提供了原生的模型抽象层,支持OpenAI、Anthropic、Google Gemini、AWS Bedrock、Ollama本地模型等十几种后端。
打个比方,以前咱们调用大模型像是给外国朋友写信,得自己找翻译。现在Spring AI 2.0相当于给你配了个联合国同声传译,你说中文(Java代码),它自动帮你转换成各个模型听得懂的语言,而且切换模型就像换数据库连接池一样简单。
1.2 企业级功能开箱即用
M2版本带来的新特性简直是为企业量身定做:
- 向量存储大扩容:除了之前的PGVector、Redis,现在还支持Amazon S3、Infinispan、Amazon Bedrock Knowledge Base
- 语义缓存:用Redis做语义级缓存,相同意思的问题不会重复调用模型,省下一大笔API费用
- 结构化输出:Mistral AI和Ollama都支持JSON Schema验证,让模型输出从"开盲盒"变成"对答案"
- 工具调用增强:支持动态修改工具定义,还能开启对话历史记录
最爽的是模块化自动配置——你引入哪个模型的starter,它就自动配置哪个,不会一股脑全加载,启动速度快了不少。
二、环境准备:工欲善其事
2.1 硬指标检查
Spring AI 2.0对环境有硬性要求:
- Java 21+:必须支持虚拟线程(Virtual Threads)和模式匹配
- Spring Boot 4.0+:基于Spring Framework 7.0构建
- Maven/Gradle:能连上Spring的里程碑仓库(Milestone Repository)
如果你还在用Java 8,兄弟,该升级了。Java 21的虚拟线程对AI应用特别重要——大模型API调用都是IO密集型操作,虚拟线程能让你的服务用少量线程处理大量并发请求。
2.2 项目初始化
去Spring Initializr https://start.spring.io/创建项目,选Spring Boot 4.0(目前可能是快照版),依赖里勾上"Spring AI"。或者直接抄我这份pom.xml:
4.0.0
org.springframework.boot
spring-boot-starter-parent
4.0.0-SNAPSHOT
21
2.0.0-M2
org.springframework.boot
spring-boot-starter-web
org.springframework.ai
spring-ai-starter-model-openai
org.springframework.ai
spring-ai-pgvector-store
org.springframework.ai
spring-ai-bom
${spring-ai.version}
pom
import
注意:因为还是里程碑版本,你需要在pom.xml里加上Spring的里程碑仓库地址(具体配置查一下Spring官方文档,这里不展开)。
三、零代码接入:ChatClient API
Spring AI 2.0最核心的API就是ChatClient,它的设计理念跟RestClient(Spring 6.1引入)保持一致,流畅API写起来特别顺手。
3.1 基础配置
在application.yml里配好你的API密钥:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o-mini
temperature: 0.7
如果你用Ollama本地模型(强烈推荐开发环境用这个,省接口费):
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
model: qwen2.5:7b
init:
pull-model-strategy: when-missing # 自动拉模型,懒人福音
3.2 第一个AI接口
写个Controller,五分钟搞定:
@RestController
@RequestMapping("/api/ai")
public class ChatController {
private final ChatClient chatClient;
// 构造器注入,Spring会自动装配
public ChatController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder
.defaultSystem("你是个经验丰富的Java技术专家,回答问题简洁明了")
.build();
}
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.call() // 同步调用
.content();
}
@GetMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux chatStream(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.stream() // 流式输出,打字机效果
.content();
}
}
看到没?全程没出现RestTemplate、WebClient那些样板代码,也没有JSON解析的繁琐步骤。ChatClient把模型调用、错误处理、重试机制全包圆了,这就是Spring的"约定大于配置"哲学。
3.3 结构化输出实战
之前让模型输出JSON得像哄小孩一样写提示词,现在Spring AI 2.0支持结构化输出。定义个Java记录类:
public record TechArticle(String title, String summary, List tags) {}
然后这样调:
@GetMapping("/generate-article")
public TechArticle generateArticle(@RequestParam String topic) {
return chatClient.prompt()
.user("请写一篇关于" + topic + "的技术文章大纲")
.call()
.entity(TechArticle.class); // 自动映射到Java对象
}
Spring AI会自动生成JSON Schema约束模型输出,再也不用担心模型给你返回"差不多长这样"的野路子JSON了。
四、RAG知识库:让企业数据"活"起来
光有聊天功能不够香,企业真正想要的是让自己的文档开口说话。RAG(检索增强生成)就是干这个的——把公司内部的PDF、Word、数据库内容塞进向量库,AI回答问题时先查资料再张嘴。
4.1 架构原理(说人话版)
想象你是个新入职的客服,客户问个复杂问题,你咋办?肯定是先翻公司的知识库(检索),找到相关资料后组织语言回答(生成)。RAG就是让AI扮演这个聪明客服:
- 文档切片:把长文档切成小段(好比把厚书拆成便签纸)
- 向量化:用嵌入模型把文字转成数学向量(好比给每个便签纸编个独一无二的条形码)
- 语义检索:用户提问时,把问题也转成向量,去库里找最相近的文档片段
- 增强生成:把检索到的资料塞进提示词,让模型基于这些资料回答
Spring AI 2.0用Advisor机制实现RAG,比1.x版本优雅多了。
4.2 向量存储配置
这里用PGVector(PostgreSQL的向量扩展),生产环境最稳的选择:
spring:
ai:
vectorstore:
pgvector:
dimensions: 1536 # OpenAI embedding维度
index-type: hnsw # 高速索引算法
initialize-schema: true # 自动建表
如果用Ollama的本地嵌入模型(比如nomic-embed-text),记得改维度:
spring:
ai:
ollama:
embedding:
model: nomic-embed-text
dimensions: 768
4.3 文档入库
假设你有一批技术文档要入库:
@Service
public class DocumentService {
private final VectorStore vectorStore;
public DocumentService(VectorStore vectorStore) {
this.vectorStore = vectorStore;
}
public void ingestDocuments() {
// 1. 读取文档(支持PDF、Word、TXT)
var reader = new PagePdfDocumentReader("classpath:docs/spring-boot-reference.pdf");
List documents = reader.read();
// 2. 切片策略:每500字符一段,重叠100字符保持连贯性
var splitter = new TokenTextSplitter(500, 100, 50, 50, true);
List chunks = splitter.apply(documents);
// 3. 写入向量库(自动做embedding)
vectorStore.add(chunks);
}
}
这里TokenTextSplitter是个智能切片器,不会傻傻地按字符切,而是尽量保持句子完整,就像切蛋糕时尽量不切到水果块。
4.4 RAG查询实现
关键来了——怎么让AI回答时自动查库?Spring AI 2.0的RetrievalAugmentationAdvisor帮你搞定:
@RestController
@RequestMapping("/api/knowledge")
public class KnowledgeController {
private final ChatClient chatClient;
public KnowledgeController(ChatClient.Builder builder, VectorStore vectorStore) {
// 配置文档检索器
DocumentRetriever retriever = VectorStoreDocumentRetriever.builder()
.vectorStore(vectorStore)
.similarityThreshold(0.7) // 相似度阈值,过滤无关内容
.topK(3) // 取最相关的3段
.build();
// 组装RAG Advisor
RetrievalAugmentationAdvisor ragAdvisor = RetrievalAugmentationAdvisor.builder()
.documentRetriever(retriever)
.build();
// 把Advisor注入ChatClient
this.chatClient = builder
.defaultAdvisors(ragAdvisor)
.build();
}
@GetMapping("/ask")
public String ask(@RequestParam String question) {
return chatClient.prompt()
.user(question)
.call()
.content();
}
}
当用户问"Spring Boot怎么配置数据源?"时,RetrievalAugmentationAdvisor会自动:
- 把问题转成向量
- 去PGVector里搜相关文档片段
- 把搜到的内容塞进系统提示词里
- 让模型基于这些资料回答
整个过程对用户透明,但回答质量直接从"通用废话"升级为"专业解答"。
五、多模型切换:东方不亮西方亮
企业级应用不能吊死在一棵树上,今天OpenAI限流,明天Gemini降价,得能灵活切换。Spring AI 2.0的抽象层让这事儿变得简单。
5.1 配置多个模型
spring:
ai:
openai:
api-key: ${OPENAI_KEY}
ollama:
base-url: http://localhost:11434
anthropic:
api-key: ${CLAUDE_KEY}
5.2 动态选择模型
@Service
public class MultiModelService {
private final ChatClient openaiClient;
private final ChatClient ollamaClient;
public MultiModelService(ChatClient.Builder builder) {
this.openaiClient = builder
.defaultOptions(OpenAiChatOptions.builder().model("gpt-4o").build())
.build();
this.ollamaClient = builder
.defaultOptions(OllamaOptions.builder().model("qwen2.5:14b").build())
.build();
}
public String smartChat(String message, String complexity) {
// 简单问题用本地模型,复杂问题调GPT-4
if ("low".equals(complexity)) {
return ollamaClient.prompt().user(message).call().content();
} else {
return openaiClient.prompt().user(message).call().content();
}
}
}
5.3 本地模型生产力
Ollama现在支持工具调用(Function Calling)了,这意味着本地模型也能操作你的Java方法。比如让模型查数据库:
@Bean
public FunctionCallback stockPriceFunction() {
return FunctionCallback.builder()
.function("getStockPrice", (StockRequest request) -> {
// 查数据库逻辑
return new StockResponse("AAPL", 150.0);
})
.description("获取股票实时价格")
.inputType(StockRequest.class)
.build();
}
// 使用
chatClient.prompt()
.user("苹果股票现在多少钱?")
.functions("getStockPrice")
.call();
六、企业级上线的"避坑指南"
6.1 性能调优
连接池配置:大模型API调用是IO密集型,Spring AI 2.0基于Java 21虚拟线程,记得配置:
spring:
threads:
virtual:
enabled: true
语义缓存:启用Redis缓存避免重复提问烧接口费:
spring:
ai:
chat:
advisors:
semantic-cache:
enabled: true
redis:
ttl: 3600 # 缓存1小时
6.2 监控与熔断
AI服务不稳定是常态,必须加熔断器。用Spring Cloud CircuitBreaker包装你的AI调用:
@CircuitBreaker(name = "aiService", fallbackMethod = "fallbackAnswer")
public String askAI(String question) {
return chatClient.prompt().user(question).call().content();
}
public String fallbackAnswer(String question, Exception ex) {
return "AI服务暂时繁忙,请稍后再试";
}
6.3 成本控制
生产环境记得设限流:
spring:
ai:
chat:
rate-limit:
requests-per-minute: 100 # 每分钟最多100次
七、总结:Java AI开发的"安卓时刻"
Spring AI 2.0的出现,标志着Java在AI领域从"看客"变成了"玩家"。它没打算让Java取代Python在算法研究中的地位,而是瞄准了企业级AI应用这块蛋糕——这正是Java的主场。
几行配置就能接入多模型、半小时搭好RAG知识库、原生支持函数调用和结构化输出,这些特性让Java开发者不用再羡慕Python的生态。加上Spring Boot成熟的微服务体系,AI能力可以无缝集成进现有的企业架构。
2026年的AI开发,不再是单一语言的独角戏。Python做算法、Java做工程、前端做界面,各司其职才是正道。如果你是个Java程序员,现在就是上车的最佳时机——毕竟,看着别人吃肉自己喝汤的滋味,不好受吧?
赶紧把Spring AI 2.0用起来,让你的Java应用也长出"AI大脑"。
参考链接:
- Spring AI 2.0.0 M2 Release Notes
- Spring AI 2.0 + Spring Boot 4 Guide
- RAG with Docling and Spring AI
- Using RAG and Vector Store with Spring AI
- Spring AI Ollama Tool Support
更多推荐

所有评论(0)