别再给Agent写if-else了!Anthropic Skills + Spring AI才是Java开发者的正确姿势
搞了半年AI Agent,我最大的感触是:大部分人把Agent做复杂了。恨不得把所有逻辑都塞进一个类里,if-else套if-else,跟2015年写Servlet有啥区别?
直到上个月Anthropic发布了Agent Skills规范,Spring AI紧跟着推出Agentic Patterns系列,我才反应过来------Agent的能力不该靠代码逻辑驱动,应该靠文件驱动。
先说问题:你的Agent为什么越做越乱
很多人做Agent的路径是这样的:
- 写个ChatService,调大模型API
- 觉得不够用,加Function Calling
- 函数越来越多,开始写if-else判断该调哪个
- 加MCP协议,连接外部工具
- 发现MCP连接的工具也需要编排,继续加代码
- 最后代码变成屎山,改一个功能牵一发动全身
说白了,你在用OOP的思维做Agent,但Agent需要的是声明式的能力描述。
Anthropic Skills:文件夹就是技能
Anthropic对Skills的定义极其简洁:一个Skill就是一个文件夹,核心只有一个SKILL.md文件。
code-review/
SKILL.md # 必需:元数据 + 操作指南
references/ # 可选:参考资料
scripts/ # 可选:执行脚本
examples/ # 可选:示例
看起来简单对吧?但这里有个范式转移------代码不再是Agent的全部,Markdown才是。
SKILL.md里面写什么?写的是AI执行这个技能的完整指南。比如一个代码审查Skill,SKILL.md里会写:
- 这个Skill做什么(审查Java代码)
- 审查哪些维度(安全、性能、可维护性)
- 输出格式是什么(Markdown报告)
- 参考规范(放在references/目录)
Agent运行时,读取SKILL.md,理解任务要求,调用scripts/下的脚本执行操作,然后按格式输出结果。整个过程,Agent不需要你硬编码任何逻辑。
Spring AI怎么接上这趟车
Spring AI在2026年初推出了Agentic Patterns,直接把Anthropic的Skills规范融入了Spring生态。这对Java开发者来说太重要了。
核心思路是:用Spring的方式管理Skill生命周期。
java
@Service
public class CodeReviewSkill implements AgentSkill {
@Override
public String getName() { return "code-review"; }
@Override
public String getDescription() { return "审查Java代码的安全性和性能"; }
@Override
public SkillResult execute(SkillContext context) {
// Agent自动读取SKILL.md并执行
// 你只需要提供执行环境和数据
return skillExecutor.run(this, context);
}
}
不过说实话,我觉得最香的不是代码层面,而是Skill的即插即用。你的同事写了个自动生成周报的Skill?扔个文件夹过来就能用。线上需要加个Bug分析Skill?加个目录、写个SKILL.md,重启都不用。
Skills和MCP、A2A的关系
这块很多人搞混,我理一下:
- MCP:Agent连工具的管道。比如Agent要查数据库、调API,走MCP协议
- A2A:Agent之间对话的协议。Google推的,让不同Agent能互相发现、协作
- Skills:Agent能力的描述和执行方式。一个Skill可以调用MCP连接的工具,也可以通过A2A委派任务给其他Agent
划重点:MCP是手,A2A是嘴,Skills是脑子。
一个完整的Agent架构应该是这样的:Skill告诉Agent该干什么,MCP提供干活的工具,A2A让Agent能在搞不定时找帮手。
踩坑:三个我走过的弯路
坑1:把Skill当微服务写
一开始我给每个Skill写了完整的Controller、Service、Repository,部署到独立端口。结果Skill之间通信比微服务还复杂。后来发现,Skill就是一个文件夹,Agent运行时直接读文件就行,别搞那么重。
坑2:SKILL.md写得太抽象
"请审查代码质量"------这种描述Agent根本不知道该做什么。要具体:"检查SQL注入风险、空指针异常、线程安全问题,输出Markdown格式的审查报告"。越具体,Agent执行越靠谱。
坑3:忽略Skill的版本管理
Skill改了逻辑但没记录版本,线上Agent行为突然变了还找不到原因。建议SKILL.md里加版本号,用Git管理Skill文件夹。
写在最后
2026年做AI Agent,别再从零搭框架了。Anthropic的Skills规范 + Spring AI的Agentic Patterns,已经给出了一条清晰的路径:
声明式定义能力,文件驱动执行,Spring管理生命周期。
如果你还在给Agent写if-else,建议花一个下午看看Spring AI的Skill实现。就算不用Spring AI,Anthropic的Skills设计思路也值得借鉴。
有问题评论区聊~
相关链接: