⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/embabel-agent-framework-view/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

「Java 已死」这句话,后端都听出茧了。每隔几年有人出来念一遍,念完 Java 还活着,念的人先换了一茬。AI 时代论调换了马甲,写 Agent 是 Python 的事,Java 程序员要么转语言,要么靠边站。

这回轮到 Rod Johnson 出手,就是当年写出 Spring 的那个人。他带着叫 Embabel 的框架回到一线,7 月底刚宣布 1.0 正式版,8 月中已经迭代到 1.5。要做的事就一件,让 Java 程序员在自己最熟的地盘上写 Agent。

Rod Johnson 宣布 Embabel 1.0 GA 的推文

二十多年前,几乎同一件事,他又干了一遍

零几年那会儿,企业级 Java 的官方答案是 EJB。写个业务组件要继承一堆接口、配一堆 XML,部署一次等半天,难用是实打实的难用。2002 年 Rod Johnson 出了本书,书里附了约三万行基础设施代码,意思很直白,官方那套不行,看我的。

这套代码后来长成了 Spring Framework,普通 Java 对象就能干活,不用继承特定接口,配置简单,测试好写。Spring 赢了,EJB 进了垃圾堆,Boot、Cloud 一路铺开,全家桶把企业 Java 续到今天。

甚至有人断言,要是没有 Spring 全家桶,这门语言大概率撑不到 AI 时代。所以标题里「续命人」三个字,喊起来不算夸张。

这次让他不爽的是,方向盘塞给了大模型

把主流 Agent 框架翻一圈,LangChain、LangGraph、CrewAI,清一色 Python。不少公司做 AI,第一反应就是招 Python 的人,或者让写 Java 的人去学。可 Java 的家底是圈里公认最厚的。

更普遍的顾虑是,Python 框架 demo 跑得漂亮,敢不敢上生产是另一回事。大部分框架让大模型自己决定下一步,模型今天这么走、明天那么走,出了问题没法复盘,审计问「这一步为什么执行」,没人答得上来。Rod Johnson 盯上的,就是这条缝。

他在播客里聊这事火气不小。很多人爱拿 Java 当靶子,假装这门语言二十年没动过。他说得也公允,Python 框架不差,但 JVM 有它们给不了的东西,几十年类型安全的业务代码、成熟的 IDE 和重构工具,还有一大群写 Java 顺手、写 Python 别扭的工程师。把现成系统用 Python 重写一遍来接 AI,他给过一个词,utterly baffling,翻译过来是「令人费解」。

AI Native Dev Podcast 第 104 期访谈横幅

从游戏 NPC 借来的确定性,规划这段不烧一分钱 token

Embabel 最核心的设计,是从游戏行业借来的 GOAP,目标导向行动规划,早年给游戏 NPC 规划行为用的。Java 框架跑去游戏里找答案,本身就挺有意思。

用起来你只定义两样东西。Action 是 Agent 能干的动作;Goal 是最终要达成什么。动作按什么顺序串,不用写死,也不是大模型现场拍板,是框架里的规划器算出来的;每执行完一步,按最新状态重算一遍再定下一步。

规划过程完全不调大模型,就是一段确定性代码在跑。同样的输入,算出的路径永远一样;哪一步为什么执行,日志写得明明白白。真出了事,你能精确回答为什么选这个动作。附带一个白话好处,规划不经模型,这部分不烧 token。

还有强类型这点,最对 Java 程序员胃口。Action 之间传的是真正的领域对象,Java Record 或 Kotlin data class,输入输出类型编译期就卡住。改个字段名,IDE 能把受影响的 Action 全找出来;对比写 Python Agent 时重构基本靠全局搜索。

GOAP 规划循环

半天跑通第一个 Agent,最短路径排给你

Rod 打过比方,Spring AI 相当于 Servlet API,管接模型的底层;Embabel 相当于 Spring MVC,在上面组织业务。写出来的东西,Spring 老兵一眼就懂。

@Agent(description = "写一个主题的技术博客并审校")
public class BlogWriterAgent {

@Action(description = "根据主题调研并写出初稿")
public BlogDraft writeDraft(Topic topic) {
// 调模型写稿
}

@Action(description = "审校初稿并给出修改意见")
public Review reviewDraft(BlogDraft draft) {
// 调模型审校
}
}

@Agent 就是个 Spring 注解。类照常走组件扫描、依赖注入、打包部署。先写稿还是先审校、要不要都跑,规划器按当前状态定;框架建在 Spring AI 上,原有模型接入、向量库配置不用动。

起步有三条路。start.spring.io 勾 Boot 3.5 和 Java 21 加依赖、GitHub 模板仓库开新项目、或 project-creator 命令生成。Maven Central 坐标在这儿。

<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter</artifactId>
<version>1.5.0</version>
</dependency>

Boot 版本线别配错。start.spring.io 那条是 1.0 线,对应 Boot 3.5;1.5.0 坐标对应 Boot 4 / Spring AI 2。前提是 Java 21;默认走 OpenAI,设好 OPENAI_API_KEY 就能跑;还有按供应商拆分的 starter,换模型约等于换依赖。

敢叫「生产级」,底气是牌都摆在明面上

版本节奏先看一眼。7 月底发 1.0 正式版,8 月中已经迭代到 1.5,Apache 2.0 开源。五月中到八月中,版本代号从 Curdimurka、Darwin 一路换过来,全是澳洲动物,翻发布页跟逛动物园似的。

模型接得也宽,OpenAI、Anthropic、Google 主流都有,DeepSeek、智谱 GLM、MiniMax 都在支持列表里,Ollama 本地部署直接认。国内团队从模型可得性上说,没什么门槛。

工程上的零碎补得也齐,五张底牌挨个看。

  • RAG 接口转正,不用怕半路变 API;
  • MCP 双向,能调别人的 MCP 工具,也能把自己的 Agent 发布成 MCP server;
  • 健康状态挂 Spring Boot Actuator 统一看;
  • 支持 A2A 协议,Agent 之间能互相通信;
  • ONNX 本地跑 embedding,隔离网环境也能用。

官方文档里还有个数字,大约七成生产应用跑在 JVM 上。不过这数字是官方文档的说法,暂时没有独立统计背书。Rod 的判断是,几十年业务逻辑都在 Java 里,正确姿势是把 AI 接进现有系统,而不是换 Python 重写一遍。

三个坑先说透,有一个这个月刚填上

坑一,核心代码是 Kotlin 写的。官方保证了 Java 调用完全无感,但读源码、提 PR 总得适应点 Kotlin 味儿。Rod 在播客里还有个暴论,agent 写了他约 95% 的代码,但设计决策错的比对的多,原话就是「你不能 vibe-code 严肃软件」。

坑二,底层框架版本。1.0 那条线停在 Spring Boot 3.5,Boot 4 当时确实没支持;但这个坑这个月刚填上,1.5.0 已支持 Spring Boot 4 和 Spring AI 2;不想升级的留在 1.0 线,两条线并存,迁移指南在项目 wiki 上。

坑三,生态年轻。GitHub 上 Star 约 4 千,跟 LangChain 那种十万级的没法比,社区案例也少,文档还被早期用户吐槽过。

Embabel GitHub 仓库页

也有好消息,已经有人把它跑进真实业务。掘金上有开发者用 Embabel 做微服务日志诊断,7 个 Action 配 9 个 Condition 组成行动网络,日志质量评估不过关时,规划器自动换条路重抓,不用为每个分支手写恢复逻辑。当年让游戏 NPC 发现桥断了就绕路的算法,现在让运维 Agent 学会了同一招。

国内接入再说句实话。年初社区批评它缺官方接入指引,得自己写 Spring AI 的 ChatModel 桥接;到 1.0 正式版,GLM、DeepSeek 已经进了官方支持列表,缺口在收窄。但用没进列表的服务,还是得按 Spring AI 的路子自己接。

对号入座,谁现在就该动手,谁再等等

先把压箱底的话放这儿。生产环境从不奖励最聪明的模型,只奖励每一步都答得出「为什么」的系统。Embabel 赌的是这件事,Java 工程师二十年攒下的类型、测试、审计,也全是这件事。

分工其实一句话,大模型负责不确定的部分,写文案、做总结、搞分类都归它;规划和流程交给确定性代码。当年 Spring 把 Java 从 EJB 的泥潭里捞出来,这回他想捞的,是被 Python 圈在外面的 Java 工程师。

按人群给建议。

  • 已经在 Spring 上跑了很多年、想往业务里塞 Agent 的团队,这是你的主场,直接上手;
  • 不在 Spring 体系里、只想要个简单的模型调用封装,LangChain4j 更顺手;
  • 个人开发者想尝鲜,Ollama 本地模型加模板仓库,顺利的话一个下午能跑通第一个。

最后是 Rod 那句值得抄下来的话。Embabel 可能是最后一波由人类亲自选择的框架,因为以后挑框架、搭技术栈,会越来越多由 AI 工具替人做决定。这么一想,现在这张选票怎么投,本身就挺稀缺的。

开源地址是 https://github.com/embabel/embabel-agent。反正 Star 先点上,值不值得跟,看后续。

文章目录
  1. 1. 二十多年前,几乎同一件事,他又干了一遍
  2. 2. 这次让他不爽的是,方向盘塞给了大模型
  3. 3. 从游戏 NPC 借来的确定性,规划这段不烧一分钱 token
  4. 4. 半天跑通第一个 Agent,最短路径排给你
  5. 5. 敢叫「生产级」,底气是牌都摆在明面上
  6. 6. 三个坑先说透,有一个这个月刚填上
  7. 7. 对号入座,谁现在就该动手,谁再等等