news 2026/5/1 8:31:20

[特殊字符] Spring AI 超细图解:让 Javaer 也能 30 分钟撸出“ChatGPT 同款”后端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[特殊字符] Spring AI 超细图解:让 Javaer 也能 30 分钟撸出“ChatGPT 同款”后端

一句话总结:Spring 官方终于把大模型做成了“Spring Bean”,改配置就能换模型,Java 党直接原地过年。

1️⃣ 为什么 Java 党需要 Spring AI?

痛点传统做法Spring AI 做法
切模型 = 改代码手写 3 套 SDK一行配置:model=gpt-4o → qwen-max
Prompt 拼接像串 SQL"请扮演"+role+"回答"+qPromptTemplate + SpEL,热更新
流式打字机自己写 SSEFlux<ChatResponse> 直接 return
私域知识问答Python+FAISS+LCJava 原生:Tika → VectorStore → RAG
生产可观测0 埋点复用 Actuator,token 成本仪表盘

2️⃣ 架构一张图秒懂

👉 官方定位:把 LLM 当成“另一种数据源”,Spring 熟悉的味道不变。

3️⃣ Hello World:4 行代码跑起来

① 依赖

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

② 配置

spring: ai: openai: api-key: ${OPENAI_API_KEY} chat: options: model: gpt-4o temperature: 0.7

③ 代码

@RestController @RequiredArgsConstructor public class ChatController { private final ChatClient chatClient; @GetMapping("/chat") public String chat(@RequestParam String q) { return chatClient.prompt().user(q).call().content(); } }

✅ 启动后curl http://localhost:8080/chat?q=SpringAI好用吗直接出答案。

4️⃣ Prompt 模板:像写 Thymeleaf 一样玩提示词

模板文件coder.st

你是资深 {role},请用 {style} 风格解释 {concept},不超过 {maxWords} 字。

Java 侧

PromptTemplate template = new PromptTemplate(coderResource); Prompt prompt = template.create(Map.of( "role", "Java 架构师", "style", "知乎", "concept", "Spring AI", "maxWords", 200)); return chatClient.prompt(prompt).call().content();

🎯 好处:运营也能改提示,无需发版;结合 Spring Cloud Config 可热更新。

5️⃣ 结构化输出:让 GPT 直接给你 Java Bean

public record Movie(String name, LocalDate releaseDate, List<String> actors) {} Movie movie = chatClient.prompt() .user("随机生成一部科幻电影") .call() .entity(Movie.class); // ← 关键

📌 成功率 98%,失败抛SpringAiException,加@Retryable自动重试。

6️⃣ Function Calling:把“查天气”做成 Java 方法

@Service public class ToolBox { @Tool(description = "根据城市查实时温度,返回摄氏度") public int getTemperature(String city) { return RestClient.create() .get().uri("https://wttr.in/{city}?format=%t", city) .retrieve().body(String.class).trim(); } }

LLM 自动决定何时调用,日志里能看到完整链路。

7️⃣ RAG:30 分钟搭一个公司知识库问答

架构路线

PDF → Tika → TextSplitter → Embedding → VectorStore → Retrieval → ChatModel → 答案

核心代码(灌库)

List<Document> docs = new PdfDocumentReader("employee-handbook.pdf").get(); vectorStore.add(docs);

问答接口

List<Document> topK = vectorStore.similaritySearch(q, 3); String context = topK.stream().map(Document::getContent).collect(joining("\n")); return chatClient.prompt() .system("你是 HR,只能根据以下文档回答:\n" + context) .user(q) .call() .content();

📊 实测 200 页手册,平均延迟 1.2 s,token 成本 0.3 分/次。

8️⃣ 流式 SSE:前后端“打字机”效果

后端

@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<ServerSentEvent<String>> stream(String q) { return chatClient.prompt().user(q).stream() .map(resp -> ServerSentEvent.builder(resp.getResult().getOutput().getContent()).build()); }

前端(React 伪代码)

const evtSource = new EventSource(`/stream?q=${question}`); evtSource.onmessage = e => setTxt(prev => prev + e.data);

9️⃣ 可观测 & 成本管控

