news 2026/8/25 14:26:11

第1集:Java老手被派做AI项目,第一反应:完蛋,要学Python了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第1集:Java老手被派做AI项目,第一反应:完蛋,要学Python了

系列导读:老张,38岁,Java后端12年,ERP系统的"活字典"。某天,总监拍着他说:"下季度给客服系统加个AI助手,你来负责。"老张的第一反应:完了,要学Python了。本系列将讲述老张如何用Spring AI在Java世界里玩转AI,从环境搭建到企业级Agent,全程实战,代码开源。


一、故事开场:老张的"晴天霹雳"

周三下午,总监老李把老张叫进会议室。

“小张啊,公司客服系统用户量涨了5倍,人力客服忙不过来。董事会说要加个AI助手,自动回答常见问题。你技术栈熟,这个项目你来带。”

老张愣了三秒。

AI助手?他脑子里蹦出的第一个念头是:Python、PyTorch、Transformers……那些他完全没碰过的东西。

“李总,这……我得先学Python吧?”

老李摆摆手:“不用那么复杂,就用你们熟悉的Java搞。现在有个叫Spring AI的东西,国内还做了阿里云版,直接调百炼的大模型就行。”

老张的内心独白:Java + AI?这不是跨服聊天吗?就像让一个厨师突然去开飞机——原理相通,但控制杆完全不一样啊!


二、技术破冰:什么是Spring AI?

2.1 Spring AI是什么?

一句话定义:Spring AI是Spring官方推出的AI应用开发框架,让Java开发者能用熟悉的Spring Boot习惯开发AI应用。

传统AI开发Spring AI开发
Python + PyTorch/TensorFlowJava + Spring Boot
手写API调用、异常处理@Autowired注入ChatModel
手动管理向量库连接Starter自动装配
换模型改一堆代码改配置、换Starter

2.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.2+
  • Spring AI AlibabaDashScope Starter
  • Spring Web(后续做接口用)

或者直接复制Maven依赖:

<!-- 百炼大模型(Spring AI Alibaba,构建在 Spring AI 1.1 之上) --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><!-- 版本随 Spring AI Alibaba 发版同步,与配套仓库 pom.xml 一致(1.1.2.2) --><version>1.1.2.2</version></dependency>

3.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程序员的痛。”


四、第一个对话:ChatClient

4.1 传统方式 vs Spring AI方式

传统调用大模型API

// 你得自己拼HTTP请求、处理JSON、管理TokenCloseableHttpClienthttpClient=HttpClients.createDefault();HttpParamsparams=newBasicHttpParams();// ... 50行代码后,终于拿到结果

Spring AI方式

