去年这个时候,我还在每天写CRUD接口。不是说CRUD不好------毕竟9年了,写起来又快又稳------但我心里清楚,纯CRUD开发的天花板快到了。
转折点是有次面试,面试官问我:"你们有没有用AI做点什么?"我说没有。他没说什么,但那个沉默让我很难受。回来后我查了一下------好家伙,Spring AI已经1.0 GA了,MCP协议有5800多个Server了,AI Agent的生态在Java圈已经成型了。
我决定花半年时间转型。不是转行做AI,而是在Java开发的基础上,加上AI Agent开发能力。这篇文章是我6个月学习路线的真实记录,不是"完美规划"------中间走过弯路,也踩过坑。
为什么是6个月?
因为我试过"一个月速成",失败了。
今年1月的时候,我花了一个月时间刷各种AI教程,看了无数视频和文章。但到月底发现------学了一堆概念,真正上手写代码的时候脑子一片空白。问题出在:光看不练,没有把知识转化为肌肉记忆。
后来我改成了"边学边做"的模式------每周学一个主题,同时在一个实际项目里用上。6个月下来,我不敢说精通,但至少能独立搭一个生产级的AI Agent系统了。
第1-2月:补基础------AI到底在干嘛
这段时间不写代码,先搞懂几件事。
第一周:理解LLM的基本原理
不是让你去学神经网络------你是Java开发者,不是算法工程师。你需要理解的是:LLM是怎么工作的,为什么它会"幻觉",token是什么概念,上下文窗口是什么。
推荐资源:
- 3Blue1Brown的"Neural Networks"系列(YouTube,理解原理)
- Andrej Karpathy的"Let's build GPT"(理解Transformer,不用全看懂,建立直觉就行)
- OpenAI的API文档(理解token、temperature、top_p等参数)
学完的标准:能向别人解释清楚"为什么LLM会幻觉"和"temperature参数调高调低有什么区别"。
第二周:Prompt Engineering
别觉得这个low。Prompt工程是AI Agent开发的核心技能------你写的每一段system prompt,直接影响Agent的行为质量。
核心概念:
- Few-shot learning:给几个例子让模型学习模式
- Chain of Thought:让模型"想"一下再回答
- 结构化输出:让模型返回JSON而不是自然语言
arduino
// 差的prompt
"帮我分析这段代码有什么问题"
// 好的prompt
"你是一个Java代码审查专家。分析以下代码的安全性和性能问题。
按以下JSON格式输出:
{
"issues": [
{"severity": "high/medium/low", "category": "security/performance/best-practice", "description": "...", "suggestion": "..."}
],
"overallScore": 1-10
}
代码:[粘贴代码]"
学完的标准:能写出让模型稳定输出结构化数据的prompt。
第三到第四周:RAG基础
RAG(检索增强生成)是AI应用最核心的模式。理解它的完整链路:文档加载 → 切分 → 向量化 → 存储 → 检索 → 重排序 → 生成。
用Spring AI搭一个最简RAG:
- 准备10个PDF文档
- 用TokenTextSplitter切分
- 用EmbeddingModel向量化
- 存入Redis向量库
- 用VectorStore做相似度检索
- 把检索结果和问题一起发给ChatClient
学完的标准:能跑通一个从文档导入到问答的完整RAG流程。
第五到八周:上手Spring AI 1.0
这两个月的后半段,开始真正写代码。Spring AI 1.0 GA是Java开发者做AI应用最好的起点。
重点学这几个模块:
- ChatClient:核心对话接口,理解prompt、system、advisor的概念
- Function Calling:让AI调用你的Java方法,这是Agent的基础
- VectorStore:各种向量数据库的集成
- ChatMemory:对话记忆管理
- MCP Client:连接MCP Server使用外部工具
实践项目:做一个"代码助手"------能读取项目代码、回答关于代码的问题、生成代码注释、做简单的代码review。不需要完美,能跑就行。
java
// 你的第一个AI应用可能长这样
@Service
public class CodeAssistant {
private final ChatClient chatClient;
private final VectorStore vectorStore;
public String askAboutCode(String question) {
// 检索相关代码
var codeSnippets = vectorStore.similaritySearch(
SearchRequest.builder().query(question).topK(3).build()
);
String context = codeSnippets.stream()
.map(Document::getText)
.collect(Collectors.joining("\n\n"));
return chatClient.prompt()
.system("你是Java代码专家,基于提供的代码片段回答问题。")
.user("代码片段:\n" + context + "\n\n问题:" + question)
.call()
.content();
}
}
第3-4月:进阶------Agent设计模式
前两个月打了基础,第三个月开始进入真正的Agent开发。
什么是Agent?
Agent和普通AI应用的区别:Agent有自主决策能力。普通应用是"用户问→AI答"的一问一答。Agent是"用户给个目标→AI自己拆解步骤→调用工具→完成目标"。
举个具体的例子:
vbnet
普通AI应用:
用户:"订单DD20260720001的状态是什么?"
AI:调用queryOrder("DD20260720001") → 返回结果
Agent:
用户:"帮我处理今天所有异常订单"
AI自主执行:
Step 1: 调用getAbnormalOrders()获取异常订单列表
Step 2: 对每个订单,判断异常类型
Step 3: 如果是"库存不足",调用updateInventory()
Step 4: 如果是"支付超时",调用sendPaymentReminder()
Step 5: 如果是"地址错误",调用notifyCustomerService()
Step 6: 汇总处理结果,生成报告
Agent的核心是"推理-行动循环"(ReAct pattern):先想下一步做什么(Reasoning),然后执行(Action),看结果,再想下一步。
Spring AI里的Agent模式
Spring AI 1.0没有直接叫"Agent"的类,但它提供了构建Agent的所有积木:
java
@Service
public class OrderAgent {
private final ChatClient chatClient;
// 定义Agent可用的工具
@Bean
public Function<GetOrdersRequest, List<Order>> getAbnormalOrders(OrderService service) {
return req -> service.findAbnormalOrders(req.date());
}
@Bean
public Function<UpdateStockRequest, String> updateInventory(InventoryService service) {
return req -> service.updateStock(req.productId(), req.quantity());
}
@Bean
public Function<NotifyRequest, String> notifyCustomerService(NotificationService service) {
return req -> service.notify(req.orderId(), req.message());
}
public String handleAbnormalOrders(String date) {
return chatClient.prompt()
.system("""
你是订单处理Agent。你的任务是处理指定日期的异常订单。
可用工具:
- getAbnormalOrders: 获取异常订单列表
- updateInventory: 更新库存
- notifyCustomerService: 通知客服
处理完所有订单后,生成一份处理报告。
""")
.user("处理日期:" + date + "的异常订单")
.functions("getAbnormalOrders", "updateInventory", "notifyCustomerService")
.call()
.content();
}
}
学习Spring AI的Agent Patterns
Spring官方有一个系列叫"Spring AI Agentic Patterns",覆盖了:
- Agent Skills(工具封装)
- Sub-agent Orchestration(多Agent协作)
- A2A(Agent-to-Agent通信)
- Long-term Memory(长期记忆)
实践项目:把前两个月做的代码助手升级成Agent------不仅回答问题,还能自动修复简单的代码问题、创建GitHub Issue、生成修复PR。
第5-6月:实战------做一个生产级Agent
最后两个月,做一个能真正上线的Agent系统。这是最重要的阶段------之前学的所有东西都在这一个项目里综合应用。
我选的项目是"智能运维Agent"------接入告警系统,当收到告警时,Agent自动分析告警、查日志、定位问题、给出修复建议。
技术栈
arduino
框架:Spring Boot 4 + Spring AI 1.0
模型:DeepSeek(对话)+ bge-m3(embedding)
向量库:Redis
MCP Server:filesystem(读日志文件)、fetch(抓取监控页面)
工具:Kubernetes API(查Pod状态)、ELK API(查日志)、Grafana API(查指标)
记忆:Redis-backed ChatMemory
监控:Micrometer + Prometheus
Agent工作流
vbnet
告警触发 → Agent启动
↓
Step 1: 分析告警类型和严重程度
↓
Step 2: 查询相关Pod状态(K8s API工具)
↓
Step 3: 查询最近5分钟的日志(ELK API工具)
↓
Step 4: 查询CPU/内存指标(Grafana API工具)
↓
Step 5: 综合分析,判断根因
↓
Step 6: 生成修复建议(如果是已知问题,直接给出解决方案)
↓
Step 7: 发送到企业微信群
关键代码结构
java
@Service
public class OpsAgent {
private final ChatClient chatClient;
private final AlertService alertService;
private final NotificationService notificationService;
@EventListener
public void onAlert(AlertEvent event) {
// Agent自主执行运维分析
String analysis = chatClient.prompt()
.system("""
你是运维Agent。收到告警后,按以下步骤处理:
1. 用getPodStatus查Pod状态
2. 用queryLogs查最近5分钟日志
3. 用getMetrics查CPU和内存指标
4. 分析告警根因
5. 给出修复建议
输出格式:
## 告警分析
[告警描述]
## 根因判断
[分析过程和结论]
## 修复建议
[具体操作步骤]
""")
.user("告警信息:" + event.toJson())
.functions("getPodStatus", "queryLogs", "getMetrics")
.call()
.content();
// 发送分析结果
notificationService.sendToWeCom(analysis);
}
}
产出效果
这个Agent上线后,运维团队反馈:
- 平均告警响应时间从15分钟降到30秒
- 简单告警(内存满、CPU高、磁盘满)的诊断准确率约85%
- 运维人员不需要每次都手动查日志和指标了,Agent直接给出分析结果
我的6个月学习时间表
| 时间 | 主题 | 投入 | 产出 |
|---|---|---|---|
| 第1周 | LLM原理 | 10小时 | 理解token、temperature、幻觉 |
| 第2周 | Prompt工程 | 10小时 | 能写结构化输出prompt |
| 第3-4周 | RAG基础 | 20小时 | 跑通最简RAG流程 |
| 第5-6周 | Spring AI基础 | 20小时 | ChatClient+Function Calling |
| 第7-8周 | 实践项目1 | 20小时 | 代码助手(RAG版) |
| 第9-10周 | Agent设计模式 | 20小时 | 理解ReAct、多Agent |
| 第11-12周 | 实践项目2 | 20小时 | 代码助手(Agent版) |
| 第13-16周 | MCP + 进阶 | 40小时 | 接入MCP Server |
| 第17-20周 | 实践项目3 | 40小时 | 智能运维Agent |
| 第21-24周 | 上线+调优 | 30小时 | 生产级Agent |
总计约230小时,平均每周10小时。晚上2小时 + 周末半天。
学完之后的变化
最大的变化不是技术层面的,而是思维方式的:
以前写代码:用户要什么 → 我写什么接口 → 返回结果。
现在做Agent:用户给一个目标 → Agent自己决定调用哪些工具 → 自主完成。
这个转变看起来不大,但对开发方式的影响是根本性的。你不再是在写"接口",而是在设计"能力"------给Agent什么工具、什么约束、什么记忆,让它能自主完成任务。
还有个很现实的变化------面试的时候,被问到"有没有AI相关经验"的时候,不再沉默了。
避坑指南
-
别一上来就学LangChain的Python版。你是Java开发者,直接学Spring AI。等你用Spring AI做出东西了,再横向对比其他框架不迟。我第一周浪费了好几天看Python教程,后来发现用不上。
-
别只看不动手。看100篇文章不如自己跑一个demo。每个概念学完,立刻在项目里用一遍。
-
别追求"完美"的Agent。第一版一定很粗糙,先跑通再说。迭代优化是常态,不是一次到位。
-
AI Agent不是万能的。有些场景传统代码更合适。判断标准:任务有明确的步骤和规则 → 传统代码;任务需要"理解"和"判断" → 考虑Agent。
-
成本意识。Agent每次调用LLM都要花钱。一个复杂的Agent可能一次任务调用5-10次LLM,token消耗不小。上线前一定要算好成本。
6个月说长不长说短不短。如果你也在考虑从CRUD转型AI Agent方向,希望这个路线图能给你一个参考。不用完全照搬,找到适合自己的节奏就行。
核心就一句话:别想太多,先做起来。