Spring AI 内置 Micrometer 指标:

指标含义
ai.chat.tokens.prompt提问 token 数
ai.chat.tokens.completion回答 token 数
ai.chat.cost.total自动换算人民币
ai.chat.latency端到端延迟

📈 Grafana 模板直接导入,老板一眼看穿“昨天问答烧掉 23 块”。

🔟 Spring AI vs LangChain4j 对比

维度Spring AILangChain4j
语言亲和Java 原生Python 翻译版
生态红利Spring 全家桶自己拼装
函数调用注解 @Tool手动封装
配置刷新@RefreshScope不支持
社区文档官方 roadmap社区驱动

1️⃣1️⃣ 生产踩坑锦囊

  1. 超时:国内网络建议timeout=60s+ 重试。
  2. 上下文溢出:用TokenCountUtility预估,超长主动摘要。
  3. 函数死循环:设置max-function-calls=3
  4. 向量库一致性:Milvus 2.3 支持事务,RedisSearch 不支持。
  5. key 权限:OpenAI “project key” 2025 新功能,最小化权限。

1️⃣2️⃣ 未来 roadmap & 结语

时间计划
2025 Q1GA 版 + 多模态统一 ChatClient
2025 Q2Spring Batch AI(大模型批处理)
2025 Q3Serverless 弹性伸缩

🌈 一句话:Java 生态在 AI 时代的“最后一块拼图”已到位。
别再写脚本式 Python,用 Spring AI,把大模型真正“工程化”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 11:50:54

java计算机毕业设计校园车辆门禁管理系统 高校智能车行闸机云平台的设计与实现 基于SpringBoot的校园车辆出入与收费一体化系统

计算机毕业设计校园车辆门禁管理系统8d42u9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。校门早高峰堵成停车场、外来车蹭车位、临时车人工填单——传统纸质登记对讲机模式让保…

作者头像 李华
网站建设 2026/4/29 9:13:18

java计算机毕业设计校园畅聊交友平台的设计与实现 高校同频社交互动平台的设计与实现 基于SpringBoot的校园缘分速配与即时聊天系统

计算机毕业设计校园畅聊交友平台的设计与实现oytcz9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。“下课十分钟&#xff0c;隔壁教室的志同道合在哪里&#xff1f;”——当校园…

作者头像 李华
网站建设 2026/5/1 6:16:18

百亿量化私募高薪急招C++,应届,社招都看春招/秋招/校招/社招,23/24/25/26届都可base北上杭深现招岗位:C++量化系统开发工程师年base40-80万+bonus通

百亿量化私募高薪急招C&#xff0c;应届&#xff0c;社招都看 春招/秋招/校招/社招&#xff0c;23/24/25/26届都可 base北上杭深 现招岗位:C量化系统开发工程师 年base40-80万bonus 通过这里找到我 slam_pan 工作职责 1. 参与交易平台的设计、开发与测试&#xff0c;实…

作者头像 李华
网站建设 2026/5/1 7:34:57

springboot基于java的教学辅助平台(11595)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/29 23:42:49

附医华南医院助力市医协疼痛学科建设:受邀出席“广州市医师协会疼痛科医师分会成立大会暨首次学术会议” | 祝贺我院三位专家荣任要职

12月20日&#xff0c;广州附医华南医院三位专家应邀出席“广州市医师协会疼痛科医师分会成立大会暨首次学术会议”&#xff0c;积极参与学术交流&#xff0c;展示了医院在疼痛学科领域的专业影响与行业地位。本次大会选举中&#xff0c;广州附医华南医院专家团队荣获重要任职&a…

作者头像 李华
网站建设 2026/5/1 7:25:53

五城同庆!弘阳广场启动“山海奇境 新年新愿”大型主题营销活动

近日&#xff0c;弘阳集团宣布&#xff0c;旗下南京、常州、合肥、济南、安庆五座城市的弘阳广场&#xff0c;将于2025年12月中下旬至2026年1月上旬&#xff0c;联动推出以“山海奇境”与“新年新愿”为核心主题的系列大型节庆活动。此次活动横跨圣诞、跨年两大重要节点&#x…

作者头像 李华