当前位置: 首页 > news >正文

SpringBoot集成SpringAI与Ollama本地大模型

作者:CSDN爱跑步的程序员
本文手把手带你从零搭建一个基于 Spring Boot 3、Spring AI 与 Ollama 的本地 AI 对话服务,包含环境准备、项目创建、依赖配置、接口开发与联调测试的完整步骤。


一、项目简介

本项目ai-agent是一个轻量级 AI 对话服务,具备以下能力:

  • Spring Boot 3.5.10+Java 21
  • Spring AI对接Ollama,在本地运行大模型(如 qwen3:4b),无需外网 API Key
  • Knife4j提供中文 Swagger 文档与在线调试
  • Hutool工具库,便于后续扩展
  • 提供健康检查对话接口,方便集成与测试

阅读完本文,你将掌握:从零创建项目、配置 Ollama、编写对话接口、使用 Knife4j 调试的完整流程。


二、环境准备

2.1 必备环境

环境版本要求说明
JDK21+项目使用 Java 21
Maven3.6+用于依赖管理与构建
Ollama最新版用于本地运行大模型

2.2 安装 JDK 21

  • Windows:从 Oracle JDK 或 Adoptium 下载安装,并配置JAVA_HOME
  • macOSbrew install openjdk@21,并将JAVA_HOME指向该版本。
  • Linux:使用发行版包管理器安装openjdk-21-jdk

安装后执行:

java -version

确认输出为 21.x。

2.3 安装 Ollama

  1. 打开 Ollama 官网 下载对应系统安装包。
  2. 安装完成后,在终端执行:
ollama serve

保持该窗口运行(默认监听http://localhost:11434)。

  1. 新开一个终端,拉取本项目使用的模型(例如 qwen3:4b):
ollama pull qwen3:4b

等待下载完成。如需其他模型,可执行ollama list查看已安装,ollama pull <模型名>拉取新模型。

三、创建 Spring Boot 项目

3.1 使用 Spring Initializr 创建(推荐)

  1. 打开 https://start.spring.io。
  2. 按下面配置选择:
    • Project:Maven
    • Language:Java
    • Spring Boot:3.5.x(或当前最新 3.x)
    • Project Metadata
      • Group:com.leo
      • Artifact:aiagent
      • Name:ai-agent
      • Package name:com.leo.aiagent
    • Options:Java 21
    • Dependencies:先选Spring Web,其余依赖稍后在pom.xml中手写,便于理解每一行含义。
  3. 点击Generate下载 zip,解压到本地目录(如ai-agent)。

3.2 使用 IDEA 创建

  1. File → New → Project,选择Spring Initializr
  2. SDK 选择21,其他与上面一致(Maven、Java、Group/Artifact/Name/Package)。
  3. 依赖先勾选Spring Web,然后Create
  4. 在项目根目录得到与官网一致的 Maven 工程结构。

四、添加依赖(pom.xml)

pom.xml<dependencies>中保留spring-boot-starter-web,并按下面顺序添加以下依赖。

4.1 Lombok(简化实体与日志)

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version><optional>true</optional></dependency>

用于 getter/setter、构造等,按需在实体或配置类上使用。

4.2 Hutool 工具库

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.37</version></dependency>

便于后续做 HTTP、JSON、日期等工具封装。

4.3 Knife4j(Swagger 文档)

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version></dependency>

注意:Spring Boot 3 使用 Jakarta 命名空间,需使用jakarta版 Knife4j。

4.4 Spring AI Ollama starter

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency>

用于自动配置与 Ollama 的 ChatClient,无需手写 HTTP 调用。

4.5 父 POM 与仓库(如使用快照/里程碑)

若 Spring Initializr 已生成spring-boot-starter-parent,只需在<repositories>中增加 Spring 里程碑仓库(按需):

<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>

如图所示。

五、配置文件(application.yml)

src/main/resources/application.yml中做如下配置(无则新建)。

5.1 应用名与服务端口

spring:application:name:ai-agent
server:port:8123servlet:context-path:/api

即应用名ai-agent,服务端口8123,统一前缀/api(所有接口为/api/xxx)。

5.2 Spring AI Ollama 配置

spring:ai:ollama:base-url:http://localhost:11434chat:options:model:qwen3:4btemperature:0.2
  • base-url:与本地ollama serve地址一致,默认http://localhost:11434
  • model:与ollama pull qwen3:4b的模型名一致,可改为你本机已有模型。
  • temperature:控制随机性,0.2 偏保守、稳定。

5.3 Knife4j / SpringDoc 配置

springdoc:swagger-ui:path:/swagger-ui.htmltags-sorter:alphaoperations-sorter:alphaapi-docs:path:/v3/api-docsgroup-configs:-group:'default'paths-to-match:'/**'packages-to-scan:com.leo.aiagent.controllerknife4j:enable:truesetting:language:zh_cn
  • 文档与接口扫描包为com.leo.aiagent.controller,与下文 Controller 包名一致。
  • Knife4j 启用且使用中文界面。

六、启动类与包结构

启动类保持 Spring Initializr 默认即可,无需改代码:

packagecom.leo.aiagent;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassAiAgentApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AiAgentApplication.class,args);}}

