第二章:Hello World 跑起来
第二章Hello World 跑起来上一章把 Spring AI 的定位聊清楚了这章直接上代码——5 分钟把第一个 AI 对话跑通。2.1 5 分钟跑通第一个 Chat 调用第一步加依赖Spring Boot 项目pom.xml加两样东西!-- Spring AI BOM统一管理版本跟 Spring Cloud 那个 BOM 一回事 --dependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.0.0/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement!-- 接入 OpenAI 的 starter --dependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-openai/artifactId/dependency/dependencies为什么先用 OpenAI因为它是 Spring AI 支持最完善的模型上手最丝滑。后面 2.3 节会教你一键切到国产模型。第二步配 API Keyapplication.ymlspring:ai:openai:api-key:${OPENAI_API_KEY}# 从环境变量读别硬编码base-url:https://api.openai.comchat:options:model:gpt-4o-mini# 便宜够用别一上来就 gpt-4otemperature:0.7第三步写代码RestControllerpublicclassChatController{privatefinalChatClientchatClient;// 构造器注入跟注 JdbcTemplate 一样publicChatController(ChatClient.Builderbuilder){this.chatClientbuilder.build();}GetMapping(/chat)publicStringchat(RequestParamStringmessage){returnchatClient.prompt().user(message).call().content();}}第四步启动试一下curlhttp://localhost:8080/chat?message用一句话介绍Java返回Java 是一种广泛使用的面向对象编程语言以一次编写到处运行的跨平台特性著称。就四步核心代码 3 行。没有 JSON 拼接、没有 HTTP 工具类、没有流处理——ChatClient全给你干了。2.2 同步 vs 流式啥场景用哪个上面用的是.call()这是同步模式——你问一句等 AI 全部答完一次性返回。但你见过 ChatGPT 的网页版吧它是一个字一个字往外蹦的。那就是流式模式用.stream()流式代码GetMapping(/chat/stream)publicFluxStringchatStream(RequestParamStringmessage){returnchatClient.prompt().user(message).stream().content();// FluxString每个元素是 AI 吐出的一小段文本}前端用 SSEServer-Sent Events接就行了consteventSourcenewEventSource(/chat/stream?message介绍Java);eventSource.onmessage(event){// 每次收到一小段就追加到页面document.getElementById(output).innerTextevent.data;};到底用哪个看场景场景用同步.call()用流式.stream()后台任务定时报表、批量处理✅❌API 给前端实时展示聊天界面❌✅不需要秒级响应的接口✅❌RAG 问答期望用户看到思考过程❌✅简单的分类、摘要、翻译✅❌一句话总结用户盯着屏幕等结果 → 流式。没人看、机器之间交互 → 同步。流式的一个坑注意.stream().content()返回的是FluxString它是反应式的。如果你整个项目没用 WebFlux也没关系——Spring MVC 也支持返回Flux。但要注意不要对流式返回的内容做阻断操作比如在里面 sleep会破坏响应延迟。流式端点默认不超时如果 AI 卡了前端会一直干等。建议前端加超时兜底。2.3 一键切换模型改配置就行这是 Spring AI 最爽的地方。你现在用的是 OpenAI想换成通义千问第一步换依赖!-- 把 openai starter 换成千问的 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-dashscope/artifactId/dependency第二步改配置spring:ai:dashscope:api-key:${DASHSCOPE_API_KEY}chat:options:model:qwen-plustemperature:0.7第三步业务代码——不改// 这行代码不动chatClient.prompt().user(message).call().content();代码零改动只换依赖 改配置。这就是 Spring AI 做的抽象的价值——它把各家模型的差异封装在 starter 层对上层暴露统一的 API。支持哪些模型主流的都支持选型参考模型Starter 名称适合场景OpenAI (GPT-4o / 4o-mini)spring-ai-starter-model-openai综合能力最强贵通义千问spring-ai-starter-model-dashscope中文好便宜DeepSeekspring-ai-starter-model-openai*性价比之王中文强智谱 GLMspring-ai-starter-model-zhipuai国产合规中等Ollama本地spring-ai-starter-model-ollama完全免费、数据不出门*DeepSeek 兼容 OpenAI 接口格式所以直接用 OpenAI 的 starter把base-url指向 DeepSeek 的服务地址就行。2.4 实战经验生产环境别把 API Key 写配置文件里写完 Hello World你以为就完了上线之前这一个问题比前面所有代码都重要。你可能会这么干❌ 错误示范spring:ai:openai:api-key:sk-proj-abc123def456...# 写在配置文件里提交到 Git这有什么问题Git 泄露代码提交到仓库Key 就暴露了。哪怕你设了.gitignore总有人不小心 force push。配置文件到处拷贝开发、测试、生产环境各一份Key 散落各处。无法动态轮换Key 需要定期更换你不可能每次都改配置重启。正确做法三层防护第一层环境变量最低要求spring:ai:openai:api-key:${OPENAI_API_KEY}至少别硬编码。CI/CD 管道注入环境变量。第二层配置中心推荐Spring Cloud 项目用 Nacos / Apollo / Consulspring:ai:openai:api-key:${OPENAI_API_KEY}# 仍然用占位符但实际值从配置中心拉取不在任何文件里出现。配置中心支持加密存储和动态刷新。第三层自定义 ApiKey 提供器最安全如果你的 Key 需要从专门的密钥管理服务KMS获取比如 HashiCorp Vault、腾讯云 KMSComponentpublicclassKmsApiKeyProviderimplementsFunctionString,String{OverridepublicStringapply(StringmodelProvider){// 从你公司的密钥管理服务获取真实的 API Key// 可以加缓存避免每次调用都请求 KMSreturnkmsService.getDecryptedKey(modelProvider);}}然后在配置里引用ConfigurationpublicclassAiConfig{BeanpublicChatClientchatClient(ChatClient.Builderbuilder,KmsApiKeyProviderkeyProvider){// 获取解密后的 Key 传给 Builderreturnbuilder.defaultOptions(...).build();}}现实一点大部分团队做到第一层就够了如果你的团队规模不大、没有 KMS 基础设施至少做到环境变量 不要在日志里打印 Key// 配个日志脱敏logging:pattern:console:...# 确保不打印请求体中的 api-key以及给 Key 设额度上限。OpenAI / 千问的控制台都能设置月度消费上限设个 200 块/月就算 Key 泄露也不会破产。第二章小结Hello World 就三步加依赖 → 配 Key → 写ChatClient三行代码。同步 vs 流式用户盯着屏幕等 → 流式。后台处理 → 同步。别反过来。换模型只改配置不动代码这是 Spring AI 的核心价值。生产环境 Key 管理最低限度用环境变量理想情况上 KMS。下一章我们进正题——Prompt 管理。别再拼字符串了教你像管理 SQL 一样管理 Prompt还有版本化 A/B 测试的思路。

