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

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

当大语言模型的浪潮席卷全球我们 Java 开发者常常陷入一个尴尬的境地Python 似乎成了 AI 的“官方语言”而我们对 Spring 全家桶的深厚积累似乎暂时派不上用场。Spring AI 的出现彻底打破了这一困局。Spring AI 是 Spring 官方团队主导开发的开源项目它为 Java/Spring 生态系统提供了一个统一、模块化、企业级友好的 AI 应用开发框架。核心理念是AI 开发应遵循 Spring 哲学——POJO 编程、自动配置、可移植、可观测、可测试。1. 环境准备JDK 17Spring Boot 3.x 的硬性要求Maven 3.8AI 模型厂商百练阿里云百炼大模型平台国内访问友好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 如下projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersion!-- 第一层Spring Boot 父 POM管理 Boot 生态 --parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.5.14/versionrelativePath//parentartifactIdspring-ai-quickstart/artifactIdnamespring-ai-quickstart/namepropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingjava.version17/java.versionspring-ai.version1.1.5/spring-ai.version/properties!-- 第二层导入 Spring AI BOM管理 AI 生态 --dependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion${spring-ai.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement!-- 依赖 --dependencies!-- Spring Boot Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI Ollama 模型 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-ollama/artifactId/dependency!-- Spring AI OpenAI协议 模型 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-openai/artifactId/dependency!-- Spring Boot Lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!-- Spring Boot 测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdconfigurationannotationProcessorPathspathgroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/path/annotationProcessorPaths/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project2.1 构件仓库2.1.1 正式版 - 使用 Maven CentralSpring AI 1.0.0 及后续版本已在 Maven Central 仓库提供。构建文件只需启用 Maven Central 即可通常无需额外配置仓库:repositoriesrepositoryidcentral/idurlhttps://repo.maven.apache.org/maven2/url/repository/repositoriesMaven 构建默认包含 Maven Central不需要额外配置2.1.2 快照版 - 添加快照仓库如需使用开发版本如1.1.0-SNAPSHOT或1.0.0之前的里程碑版本需在构建文件中添加以下快照仓库:repositoriesrepositoryidspring-snapshots/idnameSpring Snapshots/nameurlhttps://repo.spring.io/snapshot/urlreleasesenabledfalse/enabled/releases/repositoryrepositorynameCentral Portal Snapshots/nameidcentral-portal-snapshots/idurlhttps://central.sonatype.com/repository/maven-snapshots//urlreleasesenabledfalse/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository/repositories需要注意的是使用 Maven 构建 Spring AI 快照时请检查镜像配置。若在 settings.xml 中配置了类似如下镜像mirroridmy-mirror/idmirrorOf*/mirrorOfurlhttps://my-company-repository.com/maven/url/mirror通配符*会将所有仓库请求重定向至该镜像导致无法访问 Spring 快照仓库。请修改 mirrorOf 配置排除 Spring 仓库mirroridmy-mirror/idmirrorOf*,!spring-snapshots,!central-portal-snapshots/mirrorOfurlhttps://my-company-repository.com/maven/url/mirror此配置允许 Maven 直接访问 Spring 快照仓库同时通过镜像获取其他依赖。2.2 Spring Boot 依赖管理Spring Boot 本身提供 BOMspring-boot-dependencies管理 Boot 生态通常由父 POM 管理parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.5.14/versionrelativePath//parent2.3 Spring AI 依赖管理Spring AI 也提供 BOM 来管理 Spring AI 生态声明了 Spring AI 指定所有依赖的推荐版本dependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.1.5/versiontypepom/typescopeimport/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 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI Ollama 模型 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-ollama/artifactId/dependency!-- Spring AI OpenAI协议 模型 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-openai/artifactId/dependency!-- Spring Boot Lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!-- Spring Boot 测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/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 不要带/v1Spring 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 流式对话接口Slf4jRestControllerRequestMapping(/api/v1/)publicclassChatController{AutowiredprivateChatClientchatClient;GetMapping(value/chat,producestext/plain;charsetUTF-8)publicFluxStringchatStream(RequestParam(valuemessage,defaultValue你是谁)Stringmessage){FluxStringresultchatClient.prompt().user(message).stream().content();log.info(chat: {},message);returnresult;}}代码非常简洁prompt()创建一个提示词构建器user(message)设置用户输入stream()要求模型以流式方式返回SSEcontent()从响应中提取纯文本流返回类型FluxString是 Reactor 的响应式流天然适合 SSE 场景。Spring Boot 会自动将其包装为 text/event-stream 格式输出到浏览器。5. 启动并测试5.1 设置百练模型api-key如果选用百练模型而非 Ollama 本地模型需要设置如下系统变量export DASHSCOPE_API_KEY你的api-key5.2 启动应用运行如下代码启动 Spring Boot 工程SpringBootApplicationpublicclassAIQuickstartApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AIQuickstartApplication.class,args);}}或者使用如下命令启动应用mvn spring-boot:run5.3 测试浏览器直接访问http://localhost:8888/api/v1/chat?message请用三句话介绍Spring AI输出如下Spring AI 是一个专为 Java 开发者设计的开源框架旨在简化生成式人工智能与 Spring Boot 应用的集成。它通过提供统一的抽象层和 API屏蔽了不同大语言模型提供商的差异支持快速构建聊天机器人及检索增强生成RAG应用。依托 Spring 生态系统的成熟机制Spring AI 显著降低了开发门槛使企业能更高效地利用 AI 技术。源码spring-ai-quickstart

