SpringBoot中使用Spring AI框架集成本地Ollama实现AI快速对话完整示例场景SpringBoot中使用SpringAIAlibaba框架集成阿里云百炼实现AI快速对话入门示例https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/160024361基于上述文章基础。在实际开发中我们经常需要在本地运行大模型进行测试和开发。虽然阿里云百炼等云平台提供了便捷的API服务但在以下场景中本地Ollama是更好的选择开发测试快速验证AI功能无需等待网络请求数据隐私敏感数据不想上传到云端成本控制完全免费无API调用费用离线环境无外网或网络不稳定时使用定制化需求需要运行特定开源模型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 17Spring 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_HOMED:\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 APIparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.5/version/parentgroupIdcom.example/groupIdartifactIdspring-ai-ollama-demo/artifactIdversion1.0/versionpropertiesjava.version17/java.versionspring-ai.version1.0.0-M5/spring-ai.version/propertiesdependencies!-- Spring Boot Web Starter --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI OpenAI Starter (兼容Ollama) --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai-spring-boot-starter/artifactIdversion1.0.0-M5/version/dependency!-- Spring Boot Test Starter --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesrepositoriesrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/url/repository/repositories注意使用spring-ai-openai-spring-boot-starter而不是spring-ai-alibaba-starterOllama提供OpenAI兼容的API接口配置application.ymlserver: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.chatClientbuilder.build();}/** * GET方式简单对话 * 访问http://localhost:885/ai/generate?message你好 */GetMapping(/ai/generate)publicStringgenerate(RequestParam(valuemessage,defaultValue你好)Stringmessage){returnchatClient.prompt().user(message).call().content();}/** * POST方式JSON对话 * 请求体{message: 你好} */PostMapping(/ai/chat)publicMapString,Stringchat(RequestBodyMapString,Stringrequest){Stringmessagerequest.get(message);StringresponsechatClient.prompt().user(message).call().content();returnMap.of(message,message,response,response,model,ollama-qwen2.5);}/** * 健康检查接口 */GetMapping(/ai/health)publicMapString,Stringhealth(){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创建交互式启动脚本为方便项目管理创建一键启动脚本一键启动.batecho off chcp 65001 nul echo echo Spring AI Ollama Manager echo echo. REM 配置路径修改这里 set MVND:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd set JAVA_HOMED:\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 choiceChoice (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 2nul 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请求curlhttp://localhost:885/ai/generate?message请介绍一下人工智能# POST请求curl-XPOST http://localhost:885/ai/chat\-HContent-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/tagsQ2: 模型下载慢# 可以使用国内镜像或代理# 或者选择较小的模型如phi3ollama pull phi3Q3: 内存不足Ollama默认使用GPU如果没有GPU会使用CPU小内存机器建议使用较小模型如phi3、qwen2.5:1.5b查看模型大小ollama listQ4: 编译失败 - 测试依赖缺失确保pom.xml包含测试依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencyQ5: 端口885被占用修改application.yml中的端口号server:port:8080# 改为其他端口Q6: 模型响应慢首次加载模型需要时间从磁盘加载到内存后续请求会快很多可以调整max-tokens控制响应长度进阶使用流式响应如果需要实现流式响应Server-Sent Events可以修改ControllerGetMapping(/ai/stream)publicSseEmitterstream(RequestParamStringmessage){SseEmitteremitternewSseEmitter();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大模型。主要步骤包括安装Ollama下载并拉取所需模型配置JDK 17确保满足Spring AI的版本要求创建SpringBoot项目添加Spring AI OpenAI Starter依赖配置Ollama连接设置base-url为本地Ollama服务实现对话接口使用ChatClient进行AI对话测试验证通过API接口测试功能核心优势✅ 完全免费无API费用✅ 数据完全本地隐私安全✅ 无需外网离线可用✅ 支持多种开源模型✅ 与Spring AI无缝集成适用场景本地开发和测试AI功能原型验证敏感数据处理离线环境使用学习大模型技术
SpringBoot中使用Spring AI框架集成本地Ollama实现AI快速对话完整示例
发布时间:2026/6/2 12:31:53
SpringBoot中使用Spring AI框架集成本地Ollama实现AI快速对话完整示例场景SpringBoot中使用SpringAIAlibaba框架集成阿里云百炼实现AI快速对话入门示例https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/160024361基于上述文章基础。在实际开发中我们经常需要在本地运行大模型进行测试和开发。虽然阿里云百炼等云平台提供了便捷的API服务但在以下场景中本地Ollama是更好的选择开发测试快速验证AI功能无需等待网络请求数据隐私敏感数据不想上传到云端成本控制完全免费无API调用费用离线环境无外网或网络不稳定时使用定制化需求需要运行特定开源模型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 17Spring 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_HOMED:\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 APIparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.5/version/parentgroupIdcom.example/groupIdartifactIdspring-ai-ollama-demo/artifactIdversion1.0/versionpropertiesjava.version17/java.versionspring-ai.version1.0.0-M5/spring-ai.version/propertiesdependencies!-- Spring Boot Web Starter --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI OpenAI Starter (兼容Ollama) --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai-spring-boot-starter/artifactIdversion1.0.0-M5/version/dependency!-- Spring Boot Test Starter --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesrepositoriesrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/url/repository/repositories注意使用spring-ai-openai-spring-boot-starter而不是spring-ai-alibaba-starterOllama提供OpenAI兼容的API接口配置application.ymlserver: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.chatClientbuilder.build();}/** * GET方式简单对话 * 访问http://localhost:885/ai/generate?message你好 */GetMapping(/ai/generate)publicStringgenerate(RequestParam(valuemessage,defaultValue你好)Stringmessage){returnchatClient.prompt().user(message).call().content();}/** * POST方式JSON对话 * 请求体{message: 你好} */PostMapping(/ai/chat)publicMapString,Stringchat(RequestBodyMapString,Stringrequest){Stringmessagerequest.get(message);StringresponsechatClient.prompt().user(message).call().content();returnMap.of(message,message,response,response,model,ollama-qwen2.5);}/** * 健康检查接口 */GetMapping(/ai/health)publicMapString,Stringhealth(){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创建交互式启动脚本为方便项目管理创建一键启动脚本一键启动.batecho off chcp 65001 nul echo echo Spring AI Ollama Manager echo echo. REM 配置路径修改这里 set MVND:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd set JAVA_HOMED:\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 choiceChoice (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 2nul 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请求curlhttp://localhost:885/ai/generate?message请介绍一下人工智能# POST请求curl-XPOST http://localhost:885/ai/chat\-HContent-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/tagsQ2: 模型下载慢# 可以使用国内镜像或代理# 或者选择较小的模型如phi3ollama pull phi3Q3: 内存不足Ollama默认使用GPU如果没有GPU会使用CPU小内存机器建议使用较小模型如phi3、qwen2.5:1.5b查看模型大小ollama listQ4: 编译失败 - 测试依赖缺失确保pom.xml包含测试依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencyQ5: 端口885被占用修改application.yml中的端口号server:port:8080# 改为其他端口Q6: 模型响应慢首次加载模型需要时间从磁盘加载到内存后续请求会快很多可以调整max-tokens控制响应长度进阶使用流式响应如果需要实现流式响应Server-Sent Events可以修改ControllerGetMapping(/ai/stream)publicSseEmitterstream(RequestParamStringmessage){SseEmitteremitternewSseEmitter();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大模型。主要步骤包括安装Ollama下载并拉取所需模型配置JDK 17确保满足Spring AI的版本要求创建SpringBoot项目添加Spring AI OpenAI Starter依赖配置Ollama连接设置base-url为本地Ollama服务实现对话接口使用ChatClient进行AI对话测试验证通过API接口测试功能核心优势✅ 完全免费无API费用✅ 数据完全本地隐私安全✅ 无需外网离线可用✅ 支持多种开源模型✅ 与Spring AI无缝集成适用场景本地开发和测试AI功能原型验证敏感数据处理离线环境使用学习大模型技术