确保所有 Controller 位于com.leo.aiagent.controller或其子包下,以便被扫描与 Knife4j 扫描到。


七、健康检查接口

src/main/java/com/leo/aiagent/controller/下新建HealthController.java

packagecom.leo.aiagent.controller;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/health")publicclassHealthController{@GetMappingpublicStringhealthCheck(){return"ok";}}
  • 实际路径:GET /api/health(因 context-path 为/api)。
  • 用于运维或网关做健康探测。

八、对话接口(Spring AI + Ollama)

controller包下新建ChatController.java

packagecom.leo.aiagent.controller;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/chat")publicclassChatController{privatefinalChatClientchatClient;publicChatController(ChatClient.Builderbuilder){this.chatClient=builder.build();}@GetMappingpublicStringchat(@RequestParamStringq){returnchatClient.prompt().user(q).call().content();}}

要点:

  • ChatClient.Builder:由 Spring AI Ollama 自动配置并注入,无需手写 Bean。
  • prompt().user(q).call().content():把用户问题q发给 Ollama,并返回模型回复的文本。
  • 接口路径:GET /api/chat?q=你的问题

九、运行与验证

9.1 确认 Ollama 已运行

  • 终端中ollama serve保持运行。
  • 已执行ollama pull qwen3:4b(或你配置的模型)。

9.2 启动 Spring Boot

  • IDEA:右键AiAgentApplicationRun ‘AiAgentApplication’
  • 命令行:在项目根目录执行:
./mvnw spring-boot:run

Windows 使用mvnw.cmd。看到类似 “Started AiAgentApplication” 即启动成功。

9.3 测试健康检查

curlhttp://localhost:8123/api/health

应返回:ok

9.4 测试对话接口

http://localhost:8123/api/chat?q=你好,请用一句话介绍你自己

应返回模型的一段文字回复(可能稍等几秒)。

9.5 使用 Knife4j 调试

  1. 浏览器打开:http://localhost:8123/api/doc.html(Knife4j 增强文档页)。
  2. 若 404,可尝试:http://localhost:8123/api/swagger-ui.html。
  3. 在文档中找到「对话接口」或「chat」,输入参数q,点击「调试」即可在线发请求、查看响应。
http://www.jsqmd.com/news/390058/

相关文章:

  • 深入解析:【开题答辩全过程】以 基于微信小程序的医疗物资进销存管理为例,包含答辩的问题和答案
  • 【Python】【机器学习】线性回归
  • 【Python】【机器学习】十大算法简介与应用
  • GitHub 热榜项目 - 日榜(2026-02-17)
  • 大模型开发 - 手写Manus之Sandbox执行代码:03 用Docker为AI Agent打造安全沙箱
  • C# 调用 Lua 完整技术文档
  • 叙事响应:《当预言泛起涟漪——碳硅智能时代的叙事开篇》
  • 【分享】《四十岁才是青春》-别人的四十岁创业史
  • 启蒙灯塔起源团预言—碳硅智能时代到来
  • 2026年测量仪口碑推荐:探寻行业佼佼者,扭矩仪/检测仪/试验机/测量仪/热封仪/测厚仪,测量仪供应商推荐排行 - 品牌推荐师
  • AI元人文:空性界面与空洞注册:阿尔茨海默病与重度抑郁症的存在论-意义论分析——跨学科应用研究的拓展与深化
  • 对象成员初始化问题
  • 利用DeepSeek和qwen 3.5辅助生成SQL优化方法幻灯片视频
  • 基于Java的房产售房智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 实用指南:中国制造网关键字搜索接口实战:跨境B2B视角的精准匹配与本地化适配方案
  • 基于Java的房产行业营销智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的房产中介智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • OpenClaw怎么做到不串台、能并行、还总回对群 ✅(含源码解析)--OpenClaw系列第1期
  • 深入解析:[Linux]学习笔记系列 -- [base][drivers]firmware
  • Python get process memory,pc total memory via psutil
  • 目前靠谱的微信立减金回收平台推荐 - 京顺回收
  • C++初始02——函数参数缺省、函数重载和引用
  • C++初识—— 命名空间和基本输入输出
  • DBO-RBF多输出【23年新算法】基于蜣螂算法(DBO)优化径向基记忆神经网络(RBF)的多...
  • 地下管廊巡检小车,沿管道行驶,检测异常,输出巡检报告。
  • 深入解析:Vue3 + Element Plus 实现大文件分片上传组件(支持秒传、断点续传)
  • 导师又让重写?用户挚爱的AI论文写作软件 —— 千笔写作工具
  • 【GitHub项目推荐--Auto Company:全自主AI公司运营平台】⭐
  • 缩短键盘触发长按逻辑的停顿时间
  • Mihon/Tachiyomi漫画插件分析(侧重目前插件现状分析和英文插件推荐)