相关文章:

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

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

如何5步解锁Adobe创意套件:Adobe-GenP通用激活方案深度解析

如何5步解锁Adobe创意套件:Adobe-GenP通用激活方案深度解析 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你是否曾经因为Adobe Creative Cloud高昂的订…...

ReadCat:重塑你的数字阅读体验,开源小说阅读器的革命性选择

ReadCat:重塑你的数字阅读体验,开源小说阅读器的革命性选择 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 你是否曾在深夜阅读时被烦人的广告弹窗打断&#…...

从玩具到工具:用74HC595和数码管为你的Arduino项目做个‘状态监视器’

从玩具到工具:用74HC595和数码管为你的Arduino项目做个‘状态监视器’ 在创客的世界里,数码管常被视为入门级的显示元件,但通过巧妙设计,它能蜕变为项目中的核心信息枢纽。本文将带你突破基础计数功能,构建一个能实时反…...

使用nodejs快速搭建对接taotoken的简单聊天服务

使用 Node.js 快速搭建对接 Taotoken 的简单聊天服务 1. 准备工作 在开始之前,请确保您已经完成以下准备工作: 注册 Taotoken 账号并登录控制台在控制台中创建 API Key在模型广场查看并记录您想要使用的模型 ID确保本地已安装 Node.js 16 或更高版本 …...

macOS微信防撤回终极教程:WeChatIntercept插件完整使用指南

macOS微信防撤回终极教程:WeChatIntercept插件完整使用指南 【免费下载链接】WeChatIntercept 微信防撤回插件,一键安装,仅MAC可用,支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 还在为微…...

【scritp】</script> 解析问题

核心规律&#xff1a;只要在 <script> 标签内部出现 </script>&#xff0c;无论是什么&#xff0c;都会触发这个问题&#xff0c;与是否在字符串、注释、正则表达式等无关。 如&#xff1a; 1 <script> 2 alert("aaa"); 3 //</script> 4…...

魔兽争霸3终极优化指南:简单三步解锁流畅游戏体验

魔兽争霸3终极优化指南&#xff1a;简单三步解锁流畅游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3的卡顿、低帧率、画面拉…...

别再踩坑了!Windows 10 下 MobSF 3.6.0 环境搭建保姆级避坑指南(附Frida版本解决方案)

Windows 10下MobSF 3.6.0环境搭建全流程避坑手册 移动应用安全测试已成为开发生命周期中不可或缺的环节&#xff0c;而MobSF作为一款开源框架&#xff0c;凭借其全面的静态与动态分析能力&#xff0c;正获得越来越多安全团队的青睐。但在Windows平台搭建环境时&#xff0c;从Py…...