相关新闻

【会议征稿通知 | 八校联合主办 | IEEE出版 | EI 、Scopus稳定检索】2026年AI与公共安全国际学术会议(ICAIPS 2026)

【会议征稿通知 | 八校联合主办 | IEEE出版 | EI 、Scopus稳定检索】2026年AI与公共安全国际学术会议(ICAIPS 2026)

2026年AI与公共安全国际学术会议(ICAIPS 2026) 2026 International Conference on AI and Public Safety 2026年9月18-20日 | 中国-南昌 大会官网:www.icaips.com 截稿时间:见官网(早投稿,早录用&#x…

2026/8/9 8:40:14 阅读更多 →
3个维度探索D2DX:为经典暗黑破坏神2注入现代显示技术的创新方案

3个维度探索D2DX:为经典暗黑破坏神2注入现代显示技术的创新方案

3个维度探索D2DX:为经典暗黑破坏神2注入现代显示技术的创新方案 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx …

2026/8/9 9:01:17 阅读更多 →
Reloaded-II完整指南:5分钟掌握跨平台游戏模组管理终极方案

Reloaded-II完整指南:5分钟掌握跨平台游戏模组管理终极方案

Reloaded-II完整指南:5分钟掌握跨平台游戏模组管理终极方案 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II 还在为每个游戏寻找不同…

2026/8/9 15:27:41 阅读更多 →

最新新闻

2026年AI工具测评:8款高效降本增效方案

2026年AI工具测评:8款高效降本增效方案

1. 项目概述:AI降本增效工具测评的必要性2026年将是AI技术深度融入工作流程的关键节点。根据Gartner最新预测,到2026年将有80%的企业采用AI工具优化业务流程,但其中60%会面临工具选择困难症。我花了三个月时间实测了市面上声称能"降低AI…

2026/8/10 3:17:36 阅读更多 →
PHP弱类型比较漏洞解析与CTF实战

PHP弱类型比较漏洞解析与CTF实战

1. 题目背景与核心考点解析"Simple_php"是攻防世界(CTF训练平台)中的一道经典Web题目,主要考察PHP弱类型比较漏洞的利用。题目名称中的"胎教版"暗示这是一道适合新手入门的基础题型,但需要掌握PHP语言特性才能正确解题。这道题的核心…

2026/8/10 3:17:36 阅读更多 →
分布式光伏储能系统优化配置与智能算法实践

分布式光伏储能系统优化配置与智能算法实践

1. 分布式光伏储能系统优化配置的核心挑战光伏发电的间歇性和波动性一直是行业痛点。我在参与某工业园区微电网项目时,曾遇到光伏出力突变导致储能系统频繁切换的问题——某日下午3点云层快速移动,光伏输出功率在10分钟内从1.2MW骤降到0.4MW,…

2026/8/10 3:17:36 阅读更多 →
二进制字符串转交替串的最少操作算法解析

二进制字符串转交替串的最少操作算法解析

1. 问题背景与定义今天我们来探讨一个有趣的字符串操作问题:如何用最少的操作次数使二进制字符串变成交替字符串。这个问题看似简单,但蕴含着不少值得深思的算法设计技巧。交替字符串指的是由0和1交替组成的字符串,比如"010101..."…

2026/8/10 3:17:36 阅读更多 →
Nacos 3.2.0本地环境搭建与配置管理实战

Nacos 3.2.0本地环境搭建与配置管理实战

1. Nacos 3.2.0本地环境搭建全景指南作为阿里巴巴开源的动态服务发现、配置管理和服务管理平台,Nacos在微服务架构中扮演着重要角色。最新发布的3.2.0版本在性能优化和功能完善方面都有显著提升,本文将带你从零开始完成本地环境搭建的全过程。1.1 环境准…

2026/8/10 3:17:36 阅读更多 →
093、YOLOv11改进-医学影像病灶检测中的小目标召回率提升——结合Focaler-IoU与高分辨率特征层的即插即用方案,病灶AP提升6.0%

093、YOLOv11改进-医学影像病灶检测中的小目标召回率提升——结合Focaler-IoU与高分辨率特征层的即插即用方案,病灶AP提升6.0%

093、YOLOv11改进-医学影像病灶检测中的小目标召回率提升——结合Focaler-IoU与高分辨率特征层的即插即用方案,病灶AP提升6.0% 一、被小目标逼疯的那个深夜 去年做肺结节检测项目,模型在5mm以下微小结节上的召回率惨不忍睹。调了三天anchor size、试了各种数据增强,AP卡在…

2026/8/10 3:16:36 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →