SpringBoot中使用Spring AI框架集成本地Ollama实现AI快速对话完整示例
2026/5/29 20:55:25 网站建设 项目流程

SpringBoot中使用Spring AI框架集成本地Ollama实现AI快速对话完整示例

场景

SpringBoot中使用SpringAIAlibaba框架集成阿里云百炼实现AI快速对话入门示例:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/160024361

基于上述文章基础。

在实际开发中,我们经常需要在本地运行大模型进行测试和开发。虽然阿里云百炼等云平台提供了便捷的API服务,但在以下场景中,本地Ollama是更好的选择:

  1. 开发测试:快速验证AI功能,无需等待网络请求
  2. 数据隐私:敏感数据不想上传到云端
  3. 成本控制:完全免费,无API调用费用
  4. 离线环境:无外网或网络不稳定时使用
  5. 定制化需求:需要运行特定开源模型

Ollama是一个开源的大模型运行工具,支持多种主流模型,并提供OpenAI兼容的API接口,可以无缝集成到Spring AI框架中。

注:

  • 博客:https://blog.csdn.net/badao_liumang_qizhi

实现

安装和配置Ollama

步骤1:下载并安装Ollama

访问Ollama官网下载安装包:

https://ollama.com/

Windows用户下载Windows版本,安装后Ollama默认运行在http://localhost:11434

步骤2:启动Ollama服务

安装完成后,Ollama会自动启动。可以通过以下命令检查状态:

# Windows PowerShellollama list# 查看运行的模型ollamaps
步骤3:拉取本地模型
# 拉取qwen2.5模型(推荐,与阿里云百炼兼容性好)ollama pull qwen2.5# 或者拉取其他模型ollama pull llama3.2 ollama pull phi3 ollama pull mistral

模型选择建议:

  • qwen2.5: 中文支持好,适合练手
  • llama3.2: 性能优秀,生态丰富
  • phi3: 体积小,适合低配置机器
  • mistral: 平衡性能和效果
步骤4:验证模型是否正常工作
# 测试模型对话ollama run qwen2.5"你好,请介绍一下你自己"# 测试完成后退出/bye

环境准备:JDK 17配置

为什么必须使用JDK 17?

Spring AI框架和Spring Boot 3.x都要求最低JDK 17版本。如果您的系统环境变量配置的是JDK 8,需要为项目单独指定JDK 17。

为项目单独配置JDK 17(不影响全局JDK 8)

步骤1:下载JDK 17解压版

直接解压到指定目录,例如:D:\SoftWare\jdk\jdk17

注意:

  • ✅ 不要添加到系统PATH
  • ✅ 不要修改系统环境变量
  • ✅ 全局JDK 8完全不动

步骤2:在项目中指定JDK 17

创建项目启动脚本,在脚本中指定JDK路径:

@echo off REM 设置JDK 17路径 set JAVA_HOME=D:\SoftWare\jdk\jdk17 set PATH=%JAVA_HOME%\bin;%PATH% REM 验证Java版本 java -version REM 执行Maven命令 mvn clean install mvn spring-boot:run

新建SpringBoot项目

修改pom.xml

添加Spring AI OpenAI Starter依赖(Ollama兼容OpenAI API):

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version></parent><groupId>com.example</groupId><artifactId>spring-ai-ollama-demo</artifactId><version>1.0</version><properties><java.version>17</java.version><spring-ai.version>1.0.0-M5</spring-ai.version></properties><dependencies><!-- Spring Boot Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring AI OpenAI Starter (兼容Ollama) --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0-M5</version></dependency><!-- Spring Boot Test Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url></repository></repositories>

注意:

  • 使用spring-ai-openai-spring-boot-starter而不是spring-ai-alibaba-starter
  • Ollama提供OpenAI兼容的API接口
配置application.yml
server:port:885servlet:context-path:/tomcat:uri-encoding:UTF-8max-threads:800min-spare-threads:30logging:level:com.example:infoorg.springframework:infospring:ai:openai:api-key:ollama# Ollama不需要API key,但必须填写base-url:http://localhost:11434# Ollama服务地址chat:options:model:qwen2.5# 使用本地模型名称temperature:0.7max-tokens:2048

关键配置说明:

  • api-key: ollama- Ollama不需要真实的API key,但字段不能为空
  • base-url: http://localhost:11434- 指向本地Ollama服务
  • model: qwen2.5- 必须与ollama pull下载的模型名称一致

创建对话Controller

新建一个对话Controller,实现AI对话接口:

packagecom.badao.ai.controller;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjava.util.Map;@RestControllerpublicclassChatController{privatefinalChatClientchatClient;publicChatController(ChatClient.Builderbuilder){this.chatClient=builder.build();}/** * GET方式简单对话 * 访问:http://localhost:885/ai/generate?message=你好 */@GetMapping("/ai/generate")publicStringgenerate(@RequestParam(value="message",defaultValue="你好")Stringmessage){returnchatClient.prompt().user(message).call().content();}/** * POST方式JSON对话 * 请求体:{"message": "你好"} */@PostMapping("/ai/chat")publicMap<String,String>chat(@RequestBodyMap<String,String>request){Stringmessage=request.get("message");Stringresponse=chatClient.prompt().user(message).call().content();returnMap.of("message",message,"response",response,"model","ollama-qwen2.5");}/** * 健康检查接口 */@GetMapping("/ai/health")publicMap<String,String>health(){returnMap.of("status","running","model","ollama-qwen2.5","type","local");}}

创建启动类

packagecom.badao.ai;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassSpringAiDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringAiDemoApplication.class,args);}}

项目完整结构

spring-ai-ollama-demo/ ├── src/ │ ├── main/ │ │ ├── java/com/badao/ai/ │ │ │ ├── SpringAiDemoApplication.java │ │ │ └── controller/ │ │ │ └── ChatController.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/com/badao/ai/ │ └── SpringAiZhipuHelloApplicationTests.java ├── pom.xml └── 一键启动.bat

创建交互式启动脚本

为方便项目管理,创建一键启动脚本一键启动.bat

@echo off chcp 65001 >nul echo ======================================== echo Spring AI Ollama Manager echo ======================================== echo. REM 配置路径(修改这里) set MVN=D:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd set JAVA_HOME=D:\SoftWare\jdk\jdk17 set PATH=%JAVA_HOME%\bin;%PATH% set PROJECT_DIR=%~dp0 cd /d %PROJECT_DIR% echo Maven: %MVN% echo JDK: %JAVA_HOME% echo. if not exist "%JAVA_HOME%\bin\java.exe" ( echo [ERROR] JDK 17 not found pause exit /b 1 ) java -version echo. if not exist "%MVN%" ( echo [ERROR] Maven not found pause exit /b 1 ) :MENU echo ======================================== echo 1. Build Project echo 2. Start Project echo 3. Package Project echo 4. Exit echo ======================================== set /p choice=Choice (1-4): if "%choice%"=="1" goto BUILD if "%choice%"=="2" goto START if "%choice%"=="3" goto PACKAGE if "%choice%"=="4" goto END echo Invalid choice! goto MENU :BUILD call "%MVN%" clean install -DskipTests if %errorlevel% neq 0 (echo Build FAILED! & pause & goto MENU) echo Build SUCCESS! pause goto MENU :START echo Starting on http://localhost:885 call "%MVN%" spring-boot:run goto MENU :PACKAGE call "%MVN%" clean package -DskipTests if %errorlevel% neq 0 (echo Package FAILED! & pause & goto MENU) echo Package SUCCESS! dir /b target\*.jar 2>nul pause goto MENU :END echo Goodbye! exit /b 0

运行测试

方式1:使用启动脚本
# 双击运行一键启动.bat# 选择选项2启动项目
方式2:使用Maven命令
# 设置环境$env:JAVA_HOME ="D:\SoftWare\jdk\jdk17"$env:PATH ="D:\SoftWare\jdk\jdk17\bin;"+$env:PATH# 进入项目目录cd d:\WorkSpace\Gitee\java-demo\AI\spring-ai-ollama-demo# 编译项目mvn clean install-DskipTests# 启动项目mvn spring-boot:run
测试接口

