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

Spring AI 实战:从0到1搭建第一个AI应用

当大语言模型的浪潮席卷全球,我们 Java 开发者常常陷入一个尴尬的境地:Python 似乎成了 AI 的“官方语言”,而我们对 Spring 全家桶的深厚积累似乎暂时派不上用场。Spring AI 的出现,彻底打破了这一困局。

Spring AI 是 Spring 官方团队主导开发的开源项目,它为 Java/Spring 生态系统提供了一个统一、模块化、企业级友好的 AI 应用开发框架。核心理念是:AI 开发应遵循 Spring 哲学——POJO 编程、自动配置、可移植、可观测、可测试。

1. 环境准备

  • JDK 17+(Spring Boot 3.x 的硬性要求)
  • Maven 3.8+
  • AI 模型厂商:
    • 百练:阿里云百炼大模型平台,国内访问友好
    • Ollama:本地运行环境,适合离线场景

Spring AI 支持 Spring Boot 3.4.x 和 3.5.x 版本

2. 初始化 Spring Boot 工程

访问 start.spring.io 使用 Spring Initializr 方式初始化 Spring Boot 工程。在新应用中选择您需要使用的 AI 模型等:

在这选用 Spring Boot 3.5.14 版本,Spring AI 推荐使用 1.1.5 版本。完整 pom 如下:

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 第一层:Spring Boot 父 POM,管理 Boot 生态 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.14</version><relativePath/></parent><artifactId>spring-ai-quickstart</artifactId><name>spring-ai-quickstart</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>17</java.version><spring-ai.version>1.1.5</spring-ai.version></properties><!-- 第二层:导入 Spring AI BOM,管理 AI 生态 --><dependencyManagement><dependencies><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><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring AI Ollama 模型 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></dependency><!-- Spring AI OpenAI协议 模型 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId></dependency><!-- Spring Boot Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- Spring Boot 测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

2.1 构件仓库

2.1.1 正式版 - 使用 Maven Central

Spring AI 1.0.0 及后续版本已在 Maven Central 仓库提供。构建文件只需启用 Maven Central 即可,通常无需额外配置仓库:

<repositories><repository><id>central</id><url>https://repo.maven.apache.org/maven2</url></repository></repositories>

Maven 构建默认包含 Maven Central,不需要额外配置

2.1.2 快照版 - 添加快照仓库

如需使用开发版本(如1.1.0-SNAPSHOT)或1.0.0之前的里程碑版本,需在构建文件中添加以下快照仓库:

<repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository><repository><name>Central Portal Snapshots</name><id>central-portal-snapshots</id><url>https://central.sonatype.com/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>

需要注意的是使用 Maven 构建 Spring AI 快照时,请检查镜像配置。若在 settings.xml 中配置了类似如下镜像:

<mirror><id>my-mirror</id><mirrorOf>*</mirrorOf><url>https://my-company-repository.com/maven</url></mirror>

通配符*会将所有仓库请求重定向至该镜像,导致无法访问 Spring 快照仓库。请修改 mirrorOf 配置排除 Spring 仓库:

<mirror><id>my-mirror</id><mirrorOf>*,!spring-snapshots,!central-portal-snapshots</mirrorOf><url>https://my-company-repository.com/maven</url></mirror>

此配置允许 Maven 直接访问 Spring 快照仓库,同时通过镜像获取其他依赖。

2.2 Spring Boot 依赖管理

Spring Boot 本身提供 BOM(spring-boot-dependencies)管理 Boot 生态,通常由父 POM 管理:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.14</version><relativePath/></parent>

2.3 Spring AI 依赖管理

Spring AI 也提供 BOM 来管理 Spring AI 生态,声明了 Spring AI 指定所有依赖的推荐版本:

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.1.5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

此 BOM 仅包含依赖管理,不涉及插件声明或 Spring/Spring Boot 直接引用。可使用 Spring Boot 父 POM 或 Spring Boot BOM (spring-boot-dependencies) 管理 Spring Boot 版本。

2.4 添加依赖

添加 Spring Boot 和 Spring AI 等相关依赖:

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring AI Ollama 模型 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></dependency><!-- Spring AI OpenAI协议 模型 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId></dependency><!-- Spring Boot Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- Spring Boot 测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

如果调用本地 Ollama 大模型,则需要引入 spring-ai-starter-model-ollama 依赖;如果调用 OpenAPI 兼容协议的大模型,则需要引入 spring-ai-starter-model-openai 大模型。

3. 配置文件

application.yml中配置阿里云百炼大模型配置或者本地 Ollama 配置:

server: port: 8888 spring: application: name: spring-ai-quickstart ai: openai: # 配置系统变量 api-key: ${DASHSCOPE_API_KEY} # url 后不要加 /v1 , spring ai 会自动添加 base-url: https://dashscope.aliyuncs.com/compatible-mode chat: options: model: qwen3.5-35b-a3b temperature: 0.7 ollama: base-url: http://localhost:11434 chat: options: model: qwen2.5:7b temperature: 0.75 top-p: 0.9 max-tokens: 4096

这里有三个值得注意的点:

  • 防止端口冲突,自定义新的端口8888
  • base-url 不要带/v1:Spring AI 内部会自动拼接/v1/chat/completions
  • ${DASHSCOPE_API_KEY}占位符:Spring Boot 会自动从操作系统环境变量或 JVM 系统属性中解析,这是管理密钥的最佳实践。

安全提醒:请勿将 API Key 硬编码在配置文件中!推荐使用环境变量 DASHSCOPE_API_KEY 传入。

4. 核心实现

4.1 模型配置

ChatClient 是 Spring AI 的核心抽象。无论底层是 OpenAI 协议还是 Ollama,上层调用代码完全一致:

@ConfigurationpublicclassChatConfig{// 本地 Ollama 大模型/*@Bean public ChatClient localChatClient(OllamaChatModel chatModel) { return ChatClient.builder(chatModel) .build(); }*/// 远程 OpenAI 兼容协议大模型:百练@BeanpublicChatClientchatClient(OpenAiChatModelchatModel){returnChatClient.builder(chatModel).build();}}

4.2 流式对话接口

ChatController 流式对话接口:

@Slf4j@RestController@RequestMapping("/api/v1/")publicclassChatController{@AutowiredprivateChatClientchatClient;@GetMapping(value="/chat",produces="text/plain;charset=UTF-8")publicFlux<String>chatStream(@RequestParam(value="message",defaultValue="你是谁")Stringmessage){Flux<String>result=chatClient.prompt().user(message).stream().content();log.info("chat: {}",message);returnresult;}}

代码非常简洁:

  • prompt():创建一个提示词构建器
  • user(message):设置用户输入
  • stream():要求模型以流式方式返回(SSE)
  • content():从响应中提取纯文本流
  • 返回类型Flux<String>是 Reactor 的响应式流,天然适合 SSE 场景。Spring Boot 会自动将其包装为 text/event-stream 格式输出到浏览器。

5. 启动并测试

5.1 设置百练模型api-key

如果选用百练模型,而非 Ollama 本地模型,需要设置如下系统变量:

export DASHSCOPE_API_KEY=你的api-key

5.2 启动应用

运行如下代码启动 Spring Boot 工程:

@SpringBootApplicationpublicclassAIQuickstartApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AIQuickstartApplication.class,args);}}

或者使用如下命令启动应用:

mvn spring-boot:run

5.3 测试

浏览器直接访问:

http://localhost:8888/api/v1/chat?message=请用三句话介绍Spring AI

输出如下:

Spring AI 是一个专为 Java 开发者设计的开源框架,旨在简化生成式人工智能与 Spring Boot 应用的集成。它通过提供统一的抽象层和 API,屏蔽了不同大语言模型提供商的差异,支持快速构建聊天机器人及检索增强生成(RAG)应用。依托 Spring 生态系统的成熟机制,Spring AI 显著降低了开发门槛,使企业能更高效地利用 AI 技术。

源码:spring-ai-quickstart

http://www.jsqmd.com/news/732969/

相关文章:

  • AI 算法与模型测试工程师全解析
  • 免费好用的图片压缩工具
  • 别再死记硬背了!用C语言代码和调试器,5分钟搞懂补码为什么是计算机运算的核心
  • MATLAB翼型分析:3分钟掌握XFOILinterface终极指南
  • MusicPlayer2技术架构深度剖析:现代Windows音乐播放器的7个关键技术实现
  • MagiskHide Props Config终极指南:轻松绕过SafetyNet的设备指纹修改工具
  • 2026租房平台红黑榜:合同正规的只有这3家
  • Windows系统优化终极指南:Chris Titus Tech WinUtil完整使用教程
  • 5个理由告诉你:为什么Sunshine正在重新定义个人游戏串流体验
  • XUnity.AutoTranslator:Unity游戏实时翻译引擎的架构设计与生产级部署方案
  • 将claudecode编程助手无缝对接至taotoken享受多模型与稳定服务
  • 独立开发者如何利用Taotoken透明计费灵活控制项目AI预算
  • 背单词 纯英文 2026年05月
  • AutoSubs完整指南:本地AI字幕生成工具,3步完成专业级字幕制作
  • AppImageLauncher:5分钟搞定Linux桌面应用集成管理
  • AutoDL RTX 3090 + PyTorch 1.8环境配置全记录:我的炼丹炉搭建日记
  • Go语言任务队列PRODMAN:生产级异步作业调度与微服务集成实践
  • 【scritp】</script> 解析问题
  • VisualCppRedist AIO:Windows程序修复工具的终极解决方案
  • PDF.js 实战:除了隐藏工具栏,这几种定制化需求你也能轻松搞定
  • 基于vue的图书管理系统[vue]-计算机毕业设计源码+LW文档
  • maku-boot低代码开发平台:技术强大、功能丰富且更新不断!
  • 如何快速使用喜马拉雅音频下载器:跨平台免费工具完整指南
  • 如何5分钟掌握AI视频字幕去除技巧:Video Subtitle Remover完整教程
  • 游戏语言障碍终结者:XUnity.AutoTranslator让所有Unity游戏秒变中文版 [特殊字符]
  • Nginx 为什么强:不只是 epoll 和零拷贝,而是一整套高并发工程设计
  • 全面掌握PS4 Apollo存档管理工具:从入门到精通的实战指南
  • 从“21粒”误开,看AI如何补位处方安全
  • LaTeX2Word-Equation:让学术公式复制告别格式噩梦的终极方案
  • 不止是算法:用Python一行代码生成杨辉三角,再玩点‘倒过来’的花样