安卓B站缓存视频合并终极指南:一键导出完整MP4与弹幕播放

安卓B站缓存视频合并终极指南&#xff1a;一键导出完整MP4与弹幕播放 【免费下载链接】BilibiliCacheVideoMerge &#x1f525;&#x1f525;Android上将bilibili缓存视频合并导出为mp4&#xff0c;支持安卓5.0 ~ 13&#xff0c;视频挂载弹幕播放(Android consolidates and exp…...

Source Han Serif CN:开源中文字体性能优化与跨平台部署完整技术方案

Source Han Serif CN&#xff1a;开源中文字体性能优化与跨平台部署完整技术方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf Source Han Serif CN&#xff08;思源宋体&#xff09…...

告别语音文件兼容性烦恼:silk-v3-decoder 助你轻松解码微信QQ音频 [特殊字符]

告别语音文件兼容性烦恼&#xff1a;silk-v3-decoder 助你轻松解码微信QQ音频 &#x1f3b5; 【免费下载链接】silk-v3-decoder [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to other format (like mp3). Batch…...

猫抓浏览器插件:3分钟学会网页视频下载的终极免费方案

猫抓浏览器插件&#xff1a;3分钟学会网页视频下载的终极免费方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到喜欢的在线视频无…...

AI学习篇(四) | AI设计类Skills推荐清单(2026年)

AI学习篇&#xff08;四&#xff09; | AI设计类Skills推荐清单&#xff08;2026年&#xff09;1. 比较火&#xff0c;但不作为默认推荐的设计类 Skills2. 当前更推荐2.1 taste-skill2.2 impeccable3. 额外场景3.1 只做上线前复审3.2 只做设计方向校准4. 不要这样装5. 扩展关注…...

探索高效教育资源管理:智能电子课本下载工具实战指南

探索高效教育资源管理&#xff1a;智能电子课本下载工具实战指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 项目地址:…...

MagiskHide Props Config终极指南:轻松修改Android设备属性,快速通过SafetyNet检测

MagiskHide Props Config终极指南&#xff1a;轻松修改Android设备属性&#xff0c;快速通过SafetyNet检测 【免费下载链接】MagiskHidePropsConf This tool is now dead... 项目地址: https://gitcode.com/gh_mirrors/ma/MagiskHidePropsConf MagiskHide Props Config是…...

互联网大厂 Java 求职面试:面对微服务与 Spring Cloud 的挑战

互联网大厂 Java 求职面试&#xff1a;面对微服务与 Spring Cloud 的挑战 面试官&#xff1a;燕双非&#xff0c;今天我们将进行一场关于 Java 和微服务的面试。首先&#xff0c;请你简单介绍一下 Spring Cloud 的主要组件以及它们的作用。 燕双非&#xff1a;哦&#xff0c;Sp…...

Doris索引怎么选?从BloomFilter、Bitmap到倒排索引的保姆级配置手册

Doris索引选型实战指南&#xff1a;从原理到配置的深度优化 在数据仓库领域&#xff0c;查询性能直接决定了分析效率的上限。作为新一代MPP分析型数据库&#xff0c;Doris凭借其优异的实时分析能力已经成为企业级数据仓库的热门选择。但要让Doris真正发挥威力&#xff0c;索引的…...

别再只读原始数据了!手把手教你用MPU6050的DMP功能获取稳定姿态角(STM32 HAL库实战)

从卡尔曼滤波到DMP&#xff1a;MPU6050姿态解算的工程实践指南 在无人机飞控、自平衡机器人或VR设备开发中&#xff0c;姿态检测的准确性和实时性往往直接决定产品成败。许多工程师第一次接触MPU6050时&#xff0c;都会经历从原始数据采集到自行实现互补滤波的探索过程&#xf…...

深入STM32定时器:巧用PWM移相与ADC触发,搞定三电阻采样的非观测区难题