@ServicepublicclassAiService{@AutowiredprivateChatClientchatClient;// 直接注入,框架帮你装配好publicStringchat(Stringquestion){returnchatClient.prompt().user(question).call().content();}}

4.2 跑起来试试

写个Controller测一下:

@RestController@RequestMapping("/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 解决方案:带历史的Prompt

publicStringchatWithHistory(Stringquestion,List<Message>history){Promptprompt=newPrompt(history);// 把历史消息传进去prompt.addMessage(newUserMessage(question));ChatResponseresponse=chatClient.prompt(prompt).call().getResult();// 把回复也加入历史,为下一轮做准备history.add(response.getResult().getOutput());returnresponse.getResult().getOutput().getText();}

老张的类比:“这就像跟同事聊天——你不会每次见面都重新自我介绍一遍对吧?Spring AI的对话记忆就是让你’带着上下文继续聊’。”


六、实战项目:老张的客服助手原型

老张花了一晚上,写出了第一个可用版本:

@RestController@RequestMapping("/customer-service")publicclassCustomerServiceController{@AutowiredprivateChatClientchatClient;// 用Map存储每个用户的对话历史privatefinalMap<String,List<Message>>memory=newConcurrentHashMap<>();@PostMapping("/ask")publicStringask(@RequestBodyAskRequestrequest){StringuserId=request.getUserId();// 获取或创建该用户的历史List<Message>history=memory.computeIfAbsent(userId,k->newArrayList<>());// 构建带历史的PromptPromptprompt=newPrompt(history);prompt.addMessage(newUserMessage(request.getQuestion()));// 调用AIChatResponseresponse=chatClient.prompt(prompt).call().getResult();// 记录回复到历史history.add(response.getResult().getOutput());returnresponse.getResult().getOutput().getText();}}

测试效果

用户:你们退货政策是什么? AI:根据我们的规定,7天内可无理由退货... 用户:需要寄回原包装吗? AI:是的,需要保持原包装完整... 用户:那运费谁承担? AI:非质量问题由买家承担运费...

老张的成就感:“这就跑通了!比我想象的简单太多了!”


七、下一集预告

老张刚把客服助手demo跑起来,总监老李又发来消息:“不错,但这只能回答通用问题。能不能让它学会我们公司的文档?比如产品手册、FAQ这些?”

AI学会了提问,但还没学会"读书"

下一集《给AI装上知识库:RAG入门》将讲述:

  • 什么是RAG(检索增强生成)
  • 为什么单纯的大模型不够用
  • 如何让AI基于你的文档回答问题

📦 完整代码仓库

所有代码已开源:

  • GitHub:https://github.com/yinclei/SpringAITutorial
  • 分支:chapter01-first-chat

代码状态:本集代码见配套仓库SpringAITutorialep01/包,已按 Spring AI 1.1.4(GA)编译验证(2026-08-23)。文中片段为教学简化示意,以仓库代码为准;API Key 用百炼免费额度自备。


💬 互动环节

老兵问答

你在AI学习中遇到的最大障碍是什么?
A. Python环境配置
B. 数学公式看不懂
C. 不知道从哪学起
D. 其他(评论区说说)

下周一晚9点,我们继续老张的故事!


作者:Java老兵搞AI | 关注我,看Java如何玩转AI

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

RAG的工作流程与目标

目录 RAG的工作流程&#xff1a; 知识库的构建&#xff1a; 调用&#xff1a; RAG的目标&#xff1a;如何提高Query和知识库的匹配度 如何优化Query&#xff1a; 如何优化知识库&#xff1a; 扩展&#xff1a;Embedding模型 RAG的工作流程&#xff1a; 上一节…

作者头像 李华
网站建设 2026/8/25 14:12:15

面向具身智能的TVA-VLA域不变特征解耦新方案

前沿技术探索&#xff1a;TVA智能体&#xff08;简称TVA&#xff09;TVA智能体&#xff08;亦称“AI智能体视觉”或“TVA视觉智能体”&#xff09;是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习&#xff08;DRL&#xff09;、卷积神…

作者头像 李华
网站建设 2026/8/25 14:10:00

通用进销存 vs 行业定制进销存选型报告

本文要点&#xff1a;本文从"通用型与行业定制型进销存系统的选型权衡"出发&#xff0c;以轻流与明道云为代表对比两类产品在业务适配度、迭代灵活性和长期成本方面的差异&#xff0c;并结合锻造、制造等行业的真实落地场景给出分场景选型建议&#xff0c;适合面临通…

作者头像 李华
网站建设 2026/8/25 14:09:41

AI Agent 的记忆中心,大厂终于有人开源了

做 AI Agent 的人都知道。 每次开新对话&#xff0c;得重新把项目背景讲一遍。 换个 Agent 框架&#xff0c;之前的经验全丢了。 团队里多个 Agent&#xff0c;没法共享记忆。 最近在 GitHub 上刷到一个项目&#xff0c;腾讯云开源的。 它叫 TencentDB-Agent-Memory。 简单…

作者头像 李华
网站建设 2026/8/25 14:08:47

面向具身智能的TVA-VLA如何应对“灾难性遗忘”

前沿技术探索&#xff1a;TVA智能体&#xff08;简称TVA&#xff09;TVA智能体&#xff08;亦称“AI智能体视觉”或“TVA视觉智能体”&#xff09;是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习&#xff08;DRL&#xff09;、卷积神…

作者头像 李华