Spring AI 实战进阶:Ollama+Spring AI 构建离线大模型应用全指南
·
前言
随着大模型技术的普及,企业对数据安全、隐私合规的要求越来越高,离线部署大模型成为 Java 后端开发者的核心需求。Spring AI 作为 Spring 生态的 AI 集成框架,搭配 Ollama 本地大模型运行工具,可快速构建完全离线、数据不出网的 AI 应用。本文基于实战场景,从零带你完成环境搭建、API 集成、功能开发,适合 Java 后端开发者快速上手 Spring AI 离线大模型开发。
一、技术选型与核心优势
1. 核心技术栈
| 技术 | 作用 | 优势 |
|---|---|---|
| Spring AI | Spring 生态 AI 集成框架 | 无缝对接 Spring Boot,统一大模型调用 API,支持多模型适配 |
| Ollama | 本地大模型运行工具 | 一键部署开源大模型(Llama 3、Qwen、Mistral 等),支持离线运行 |
| Spring Boot 3.x | 后端基础框架 | 快速构建项目,自动配置简化开发 |
2. 方案核心优势
- ✅ 完全离线:所有数据在本地服务器运行,无需公网 API,保障数据安全
- ✅ 生态兼容:Spring AI 完美适配 Spring Boot,可直接集成现有 Java 项目
- ✅ 模型灵活:Ollama 支持上百种开源大模型,可按需切换,适配不同业务场景
- ✅ 开发高效:Spring AI 封装了大模型调用、提示词管理、向量检索等能力,减少重复开发
二、环境搭建:Ollama+Spring Boot 项目初始化
1. Ollama 本地部署(Windows/Linux/Mac 通用)
- 下载 Ollama:官网 https://ollama.com/ ,一键安装完成
- 拉取开源大模型(以 Qwen 7B 为例,适合本地部署)
bash
# 拉取通义千问开源7B模型 ollama pull qwen:7b # 验证模型是否安装成功 ollama list # 启动模型服务(默认端口11434) ollama run qwen:7b - 验证服务:访问
http://localhost:11434,出现 Ollama 标识即部署成功
2. Spring Boot 项目初始化
- 使用 Spring Initializr 创建项目,依赖选择:
- Spring Web
- Spring AI Ollama(Spring AI 0.8.x + 版本支持)
pom.xml核心依赖配置:xml
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> <version>0.8.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>application.yml配置 Ollama 连接:yaml
spring: ai: ollama: base-url: http://localhost:11434 model: qwen:7b # 对应Ollama中拉取的模型
三、核心功能实战:从基础对话到业务集成
1. 基础大模型对话接口开发
创建 AI 服务接口,实现与本地大模型的对话交互:
java
@RestController
@RequestMapping("/ai")
public class AIController {
@Autowired
private OllamaChatClient ollamaChatClient;
@GetMapping("/chat")
public String chat(@RequestParam String prompt) {
// 调用本地大模型生成回复
return ollamaChatClient.call(prompt);
}
}
启动项目后,访问 http://localhost:8080/ai/chat?prompt=介绍一下Spring AI ,即可获取本地大模型的回复,全程离线无公网请求。
2. 提示词工程优化:提升大模型输出质量
Spring AI 支持提示词模板,可动态注入参数,适配业务场景:
java
@GetMapping("/chat/template")
public String chatWithTemplate(@RequestParam String question) {
PromptTemplate promptTemplate = new PromptTemplate(
"你是一名资深Java后端工程师,用通俗易懂的语言回答用户问题:{question}"
);
Prompt prompt = promptTemplate.create(Map.of("question", question));
return ollamaChatClient.call(prompt).getResult().getOutput().getContent();
}
3. 进阶功能:RAG 检索增强生成(本地知识库)
结合 Ollama 的向量模型,构建本地知识库,实现基于自有数据的问答:
- 配置向量模型:
yaml
spring: ai: ollama: embedding: model: nomic-embed-text - 加载本地文档,构建向量库:
java
@Autowired private OllamaEmbeddingClient embeddingClient; @Autowired private VectorStore vectorStore; @PostConstruct public void initKnowledgeBase() { // 加载本地PDF/Markdown文档 List<Document> documents = new TextReader(new FileSystemResource("docs/backend-knowledge.md")).read(); // 生成向量并存入向量库 vectorStore.add(documents); } - 实现知识库问答:
java
@GetMapping("/rag/chat") public String ragChat(@RequestParam String query) { // 检索相关知识库内容 List<Document> similarDocs = vectorStore.similaritySearch(query); // 构建增强提示词 String context = similarDocs.stream().map(Document::getContent).collect(Collectors.joining("\n")); String prompt = "基于以下知识库内容回答问题:\n" + context + "\n问题:" + query; return ollamaChatClient.call(prompt); }
四、生产环境优化与避坑指南
1. 性能优化
- 模型选型:根据服务器配置选择模型,8G 内存推荐 7B 模型,16G + 推荐 14B 模型
- 服务部署:Ollama 以守护进程运行,Spring Boot 项目打包为 Jar 包后台启动
- 并发优化:配置 Ollama 并发数,Spring AI 添加接口限流,避免大模型服务过载
2. 常见问题排查
- ❌ 连接超时:检查 Ollama 服务是否启动,端口 11434 是否被占用
- ❌ 模型加载失败:确认 Ollama 中模型拉取完整,模型名称与配置一致
- ❌ 响应缓慢:本地大模型推理耗时与硬件相关,可更换轻量化模型提升速度
3. 安全合规
- 严格控制大模型输入输出,避免敏感数据泄露
- 开源大模型商用需遵守对应开源协议(如 Llama 3 商用授权)
- 离线部署需定期更新模型补丁,修复安全漏洞
五、总结与拓展
本文基于 Spring AI+Ollama,完整实现了离线大模型应用的搭建与开发,涵盖环境部署、基础对话、RAG 知识库等核心功能,可直接应用于企业内部 AI 助手、代码辅助、文档问答等场景。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)