1. 浏览器访问:

http://localhost:885/ai/generate?message=你好,请介绍下你自己

2. 使用curl测试:

# GET请求curl"http://localhost:885/ai/generate?message=请介绍一下人工智能"# POST请求curl-XPOST http://localhost:885/ai/chat\-H"Content-Type: application/json"\-d"{\"message\":\"请解释机器学习\"}"

3. 健康检查:

curlhttp://localhost:885/ai/health

预期响应:

{"status":"running","model":"ollama-qwen2.5","type":"local"}

多模型切换示例

如果想尝试不同的模型,只需修改application.yml中的model配置:

spring:ai:openai:chat:options:model:llama3.2# 切换到Llama模型# model: phi3 # 或者切换到Phi模型# model: mistral # 或者使用Mistral模型

注意:切换模型前,需要先使用ollama pull下载对应模型。

高级配置

如果需要更精细的控制,可以添加更多配置选项:

spring:ai:openai:api-key:ollamabase-url:http://localhost:11434chat:options:model:qwen2.5temperature:0.7# 创造性 (0-1),越高越有创意max-tokens:2048# 最大生成token数top-p:0.9# 核采样参数frequency-penalty:0.0# 频率惩罚,降低重复内容presence-penalty:0.0# 存在惩罚,鼓励新话题

对比:阿里云百炼 vs 本地Ollama

特性阿里云百炼本地Ollama
成本有免费额度,超出后收费完全免费
网络需要外网本地运行,无需外网
速度受网络影响取决于本地硬件
隐私数据传到云端数据完全本地
配置需要API Key无需Key(填ollama即可)
模型qwen-max等云端模型qwen2.5、llama等本地模型
适用场景生产环境开发测试、离线使用

常见问题

Q1: Ollama启动失败?
# Windows下检查Ollama是否运行tasklist|findstr ollama# 手动启动Ollamaollama serve# 检查服务状态curlhttp://localhost:11434/api/tags
Q2: 模型下载慢?
# 可以使用国内镜像或代理# 或者选择较小的模型(如phi3)ollama pull phi3
Q3: 内存不足?
  • Ollama默认使用GPU,如果没有GPU会使用CPU
  • 小内存机器建议使用较小模型(如phi3、qwen2.5:1.5b)
  • 查看模型大小:ollama list
Q4: 编译失败 - 测试依赖缺失?

确保pom.xml包含测试依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
Q5: 端口885被占用?

修改application.yml中的端口号:

server:port:8080# 改为其他端口
Q6: 模型响应慢?
  • 首次加载模型需要时间(从磁盘加载到内存)
  • 后续请求会快很多
  • 可以调整max-tokens控制响应长度

进阶使用:流式响应

如果需要实现流式响应(Server-Sent Events),可以修改Controller:

@GetMapping("/ai/stream")publicSseEmitterstream(@RequestParamStringmessage){SseEmitteremitter=newSseEmitter();chatClient.prompt().user(message).stream().content().subscribe(content->{try{emitter.send(content);}catch(IOExceptione){emitter.completeWithError(e);}},error->emitter.completeWithError(error),()->emitter.complete());returnemitter;}

总结

通过本示例,我们成功实现了在SpringBoot项目中集成本地Ollama大模型。主要步骤包括:

  1. 安装Ollama:下载并拉取所需模型
  2. 配置JDK 17:确保满足Spring AI的版本要求
  3. 创建SpringBoot项目:添加Spring AI OpenAI Starter依赖
  4. 配置Ollama连接:设置base-url为本地Ollama服务
  5. 实现对话接口:使用ChatClient进行AI对话
  6. 测试验证:通过API接口测试功能

核心优势:

  • ✅ 完全免费,无API费用
  • ✅ 数据完全本地,隐私安全
  • ✅ 无需外网,离线可用
  • ✅ 支持多种开源模型
  • ✅ 与Spring AI无缝集成

适用场景:

  • 本地开发和测试
  • AI功能原型验证
  • 敏感数据处理
  • 离线环境使用
  • 学习大模型技术

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询