前言
Spring AI Alibaba 是阿里巴巴官方推出的 AI 框架,它在 Spring AI 生态基础上深度集成了通义系列模型,并完全兼容 Spring AI 的抽象接口。这使得我们在享受阿里云 AI 便利的同时,也能无缝接入Ollama这类本地大模型。本文将展示如何在一个 Spring AI Alibaba 项目中,快速集成 Ollama 本地模型,实现对话补全与流式输出。
读完本文你将掌握:
- 本地安装 Ollama 并拉取 Llama 3 模型
- 在 Spring AI Alibaba 项目中引入必要依赖
- 通过
application.yml同时配置 Alibaba 和 Ollama - 注入顶层接口
ChatModel或具体实现OllamaChatModel - 实现同步调用与 SSE 流式调用
一、环境准备:本地安装 Ollama
Ollama 是一个跨平台的本地大模型运行工具,提供类似 Docker 的模型管理体验。
1.1 安装并启动
# macOS (Homebrew)
brew install ollama
# Linux
curl -fsSL https://ollama.com/install.sh | sh启动服务(默认监听http://localhost:11434):
ollama serve1.2 拉取 Llama 3 模型
ollama pull llama3测试模型:
ollama run llama3对话正常即表示环境就绪。
二、创建 Spring Boot 项目并引入依赖
2.1 项目基础
基于 Spring Boot 3.x 创建项目,添加 Spring Web 依赖。
2.2 添加仓库
需要 Spring Milestone 仓库来获取 Spring AI 相关里程碑版本:
<repositories>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>2.3 引入 Spring AI Alibaba 与 Ollama Starter
<dependencies>
<!-- Spring AI Alibaba 基础 Starter(提供通义千问等能力) -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3</version>
</dependency>
<!-- Ollama 官方 Starter(提供本地模型能力) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-starter</artifactId>
<version>1.0.0-M4</version>
</dependency>
</dependencies>注意:版本号请根据官方最新发布调整。Spring AI Alibaba 在底层完全兼容 Spring AI,因此可以混用不同模型的 Starter。
三、配置 application.yml
只需一份配置,即可同时启用多个模型。因为我们主要使用 Ollama,所以重点配置 Ollama 的连接信息:
spring:
ai:
# 阿里云灵积配置(若暂不使用可省略,或者仅占位)
dashscope:
api-key: your-dashscope-key # 此处不展开
# Ollama 本地模型配置
ollama:
base-url: http://localhost:11434
chat:
enabled: true
options:
model: llama3 # 与 ollama list 显示的模型名一致
temperature: 0.7
num-predict: 512
embedding:
enabled: falsebase-url:指向本地 Ollama 服务地址。model:必须与已拉取的模型名称严格一致。
四、注入并使用 ChatModel(重点:注入方式的选择)
Spring AI(及 Spring AI Alibaba)统一了顶层接口ChatModel,无论是阿里云的通义千问还是本地的 Ollama,业务代码完全相同。
但开发者在注入时有两种选择,各有优劣。
方式一:注入顶层接口ChatModel(推荐,可插拔)
@RestController
@RequestMapping("/ai")
public class ChatController {
@Autowired
private ChatModel chatModel; // 实际注入的是 OllamaChatModel(由配置决定)
}- 优点:完全解耦,后续若要换成阿里云灵积或其他模型,仅需修改配置,代码无需改动。
- 缺点:无法调用
OllamaChatModel特有的非标准方法(极少使用,绝大多数场景用接口方法足够)。
方式二:注入具体实现类OllamaChatModel(类型明确)
@Autowired
private OllamaChatModel ollamaChatModel;- 优点:代码表意清晰,一眼就知道用的是本地 Ollama 模型;可调用其特有 API。
- 缺点:与实现类绑定,切换 AI 提供商时需要修改代码,不够灵活。
实际表现
当同时引入spring-ai-alibaba-starter和spring-ai-ollama-starter,且只启用ollama.chat.enabled: true时,Spring 容器中会存在一个OllamaChatModelBean,它同时也实现了ChatModel接口。此时用接口注入和用实现类注入,拿到的是同一个对象。
建议:如果你的项目确定长期只用 Ollama,且希望代码更明确,可以使用方式二;若考虑未来灵活扩展,推荐方式一。两种方式均不影响同步和流式调用的代码逻辑。
五、同步与流式调用
以下示例以接口注入ChatModel为例,如果使用OllamaChatModel,代码写法完全一致(接口方法签名相同)。
5.1 同步调用
@GetMapping("/chat")
public String chat(@RequestParam String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatModel.call(prompt).getResult().getOutput().getContent();
}5.2 流式调用(SSE)
@GetMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> chatStream(@RequestParam String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt)
.map(response -> response.getResults().get(0).getOutput().getContent());
}前端可使用EventSource接收流式数据,实现打字机效果。
六、切换模型:一行配置的事
如果你后续想从本地 Ollama 切换到阿里云通义千问,只需:
- 在
application.yml中配置dashscope.api-key。 - 将
ollama.chat.enabled设为false(或移除配置)。 - 添加
dashscope.chat.options.model: qwen-turbo等。
Controller 代码完全无需修改。这正是 Spring AI Alibaba 拥抱 Spring AI 生态带来的插拔式体验。
七、常见问题
1. 启动报错找不到 OllamaChatModel
- 确认已引入
spring-ai-ollama-starter。 - 检查 Spring AI 版本与 Spring Boot 版本兼容性(通常 1.0.0-M4 配合 Spring Boot 3.3.x)。
2. 连接被拒绝
- 确保 Ollama 服务已启动(
ollama serve),且base-url端口正确。
3. 模型名无效
- 执行
ollama list查看已安装模型名,注意区分大小写。
4. 如何同时使用多个模型?
- 可以同时配置
ollama和dashscope,然后通过@Qualifier或根据ChatModel的 bean 名称来注入特定实现(如ollamaChatModel、dashScopeChatModel)。默认情况下,只有一个聊天模型会被标注为 primary。
八、总结
本文展示了如何在 Spring AI Alibaba 项目中快速接入 Ollama 本地大模型,并重点讨论了注入ChatModel接口与注入OllamaChatModel具体实现的区别。Spring AI Alibaba 在保持阿里云模型深度集成的同时,完全兼容 Spring AI 生态,让我们能够自由组合本地与云端模型。代码层面只需面向ChatModel接口编程,即可轻松实现同步与流式调用,真正做到了一处开发,处处可用。
本地模型带来的数据隐私和低延迟优势,结合 Spring AI Alibaba 的企业级集成能力,非常适合构建安全、可控的智能应用。赶快动手试试吧!
参考资料
- Ollama 官方文档
- Spring AI Alibaba GitHub
- Spring AI 参考手册