Spring AI Alibaba + Ollama:让大模型在你的电脑上跑起来
前言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 流式调用一、环境准备本地安装 OllamaOllama 是一个跨平台的本地大模型运行工具提供类似 Docker 的模型管理体验。1.1 安装并启动# macOS (Homebrew)brew install ollama# Linuxcurl -fsSL https://ollama.com/install.sh | sh启动服务默认监听http://localhost:11434ollama 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 相关里程碑版本repositoriesrepositoryidspring-milestones/idurlhttps://repo.spring.io/milestone/url/repository/repositories2.3 引入 Spring AI Alibaba 与 Ollama Starterdependencies!-- Spring AI Alibaba 基础 Starter提供通义千问等能力 --dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter/artifactIdversion1.0.0-M3/version/dependency!-- Ollama 官方 Starter提供本地模型能力 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-ollama-starter/artifactIdversion1.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:11434chat:enabled: trueoptions:model: llama3 # 与 ollama list 显示的模型名一致temperature: 0.7num-predict: 512embedding:enabled: falsebase-url指向本地 Ollama 服务地址。model必须与已拉取的模型名称严格一致。四、注入并使用 ChatModel重点注入方式的选择Spring AI及 Spring AI Alibaba统一了顶层接口ChatModel无论是阿里云的通义千问还是本地的 Ollama业务代码完全相同。但开发者在注入时有两种选择各有优劣。方式一注入顶层接口ChatModel推荐可插拔RestControllerRequestMapping(/ai)public class ChatController {Autowiredprivate ChatModel chatModel; // 实际注入的是 OllamaChatModel由配置决定}优点完全解耦后续若要换成阿里云灵积或其他模型仅需修改配置代码无需改动。缺点无法调用OllamaChatModel特有的非标准方法极少使用绝大多数场景用接口方法足够。方式二注入具体实现类OllamaChatModel类型明确Autowiredprivate 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 流式调用SSEGetMapping(value /chat/stream, produces MediaType.TEXT_EVENT_STREAM_VALUE)public FluxString 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 GitHubSpring AI 参考手册