前言
Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。
核心技术官网地址:
Spring AI Alibaba 官网地址:https://java2ai.com/
ollama官网地址:https://ollama.com/
一、技术选型说明
1. 核心组件
-
Spring Boot 3.5.7:后端服务基础框架
-
spring-ai-ollama-spring-boot-starte:alibaba官方AI集成框架(1.0.0-M6版本)
-
Ollama:本地大模型运行环境(支持Llama2、Mistral等模型)
2. 环境要求
- JDK 17+
- 8GB+ 内存(运行大模型需要)
- ollama version is 0.5.13
二、环境准备
1. 安装Ollama
- Ollama官网安装
官网地址:https://ollama.com/
官网下载window版本地址:https://ollama.com/download

- 百度网盘下载安装
百度网盘地址:https://pan.baidu.com/s/1mx_3R4NVjOSC9D8BaGdYHg?pwd=9eg7

- 运行OllamaSetup安装包
- 双击OllamaSetup.exe
- 安装包点击:Install

- 安装成功

(截图示例:终端执行ollama --version)
2. 下载模型
本教程使用的模型:deepseek-r1:7b
模型运行下载命令:ollama run deepseek-r1:7b
(默认是 7B 版本,轻量化且易下载)
操作步骤:
Ollama 的工作机制是:模型需要先下载到本地才能调用
-
下载 Deepseek 模型到本地
打开命令行(CMD/PowerShell),执行 Ollama 模型拉取命令:
ollama pull deepseek 或者 ollama run deepseek-r1:7b- 等待下载完成(7B 版本约 4GB,视网络情况而定);
- 验证是否下载成功:执行
ollama list,如果输出中包含deepseek,说明下载完成。

2. Deepseek 模型运行效果

三、创建Spring Boot项目
1、通过官方网页配置创建: https://start.spring.io/

2、IDEA创建:

注意 :类型修改为:Maven

可以选添加的依赖:后期不同大模型都会有key值,安全性考虑:
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>java-dotenv</artifactId>
<version>5.2.2</version>
</dependency>
io.github.cdimascio:java-dotenv:5.2.2 是一个 Java 环境变量加载工具,核心作用是 从 .env 文件中读取配置项,自动注入到系统环境变量或应用配置中,避免将敏感信息(如 API 密钥、数据库密码)硬编码到代码或配置文件里,简化多环境配置管理。
一、核心作用(解决的痛点)
-
隔离敏感信息:不用把
spring.ai.openai.api-key=sk-xxx、数据库密码等敏感信息写死在application.properties/yml或代码中,降低泄露风险; -
简化多环境切换:开发 / 测试 / 生产环境可以用不同的
.env文件(如.env.dev、.env.prod),切换环境时只需替换.env文件,无需修改项目配置; -
统一配置管理:所有环境相关的配置(如接口地址、端口、密钥)集中放在
.env文件,便于维护; -
无侵入集成:不需要复杂配置,一行代码即可加载,兼容 Spring Boot、原生 Java 等项目。

1. 项目初始化
-
添加依赖:
-
Spring Web
-
spring-ai-ollama-spring-boot-starter
这边我们使用阿里的实现ollama
2. 配置核心POM.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--阿里巴巴ollama-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
</dependencies>
四、配置Ollama连接
application.yml
server:
port: 9999
spring:
ai:
ollama:
base-url: http://localhost:11434 # 哦llama地址
chat:
model: deepseek-r1:7b # 模型
options:
temperature: 0.8 # 温度越高,回答越有创意
top-p: 0.9 # 数值越高,回答越多样
top-k: 100 # 数值越高,回答越多样
五、编写AI对话接口
Maven依赖详情
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springAI-Demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springAI-Demo</name>
<description>springAI-Demo</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M6</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-starter-model-ollama</artifactId>-->
<!-- </dependency>-->
<!-- 阿里巴巴ollama-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>java-dotenv</artifactId>
<version>5.2.2</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1. 创建Controller
package com.example.springaidemo;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import reactor.core.publisher.Flux;
import java.io.IOException;
@RestController
@RequestMapping("/client")
public class OllamaChatController {
private static final String DEFAULT_PROMPT = "你好,介绍下你自己!请用中文回答。";
private final ChatClient ollamaiChatClient;
public OllamaChatController(ChatModel chatModel) {
// 构造时,可以设置 ChatClient 的参数
this.ollamaiChatClient = ChatClient.builder(chatModel)
// 实现 Logger 的 Advisor
.defaultAdvisors(
new SimpleLoggerAdvisor()
)
// 设置 ChatClient 中 ChatModel 的 Options 参数
.defaultOptions(
OllamaOptions.builder()
.topP(0.7)
.model("deepseek-r1:7b")
.build()
)
.build();
}
/**
* ChatClient 简单调用
*/
@GetMapping("/simple/chat")
public String simpleChat() {
return ollamaiChatClient.prompt(DEFAULT_PROMPT).call().content();
}
/**
* ChatClient 流式调用
*/
@GetMapping("/stream/chat")
public Flux<String> streamChat1(@RequestParam String message) {
return ollamaiChatClient.prompt(message).stream().content();
}
@GetMapping("/stream")
public SseEmitter streamChat2(@RequestParam String message) {
SseEmitter emitter = new SseEmitter();
Flux<String> content = ollamaiChatClient.prompt(message).stream().content();
try {
emitter.send(content);
System.out.println(emitter.toString());
} catch (IOException e) {
throw new RuntimeException(e);
}
return emitter;
}
}
启动项目和保证deepsek运行


六、PostMan测试接口
1. 无参数接口测试
接口:/client/simple/chat

2. 流式调用接口测试
接口:/client/stream/chat

七、常见问题排查
| 问题现象 | 解决方案 |
|---|---|
| 连接Ollama超时 | 确认ollama serve正在运行 |
| 模型加载失败 | 检查ollama list确认模型存在 |
| 内存不足 | 尝试更小参数的模型版本 |
八、总结
本文演示了如何通过:
- 本地部署Ollama服务
- Spring AI集成LLM能力
- 构建RESTful API接口
优势:数据隐私性强、无需API密钥、支持离线环境
备注
<!-- <dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-starter-model-ollama</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
两者是 Spring AI 不同版本阶段的「Ollama 集成 Starter」,因 Spring AI 1.2.x 版本优化了依赖命名规范而产生差异,具体对比如下:
| 对比维度 | spring-ai-ollama-spring-boot-starter(你当前用的) | spring-ai-starter-model-ollama(你提到的) |
|---|---|---|
| 版本兼容性 | 仅存在于 Spring AI 1.2.x 之前(如 1.0.0-M6、1.1.4) | 仅存在于 Spring AI 1.2.x 及之后(如 1.2.0、1.3.0) |
| 命名规范 | 旧规范:spring-ai-[模块]-spring-boot-starter | 新规范:spring-ai-starter-model-[模块] |
| 核心功能 | 完全一致:自动配置 Ollama 客户端、模型调用逻辑 | 完全一致:自动配置 Ollama 客户端、模型调用逻辑 |
| 依赖传递 | 包含 spring-ai-ollama 核心模块 + 自动配置 | 包含 spring-ai-ollama 核心模块 + 自动配置 |
| 是否需要手动指定版本 | 是(1.2.x 前无 BOM 统一管理,需显式写版本) | 否(1.2.x 后支持 BOM 统一版本,无需写版本) |
| 你的项目能否使用 | 能(当前版本 1.0.0-M6 匹配) | 不能(1.0.0-M6 版本不存在该依赖,会报找不到) |
1797

被折叠的 条评论
为什么被折叠?



