
系列导读老张38岁Java后端12年ERP系统的活字典。某天总监拍着他说下季度给客服系统加个AI助手你来负责。老张的第一反应完了要学Python了。本系列将讲述老张如何用Spring AI在Java世界里玩转AI从环境搭建到企业级Agent全程实战代码开源。一、故事开场老张的晴天霹雳周三下午总监老李把老张叫进会议室。“小张啊公司客服系统用户量涨了5倍人力客服忙不过来。董事会说要加个AI助手自动回答常见问题。你技术栈熟这个项目你来带。”老张愣了三秒。AI助手他脑子里蹦出的第一个念头是Python、PyTorch、Transformers……那些他完全没碰过的东西。“李总这……我得先学Python吧”老李摆摆手“不用那么复杂就用你们熟悉的Java搞。现在有个叫Spring AI的东西国内还做了阿里云版直接调百炼的大模型就行。”老张的内心独白Java AI这不是跨服聊天吗就像让一个厨师突然去开飞机——原理相通但控制杆完全不一样啊二、技术破冰什么是Spring AI2.1 Spring AI是什么一句话定义Spring AI是Spring官方推出的AI应用开发框架让Java开发者能用熟悉的Spring Boot习惯开发AI应用。传统AI开发Spring AI开发Python PyTorch/TensorFlowJava Spring Boot手写API调用、异常处理Autowired注入ChatModel手动管理向量库连接Starter自动装配换模型改一堆代码改配置、换Starter2.2 双生态架构关键这是很多教程没讲清楚的┌─────────────────────────────────────────────┐ │ Spring AI上游官方 │ │ 提供ChatModel、EmbeddingModel、 │ │ RAG、向量库抽象、工具调用、记忆 │ │ 统一API跨厂商可移植 │ └─────────────────────────────────────────────┘ ↓ 扩展 ┌─────────────────────────────────────────────┐ │ Spring AI Alibaba阿里云版 │ │ 在Spring AI基础上增加 │ │ • DashScopeChatModel百炼大模型 │ │ • Agent能力工具调用循环、Skills │ │ • Graph编排、多Agent协作 │ │ • MCP协议支持 │ └─────────────────────────────────────────────┘老张的理解就像Android系统和MIUI的关系——Spring AI是底层系统Spring AI Alibaba是加了本地化能力的定制版。三、第一步搭建环境3.1 快速开始5分钟搞定打开 start.spring.io勾选Spring Boot3.2Spring AI AlibabaDashScope StarterSpring Web后续做接口用或者直接复制Maven依赖!-- 百炼大模型Spring AI Alibaba构建在 Spring AI 1.1 之上 --dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-dashscope/artifactId!-- 版本随 Spring AI Alibaba 发版同步与配套仓库 pom.xml 一致1.1.2.2 --version1.1.2.2/version/dependency3.2 配置API Key在application.yml里填入你的百炼API Key去百炼平台申请spring:ai:dashscope:api-key:sk-xxxxxxxxxxxxxxxxxxxxxxxxchat:options:model:qwen-max# 选大模型还是qwen-turbo看预算老张的吐槽“这就完了不需要装Python、不需要pip install、不需要配虚拟环境Spring AI你是懂Java程序员的痛。”四、第一个对话ChatClient4.1 传统方式 vs Spring AI方式传统调用大模型API// 你得自己拼HTTP请求、处理JSON、管理TokenCloseableHttpClienthttpClientHttpClients.createDefault();HttpParamsparamsnewBasicHttpParams();// ... 50行代码后终于拿到结果Spring AI方式ServicepublicclassAiService{AutowiredprivateChatClientchatClient;// 直接注入框架帮你装配好publicStringchat(Stringquestion){returnchatClient.prompt().user(question).call().content();}}4.2 跑起来试试写个Controller测一下RestControllerRequestMapping(/ai)publicclassAiController{AutowiredprivateChatClientchatClient;GetMapping(/chat)publicStringchat(RequestParamStringquestion){returnchatClient.prompt().user(question).call().content();}}访问http://localhost:8080/ai/chat?question你好老张的惊喜“返回了一段完整的问候语没有报错、没有异常就这么简单”五、进阶让AI记住你多轮对话5.1 问题每问一次都是陌生人默认情况下ChatClient每次请求都是独立的。问你叫什么名字答完再问我刚才问了什么AI一脸茫然。5.2 解决方案带历史的PromptpublicStringchatWithHistory(Stringquestion,ListMessagehistory){PromptpromptnewPrompt(history);// 把历史消息传进去prompt.addMessage(newUserMessage(question));ChatResponseresponsechatClient.prompt(prompt).call().getResult();// 把回复也加入历史为下一轮做准备history.add(response.getResult().getOutput());returnresponse.getResult().getOutput().getText();}老张的类比“这就像跟同事聊天——你不会每次见面都重新自我介绍一遍对吧Spring AI的对话记忆就是让你’带着上下文继续聊’。”六、实战项目老张的客服助手原型老张花了一晚上写出了第一个可用版本RestControllerRequestMapping(/customer-service)publicclassCustomerServiceController{AutowiredprivateChatClientchatClient;// 用Map存储每个用户的对话历史privatefinalMapString,ListMessagememorynewConcurrentHashMap();PostMapping(/ask)publicStringask(RequestBodyAskRequestrequest){StringuserIdrequest.getUserId();// 获取或创建该用户的历史ListMessagehistorymemory.computeIfAbsent(userId,k-newArrayList());// 构建带历史的PromptPromptpromptnewPrompt(history);prompt.addMessage(newUserMessage(request.getQuestion()));// 调用AIChatResponseresponsechatClient.prompt(prompt).call().getResult();// 记录回复到历史history.add(response.getResult().getOutput());returnresponse.getResult().getOutput().getText();}}测试效果用户你们退货政策是什么 AI根据我们的规定7天内可无理由退货... 用户需要寄回原包装吗 AI是的需要保持原包装完整... 用户那运费谁承担 AI非质量问题由买家承担运费...老张的成就感“这就跑通了比我想象的简单太多了”七、下一集预告老张刚把客服助手demo跑起来总监老李又发来消息“不错但这只能回答通用问题。能不能让它学会我们公司的文档比如产品手册、FAQ这些”AI学会了提问但还没学会读书。下一集《给AI装上知识库RAG入门》将讲述什么是RAG检索增强生成为什么单纯的大模型不够用如何让AI基于你的文档回答问题 完整代码仓库所有代码已开源GitHubhttps://github.com/yinclei/SpringAITutorial分支chapter01-first-chat✅代码状态本集代码见配套仓库SpringAITutorial的ep01/包已按 Spring AI 1.1.4GA编译验证2026-08-23。文中片段为教学简化示意以仓库代码为准API Key 用百炼免费额度自备。 互动环节老兵问答你在AI学习中遇到的最大障碍是什么A. Python环境配置B. 数学公式看不懂C. 不知道从哪学起D. 其他评论区说说下周一晚9点我们继续老张的故事作者Java老兵搞AI | 关注我看Java如何玩转AI