Ollama 本地部署 Qwen3 + SpringAI Alibaba 快速入门

标签:Ollama、Qwen3、SpringAI Alibaba、ChatClient、流式响应、Java AI

一、前言

上一篇介绍了阿里云百炼云端模型和 OpenAI 接口规范。
本篇进入实操环节:

  1. 使用 Ollama 在本地部署 Qwen3 大模型
  2. 在 Spring Boot 中集成 SpringAI Alibaba
  3. 同时配置云端(DashScope)和本地(Ollama)双模型
  4. 编写同步对话与流式对话接口

二、Ollama:本地大模型管理神器

2.1 什么是 Ollama

Ollama 是一个用于在本地运行、管理和发布大模型的开源框架。
它让下载和运行 Qwen 等模型变得像docker run一样简单。

2.2 安装 Ollama

  1. 访问官网:https://ollama.com
  2. 下载对应操作系统的安装包
  3. 一键安装

2.3 验证安装

打开终端执行:

ollama--version

2.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 的区别

特性SpringAISpringAI Alibaba
定位国外 AI 接口标准国内环境优化版本
国内模型兼容性百炼等国内模型不完全兼容阿里云百炼全系列完美兼容
使用体验访问国内模型较麻烦方便快捷,开箱即用

四、Spring Boot 项目配置双模型

4.1 版本对应关系

SpringAI AlibabaSpring AISpring Boot
1.0.0.21.0.03.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:8080

4.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 记住上下文。