Spring Boot 3.x + Spring AI 实战:Java 一键对接本地大模型,告别 Python 中间层
文章目录
无意间发现了一个CSDN大神的人工智能教程,忍不住分享一下给大家。很通俗易懂,重点是还非常风趣幽默,像看小说一样。床送门放这了👉 http://blog.csdn.net/jiangjunshow
一、被 Python"绑架"的 Java 程序员,终于等来了救兵
兄弟们,有没有遇到过这种糟心事儿?你在 Java 项目里想接个大模型,结果网上一搜教程,清一色的 Python 代码。你硬着头皮搭了个 Python 中间层,结果维护起来比写业务代码还痛苦——环境配置三天两头崩,依赖包版本冲突像俄罗斯套娃,部署上线还得搞两个服务,监控日志两头看,出问题跟破案似的两边排查。
这就好比你想吃顿火锅,非得当个"二道贩子":先把食材交给隔壁 Python 厨子加工,再端回 Java 餐桌上。食材凉不凉另说,万一隔壁厨子撂挑子(Python 服务挂了),你的 Java 服务也得跟着吃瘪。
直到 2025 年 5 月,Spring AI 1.0 GA 正式发布,这事儿才有了转机。简单来说,Spring AI 就是给 Java 程序员发了一套"直通大模型"的 VIP 卡,让你用纯 Java 就能直接调用 OpenAI、DeepSeek、Llama 等各种模型,彻底告别 Python 中间层这个"中间商"。
二、Spring AI 1.0:Java 生态的"AI 万能适配器"
2.1 这玩意儿到底能干啥?
Spring AI 1.0 最牛的地方,是它搞了个统一的 ChatClient 接口。这就像是手机充电口的 Type-C 标准,不管你插的是苹果、安卓还是充电宝,接口都一样。你用 ChatClient 写的代码,今天接 OpenAI 的 GPT-4,明天切到本地部署的 Llama 3,只需要改配置文件,业务代码一行不用动。
它支持 20 多种模型,包括咱们熟悉的 DeepSeek、智谱、MiniMax,还有 Claude、Mistral 这些洋货。更狠的是,它把 RAG(检索增强生成)、向量数据库、对话记忆管理、函数调用这些高级玩法都封装成了 Spring 风格的 API,说白了就是让你用 Spring 的套路(依赖注入、自动配置)来玩 AI。
2.2 版本号别搞错
这里得敲个黑板:Spring AI 现在的正式版是 1.0 GA(2025 年 5 月 20 日发布),不是啥 3.x。如果你看到有人说 Spring AI 3.x,那是把 Spring Boot 3.x 和 Spring AI 搞混了。Spring Boot 3.2 以上版本能跑 Spring AI 1.0,但 Spring AI 本身还是 1.0 版本。
三、Ollama:零成本本地跑大模型的"神器"
要玩本地大模型,首先得把模型跑起来。这里推荐 Ollama,这工具堪称"本地大模型界的 Docker"。你只需要一条命令,就能把 Llama 3、DeepSeek、Mistral 这些模型拉到本地跑,完全免费,不需要显卡也能玩(就是慢点)。
3.1 安装 Ollama
去官网下载对应系统的安装包,Windows、macOS、Linux 都支持。装完后命令行输入:
ollama --version
能看到版本号就说明装好了。默认情况下,Ollama 会在本地开启一个 HTTP 服务,端口是 11434,这就是咱们 Java 程序要对接的入口。
3.2 拉取模型
假设咱们要跑 DeepSeek-R1 的 7B 版本(个人电脑能带动的尺寸):
ollama pull deepseek-r1:7b
等进度条跑完,模型就下载到本地了。你可以先测试一下:
ollama run deepseek-r1:7b
这时候会进入交互模式,你可以直接跟模型聊天。按 Ctrl+D 退出。
四、Spring Boot 集成实战:30 分钟跑通第一个 AI 接口
4.1 项目初始化
打开 Spring Initializr https://start.spring.io/,选择:
- Project: Maven
- Language: Java
- Spring Boot: 3.2.x 或 3.3.x(必须 3.2 以上)
- Dependencies: 添加 Spring Web 和 Spring AI
或者直接用命令行:
spring init --dependencies=web,ai my-ai-app
4.2 Maven 依赖配置
在 pom.xml 里引入 Spring AI 的 BOM 管理,这样版本号不用一个个敲:
org.springframework.ai
spring-ai-bom
1.0.0
pom
import
注意这里的 version 是 1.0.0,对应 2025 年 5 月的 GA 版本。
4.3 配置文件
在 application.yml 里写上:
server:
port: 8080
spring:
ai:
ollama:
base-url: http://localhost:11434 # Ollama 默认地址
chat:
model: deepseek-r1:7b # 刚才下载的模型名
options:
temperature: 0.7 # 创造性参数,0.0-1.0
num-ctx: 4096 # 上下文窗口大小
这里的 temperature 参数得解释一下:它控制模型回答的"脑洞大小"。设成 0.1,模型就像个严谨的老教授,一板一眼;设成 0.9,模型就像喝了假酒的诗人,回答可能天马行空。一般业务场景设 0.7 比较 balanced。
4.4 编写第一个 AI 服务
Spring AI 1.0 推荐使用 ChatClient 模式,这是现在的主流写法:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;
@Service
public class AiChatService {
private final ChatClient chatClient;
// 构造器注入,Spring 会自动装配
public AiChatService(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
/**
* 同步调用,适合短回答场景
*/
public String chat(String message) {
return chatClient.prompt()
.user(message) // 用户输入
.call() // 发起调用
.content(); // 获取文本内容
}
/**
* 流式调用,适合长文本生成(打字机效果)
*/
public Flux chatStream(String message) {
return chatClient.prompt()
.user(message)
.stream() // 开启流式
.content();
}
}
看到没?代码简洁得令人发指。没有 Python 中间层,没有 HTTP 客户端手动拼请求,就像调用本地方法一样自然。
4.5 控制器层暴露接口
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
@RestController
@RequestMapping("/api/ai")
public class ChatController {
private final AiChatService chatService;
public ChatController(AiChatService chatService) {
this.chatService = chatService;
}
@GetMapping("/chat")
public String chat(@RequestParam String msg) {
return chatService.chat(msg);
}
@GetMapping(value = "/chat/stream", produces = "text/stream;charset=UTF-8")
public Flux chatStream(@RequestParam String msg) {
return chatService.chatStream(msg);
}
}
4.6 跑起来测试
启动 Spring Boot 应用,打开浏览器或者 Postman:
GET http://localhost:8080/api/ai/chat?msg=你好,请介绍一下Spring AI
如果一切顺利,你会看到模型返回的问候和介绍。这时候打开你的 IDEA 控制台,观察日志,你会发现请求直接发到了本地的 11434 端口,没有经过任何中间商。
五、进阶玩法:让本地模型"长出三头六臂"
5.1 函数调用:让 AI 能查数据库、调接口
大模型虽然聪明,但它不知道你家数据库里有啥数据。Spring AI 支持函数调用(Function Calling),你可以把 Java 方法"注册"给模型,让模型自己决定什么时候调用。
比如咱们写个查天气的工具:
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;
@Service
public class WeatherService {
@Tool(name = "getWeather", description = "查询指定城市的当前天气")
public String getWeather(String city) {
// 这里可以对接第三方天气 API
return city + "今天晴天,25度,适合写代码";
}
}
然后在服务层启用工具:
public String chatWithTools(String message) {
return chatClient.prompt()
.user(message)
.tools(new WeatherService()) // 注入工具
.call()
.content();
}
这时候如果你问模型"北京今天天气怎么样",模型会自动识别需要调用 getWeather 方法,并把"北京"作为参数传进去。这就像是给 AI 装上了"手",能实际操作你的业务系统。
5.2 对话记忆:让 AI 记得你们聊过啥
默认情况下,大模型是"金鱼记忆",每次请求都是独立的。要实现连续对话,得手动把历史记录带过去。Spring AI 提供了 ChatMemory 接口:
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AiConfig {
@Bean
public ChatMemory chatMemory() {
// 内存存储,生产环境建议换成 JDBC 或 Redis
return new InMemoryChatMemory();
}
}
然后在对话时指定会话 ID:
public String chatWithMemory(String sessionId, String message) {
return chatClient.prompt()
.user(message)
.advisors(new MessageChatMemoryAdvisor(chatMemory, sessionId, 10)) // 保留最近10轮
.call()
.content();
}
这样 AI 就能记得"刚才我说了什么",实现真正的对话流。
5.3 RAG 简易实现:让 AI 读你的私有文档
RAG(检索增强生成)简单来说就是:先把你的 PDF、Word 切分成小块,转成向量存进向量数据库。问问题时,先搜出相关的片段,再把这些片段塞给大模型当"参考资料"。
Spring AI 1.0 内置了 ETL 框架,能自动处理文档分块和向量化。配合 QuestionAnswerAdvisor,实现 RAG 只需要几行代码:
public String ragQuery(String query) {
return chatClient.prompt()
.user(query)
.advisors(new QuestionAnswerAdvisor(vectorStore)) // 自动检索相关文档
.call()
.content();
}
这里 vectorStore 可以是 Redis、PostgreSQL、Milvus 等 20 多种向量数据库。
六、生产环境踩坑指南
6.1 超时问题
本地模型生成速度比云 API 慢得多,尤其是 CPU 跑大模型时。Spring Boot 默认的 HTTP 超时可能不够用,得在配置里调大:
spring:
ai:
ollama:
client:
connect-timeout: 5000 # 连接超时 5 秒
read-timeout: 120000 # 读取超时 2 分钟
如果是流式输出,超时设置可以适当放宽,因为数据是慢慢吐出来的。
6.2 显存与内存管理
Ollama 默认会把模型一直 loaded 在内存里,这样响应快,但占资源。如果你服务器内存紧张,可以设置 keep-alive 时间:
spring:
ai:
ollama:
chat:
options:
keep-alive: "5m" # 5分钟没请求就卸载模型
这样虽然下次请求会有几秒的加载延迟,但能省不少内存。
6.3 模型选择建议
- 开发测试:用 deepseek-r1:1.5b 或 llama3.2:3b,体积小、速度快,虽然笨点但省资源
- 生产环境:如果机器够劲,用 qwen2.5:14b 或 deepseek-r1:7b,中文能力和推理能力都更强
- GPU 加速:如果有 NVIDIA 显卡,Ollama 会自动调用 CUDA 加速,生成速度能快 5-10 倍
七、写在最后
Spring AI 1.0 的出现,标志着 Java 生态正式"入局"大模型赛道。以前咱们 Java 程序员想玩 AI,总得被 Python"卡脖子",现在终于可以用最熟悉的 Spring Boot 套路,纯 Java 搞定从开发到部署的全流程。
本地部署 + Spring AI 的组合,特别适合那些数据敏感(不想把数据发到公网)、成本敏感(不想按 Token 付费)、或者网络受限(内网环境)的场景。虽然本地模型的能力暂时还追不上 GPT-4o,但像 DeepSeek-R1、Qwen2.5 这些开源模型,处理日常业务问答、代码辅助、文档总结已经绰绰有余。
更重要的是,你再也不用在 Java 和 Python 之间来回横跳,维护两套技术栈了。一个 ChatClient,几行配置,就能让你的 Spring Boot 应用插上 AI 的翅膀。这就像是给老伙计配了把新钥匙,开门的方式没变,但能进的房间更多了。
赶紧找个闲置的笔记本,装上 Ollama,搭个 Spring Boot 项目试试吧。记住,2025 年的 Java 程序员,玩 AI 不需要会 Python,只需要会 Spring。
无意间发现了一个CSDN大神的人工智能教程,忍不住分享一下给大家。很通俗易懂,重点是还非常风趣幽默,像看小说一样。床送门放这了👉 http://blog.csdn.net/jiangjunshow

更多推荐
所有评论(0)