在使用大语言模型时,延迟是用户体验的一大痛点。本文将聚焦如何利用 Ollama 本地部署大模型,并结合 Spring AI 和阿里巴巴的 ChatModel 实现流式输出,大幅提升响应速度。同时,我们将在 IDEA 中一步步演示整个过程,解决可能遇到的问题,避免踩坑。
为什么选择 Ollama + Spring AI + Alibaba ChatModel?
- Ollama: 方便地在本地运行大型语言模型,无需依赖远程服务,减少网络延迟,并且数据安全性更高,避免敏感数据外泄。类似于 Docker 对于应用的封装,Ollama 对于大模型进行了标准化封装,极大降低了部署难度。
- Spring AI: Spring 官方推出的 AI 框架,简化了与不同 AI 模型的集成。提供了一致的 API,方便切换不同的模型提供商,降低了耦合度。
- Alibaba ChatModel: 阿里巴巴开源的 ChatModel,通过 Spring AI 可以方便地集成,并提供流式输出的能力。阿里云的通义千问模型是国内领先的大语言模型之一,与 Spring AI 的集成可以充分发挥其性能。
环境准备
安装 Ollama:
访问 Ollama 官网下载并安装对应操作系统的版本。安装完成后,可以通过命令行拉取你需要的模型,例如:
ollama pull llama2创建 Spring Boot 项目:
使用 Spring Initializr 创建一个 Spring Boot 项目,引入 Spring AI 依赖。

<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-core</artifactId> <version>0.8.0</version> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-ollama</artifactId> <version>0.8.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>配置 Alibaba ChatModel 虽然 Spring AI 默认没有直接集成阿里云的 ChatModel,但是我们可以通过自定义的方式实现。 首先,引入阿里云 SDK 依赖,方便后续调用。
<dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-llm</artifactId> <version>1.0.0</version> </dependency>
实现流式输出的核心代码
配置 Ollama 连接:
在
application.properties或application.yml中配置 Ollama 的连接信息。spring.ai.ollama.base-url=http://localhost:11434 # Ollama 的默认地址 spring.ai.ollama.model=llama2 # 指定使用的模型创建 ChatController:

创建一个 REST Controller,用于接收用户输入并调用 ChatModel。
import org.springframework.ai.chat.ChatClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; @RestController public class ChatController { private final ChatClient chatClient; public ChatController(ChatClient chatClient) { this.chatClient = chatClient; } @GetMapping("/chat/stream") public Flux<String> chatStream(@RequestParam("message") String message) { return chatClient.generateStream(message); } }注入 ChatClient:
Spring AI 会自动配置
ChatClient,你只需要在 Controller 中注入即可。因为我们使用了spring-ai-ollama依赖,所以默认会使用 Ollama 作为 ChatModel 的提供者。 如果需要替换成其他的模型,可以通过实现ChatClient接口的方式进行扩展。实现流式输出:

chatClient.generateStream(message) 方法会返回一个 Flux<String>,它是一个响应式流,可以不断地发送 ChatModel 生成的文本片段。在前端,可以使用 Server-Sent Events (SSE) 或 WebSocket 来接收这些片段并实时显示。
IDEA 中的实现与调试
配置 Spring Boot 启动项:
在 IDEA 中配置 Spring Boot 启动项,确保项目可以正常启动。
运行 Ollama:

确保 Ollama 正在运行,并且指定的模型已经成功拉取。
使用 Postman 或浏览器测试:
使用 Postman 或浏览器发送 GET 请求到
/chat/stream接口,并传入message参数。前端展示:
可以使用 JavaScript 和 SSE 来接收和展示流式输出的结果。下面是一个简单的示例:
const eventSource = new EventSource('/chat/stream?message=你好,请介绍一下你自己'); eventSource.onmessage = function(event) { const data = event.data; // 将 data 添加到页面上的某个元素中 document.getElementById('chat-output').innerText += data; }; eventSource.onerror = function(error) { console.error('EventSource failed:', error); eventSource.close(); };
实战避坑经验总结
- Ollama 模型选择: 选择适合自己需求的模型,不同的模型在性能和效果上有所差异。如果希望兼顾速度和效果,可以选择 Llama 2 的较小版本。
- Spring AI 版本兼容性: 确保 Spring AI 的版本与 Spring Boot 的版本兼容,避免出现依赖冲突。
- 流式输出处理: 前端需要正确处理流式输出的数据,避免出现乱码或显示错误。 可以使用
TextDecoder来处理二进制数据。 - 性能优化: 如果性能不佳,可以尝试调整 Ollama 的配置,例如增加线程数或使用 GPU 加速。
- 异常处理: 在代码中加入异常处理,避免程序崩溃。例如,可以捕获
OllamaException来处理 Ollama 相关的错误。
通过本文的实践,你就可以在本地使用 Ollama 部署大模型,并通过 Spring AI 和 Alibaba ChatModel 实现流式输出,极大地提升用户体验。同时,结合 IDEA 的调试功能,可以快速定位和解决问题,让你的 AI 应用更加稳定可靠。
冠军资讯
键盘上的咸鱼