STM32定时器高级应用&#xff1a;PWM移相与ADC触发协同破解三电阻采样盲区 在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中&#xff0c;相电流检测的准确性直接决定了控制性能的优劣。当采用三电阻采样方案时&#xff0c;工程师们常常会遇到一个棘手的难题——在扇区过渡区和…...

iperf3 Windows预编译二进制完整解决方案:企业级网络性能测试深度实践

iperf3 Windows预编译二进制完整解决方案&#xff1a;企业级网络性能测试深度实践 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3-win-build…...

天赐范式第28天:意识节点穿越的算子流实现——从Wilson-Cowan到三态自发循环

AdS/CFT对偶、公理切换、数学毒丸&#xff0c;在一个简化的神经群体模型中自发涌现了清醒–梦境–混沌的三态循环。我们不是要“模拟意识”&#xff0c;而是想看看&#xff1a;当把天赐范式的算子流架构搬到Wilson-Cowan方程上&#xff0c;能否自然出现节点穿越&#xff1f;1. …...

马斯克证实 xAI 曾借助 OpenAI 模型改进自身模型,模型蒸馏引争议

【导语&#xff1a;周四&#xff0c;在加利福尼亚州的联邦法庭上&#xff0c;埃隆马斯克证实其创立的 xAI 曾借助 OpenAI 模型改进自身模型&#xff0c;而模型蒸馏这一常见做法近年来引发了诸多争议。】xAI 借助 OpenAI 模型改进自身周四在加利福尼亚州的一家联邦法庭上&#x…...

终极指南:如何通过ComfyUI Photoshop插件高效提升AI绘画工作流

终极指南&#xff1a;如何通过ComfyUI Photoshop插件高效提升AI绘画工作流 【免费下载链接】Comfy-Photoshop-SD Download this extension via the ComfyUI manager to establish a connection between ComfyUI and the Auto-Photoshop-SD plugin in Photoshop. https://github…...

如何高效使用智能屏幕翻译工具:创新实时翻译解决方案完整指南

如何高效使用智能屏幕翻译工具&#xff1a;创新实时翻译解决方案完整指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo …...

从‘Hello World’到处理百万交易:手把手带你体验COBOL在IBM z/OS上的开发环境搭建

从‘Hello World’到处理百万交易&#xff1a;手把手带你体验COBOL在IBM z/OS上的开发环境搭建 第一次接触COBOL时&#xff0c;很多人会被它独特的语法结构和历史感所震撼。这种诞生于1959年的语言至今仍在全球金融、保险等关键领域默默支撑着每天数万亿的交易。本文将带你从零…...

蓝桥杯嵌入式省赛真题复盘:STM32G431如何用两个定时器搞定双路独立PWM?

STM32G431双定时器PWM实战&#xff1a;蓝桥杯嵌入式竞赛高频考点精解 在嵌入式系统开发中&#xff0c;PWM&#xff08;脉冲宽度调制&#xff09;技术如同一位低调却不可或缺的幕后工作者&#xff0c;从电机调速到LED调光&#xff0c;处处都有它的身影。而当面对需要多路独立PWM…...

VSCode 2026启动卡顿真相:不是插件,是VSCodium兼容层引发的IPC队列阻塞(附patch补丁+验证脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode 2026启动卡顿现象的系统性定位 VSCode 2026 版本在部分高负载开发环境中出现显著启动延迟&#xff08;平均 >8.2s&#xff09;&#xff0c;该问题并非单纯由硬件性能引发&#xff0c;而是与扩…...

如何快速搭建免费开源翻译服务:3种高效部署方法全解析

如何快速搭建免费开源翻译服务&#xff1a;3种高效部署方法全解析 【免费下载链接】LibreTranslate Free and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup. 项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate …...

Altera 28nm FPGA浮点DSP设计流程与矩阵分解优化

1. Altera 28nm FPGA浮点DSP设计流程解析在数字信号处理领域&#xff0c;FPGA凭借其并行架构和可重构特性&#xff0c;已成为高性能计算的重要平台。传统FPGA在定点运算中表现出色&#xff0c;但在浮点运算领域却长期面临挑战。Altera针对这一痛点开发的创新设计流程&#xff0…...