Ollama 本地部署 Qwen3 + SpringAI Alibaba 快速入门
标签:Ollama、Qwen3、SpringAI Alibaba、ChatClient、流式响应、Java AI
一、前言
上一篇介绍了阿里云百炼云端模型和 OpenAI 接口规范。
本篇进入实操环节:
- 使用 Ollama 在本地部署 Qwen3 大模型
- 在 Spring Boot 中集成 SpringAI Alibaba
- 同时配置云端(DashScope)和本地(Ollama)双模型
- 编写同步对话与流式对话接口
二、Ollama:本地大模型管理神器
2.1 什么是 Ollama
Ollama 是一个用于在本地运行、管理和发布大模型的开源框架。
它让下载和运行 Qwen 等模型变得像docker run一样简单。
2.2 安装 Ollama
- 访问官网:https://ollama.com
- 下载对应操作系统的安装包
- 一键安装
2.3 验证安装
打开终端执行:
ollama--version2.4 拉取并运行 Qwen3
ollama run qwen3:1.7b- 模型大小约 1.4GB
- 下载完成后会自动运行模型服务
- 服务地址:http://localhost:11434
也可以打开 Ollama 客户端界面,搜索模型后直接下载启动。
2.5 测试本地模型
方式一:交互界面在 ollama run 的交互界面中直接输入问题,查看回复。
方式二:浏览器访问
http://localhost:11434/api/tags
能看到已拉取的模型列表,说明本地服务启动成功。
恭喜,你拥有了一个完全在本地运行、可对话的大模型!
三、SpringAI Alibaba 简介
3.1 什么是 SpringAI Alibaba
SpringAI Alibaba 是 Spring AI 项目的一个实现,由阿里云贡献:
- 深度集成阿里云百炼(DashScope)
- 支持 OpenAI 兼容接口
- 提供统一的 ChatClient、AiStreamClient 等接口
- 通过配置即可切换模型,极大降低集成复杂度
官方文档:https://java2ai.com
3.2 SpringAI 与 SpringAI Alibaba 的区别
| 特性 | SpringAI | SpringAI Alibaba |
|---|---|---|
| 定位 | 国外 AI 接口标准 | 国内环境优化版本 |
| 国内模型兼容性 | 百炼等国内模型不完全兼容 | 阿里云百炼全系列完美兼容 |
| 使用体验 | 访问国内模型较麻烦 | 方便快捷,开箱即用 |
四、Spring Boot 项目配置双模型
4.1 版本对应关系
| SpringAI Alibaba | Spring AI | Spring Boot |
|---|---|---|
| 1.0.0.2 | 1.0.0 | 3.4.5 |
4.2 Maven 依赖
<properties><java.version>21</java.version><spring-ai.version>1.0.0</spring-ai.version><spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version><spring-boot.version>3.4.5</spring-boot.version></properties><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-bom</artifactId><version>${spring-ai-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><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><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-memory-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.2.0</version></dependency></dependencies>4.3 application.yml 配置
spring:application:name:SpringAIAlibaba-RAG-Milvusai:dashscope:api-key:${dashscope.api.key}# 请替换为自己的 API Keychat:model:qwen-plusoptions:temperature:0.7ollama:enabled:truebase-url:http://localhost:11434chat:model:qwen3:1.7boptions:temperature:0.7server:port:80804.4 配置 ChatClient
packagenet.xdclass.config;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.chat.model.ChatModel;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassChatConfig{@BeanpublicChatClientdashscopeChatClient(@Qualifier("dashscopeChatModel")ChatModeldashscopeChatModel){returnChatClient.builder(dashscopeChatModel).build();}@BeanpublicChatClientollamaChatClient(@Qualifier("ollamaChatModel")ChatModelollamaChatModel){returnChatClient.builder(ollamaChatModel).build();}}五、编写同步 AI 对话接口
5.1 控制器代码
packagenet.xdclass.controller;importlombok.RequiredArgsConstructor;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.*;@RestController@RequestMapping("/api/ai")@RequiredArgsConstructorpublicclassSimpleAiController{privatefinalChatClientdashscopeChatClient;privatefinalChatClientollamaChatClient;/** * 同步响应 - 云端模型 */@GetMapping(value="/simple/chat",produces="text/html;charset=utf-8")publicStringsimpleChat(@RequestParam("question")Stringquestion){returndashscopeChatClient.prompt(question).call().content();}/** * 同步响应 - 本地 Ollama 模型 */@GetMapping(value="/ollamaSimpleChat/chat",produces="text/html;charset=utf-8")publicStringollamaSimpleChat(@RequestParam("question")Stringquestion){returnollamaChatClient.prompt(question).call().content();}}5.2 添加日志 Advisor
@BeanpublicChatClientdashscopeChatClient(ChatModeldashscopeChatModel){returnChatClient.builder(dashscopeChatModel).defaultAdvisors(newSimpleLoggerAdvisor()).build();}并在 application.yml 中开启 debug 日志:
logging:level:org.springframework.ai:debug访问:http://localhost:8080/api/ai/simple/chat?question=你是谁
六、流式 AI 对话接口
流式响应可以让 AI"一个字一个字"地输出,体验更接近 ChatGPT。
@GetMapping(value="/stream/chat",produces="text/html;charset=utf-8")publicFlux<String>streamChat(@RequestParam("question")Stringquestion){returndashscopeChatClient.prompt(question).stream().content();}@GetMapping(value="/ollamaStreamChat/chat",produces="text/html;charset=utf-8")publicFlux<String>ollamaStreamChat(@RequestParam("question")Stringquestion){returnollamaChatClient.prompt(question).stream().content();}七、小结
本篇完成了:
- Ollama 本地部署 Qwen3
- SpringAI Alibaba 项目搭建
- 云端 + 本地双模型配置
- 同步对话与流式对话接口实现
下一篇将介绍提示词工程、系统提示词配置,以及使用 Redis 让 AI 记住上下文。