4153 字
约 13 分钟
14
Spring之父再次出山,开发了新的AI框架!
无标签

Spring之父再次出山,开发了新的AI框架! 作者: 苏三 2026-08-02 AI Spring 前言 最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的 这个链接 (或许真的能够帮到你)。 最近这阵子,技术圈里有一个名字频繁出现在各种讨论中—— Rod Johnson 。 如果你不知道他是谁,那你一定知道他做的东西—— Spring Framework 。 没错,就是那个几乎重新定义了企业级Java应用该怎么写的Spring。 二十多年前,Rod Johnson用一本书(《Expert One-on-One J2EE Design and Development》)和一个框架(Spring),终结了EJB那个让人欲哭无泪的时代。 二十多年后的今天,他又回来了。 2026年4月,Rod Johnson在Microsoft JDConf开发者大会上正式发布了 Embabel ——一个面向企业AI Agent的JVM开源框架。 2026年7月20日,Embabel正式发布了 1.0.0 GA版本 。项目采用 Apache 2.0协议 开源,目前已在GitHub上公开。 今天这篇文章,我就把Embabel从设计理念到底层原理、从代码实战到性能数据,从头到尾给你深度拆解一遍。 希望对你会有所帮助。 一、为什么是现在? 在聊框架本身之前,我们先理解一个关键问题—— Rod Johnson为什么要在这个时间点做这件事? SpringSource被VMware收购后,Rod Johnson做了很多年董事会和投资的事情。直到2022年底ChatGPT的出现,让他重新坐不住了。 他意识到行业正处在一个巨大的转折点上。 但他看到的不是“AI多厉害”,而是**“AI的承诺和现实之间有一条巨大的鸿沟”**。 “你实际上是在用一个‘九成时间有效、一成时间无效’的东西去构建系统,从效果上看,它就等于‘完全没用’。” 这句话点出了企业AI落地的核心困境: 个人助理场景下,90%的正确率已经足够好 但企业业务系统容不得那10%的错误 生成式AI是一种 随机的、非确定性的 系统——同样的提示,每次生成的结果可能都不一样。 这对个人聊天来说无所谓,但对金融交易、订单处理、合规审计来说, 不可预测就意味着不可用 。 这就是Embabel要解决的问题。 二、Embabel到底是什么? 有些小伙伴可能会问:“Spring AI不是已经有了吗?Embabel跟它是什么关系?” 这是个非常关键的问题。 Embabel和Spring AI是不同层面的东西 。 打个比方: Spring AI相当于Servlet API,Embabel相当于Spring MVC 。 Spring AI解决的是“怎么接入AI模型”——提供统一的ChatModel接口、向量存储抽象、工具调用机制。 它让你能调用大模型,但怎么组织Agent的逻辑、怎么规划多步任务、怎么保证流程可控——这些需要你自己写代码来实现。 Embabel解决的是“怎么让AI Agent在企业系统里稳定工作”——提供一套完整的Agent编程模型,包括 行动(Action)、目标(Goal)、条件(Condition) 等核心抽象。 简单说:Spring AI是“零件箱”,Embabel是“装配图纸+流水线”。 Rod Johnson自己的定位更直接:“你可以在Java中构建比Python更好的Agent,JVM对于真实世界的生成式AI应用是更优选择。” Embabel整体架构图:

Embabel的核心理念可以用一句话概括: 通过确定性规划,让非确定性的AI在确定性的企业系统里稳定工作 。 三、从游戏AI借来的“秘密武器” GOAP算法是Embabel最引人注目的设计,也是它和所有其他AI框架 最本质的区别 。 3.1 什么是GOAP? GOAP全称 Goal-Oriented Action Planning(面向目标的行动规划) ,原本用于游戏中的NPC(非玩家角色)AI——比如《最后生还者》里的敌人、《星际争霸》里的单位,它们���要根据当前状态自主决定下一步行动。 在GOAP中,Agent的工作流程是这样的: 明确当前状态和目标 根据所有可用的行动(Action)及其前置条件和效果 动态规划 出从当前状态到目标的最优行动序列 每执行一步,根据新的状态重新规划 这就好比你在用导航软件——不是出发前规划好全程就再也不变了,而是 每到一个路口,根据实时路况重新计算接下来的路线 。 3.2 为什么GOAP对企业AI如此重要? Rod Johnson认为,现有AI Agent方案走向了两个极端: 要么让LLM完全自主决策 ——结果不可预测,无法审计 要么人工预先穷举所有可能情形 ——工作量巨大,无法扩展 GOAP在两者之间找到了平衡—— 规划逻辑是确定性的(可解释、可审计),但规划结果是动态的(适应性强) 。 更重要的是:GOAP规划器完全不用LLM 。 这意味着什么? 每次规划不消耗Token。 在一次包含多个Action的工作流中,这一刀砍下去,直接省掉 40%-60%的LLM调用 。


GOAP规划流程详解:

理解GOAP和LLM规划的本质区别 :LLM规划是把“怎么走”这件事交给一个会犯错、会幻觉、会偏离目标的随机系统。 GOAP规划是把“怎么走”这件事交给 确定性的算法 ——它根据Action的前置条件、效果、成本和价值,计算出最优路径。 GOAP不会“想歪”,不会“跑偏”,不会“编造不存在的Action”。它的每一步决策都是可追溯、可解释、可审计的。 四、强类型、面向对象的Agent编程 如果你写过Spring,Embabel会让你感觉很亲切。 4.1 核心抽象:Agent、Action、Goal Embabel的核心抽象非常清晰: Agent :一个自包含的组件,封装了领域逻辑、AI能力和工具使用,代表用户完成特定目标 Action :Agent可以执行的离散步骤,用 @Action 注解标记,输入输出都是强类型领域对象 Goal :Agent要达成的目标,用 @Goal 注解标记

// 定义一个Action——纯粹的Java代码,没有字符串拼接
@Action(description = "从知识库中检索相关文档")
class RetrieveDocumentsAction {
 @ActionMethod
 fun execute(
 @Parameter(description = "用户问题") query: String
 ): List<Document> {
 return vectorStore.similaritySearch(query, topK = 5)
 }
}

4.2 类型安全:告别字符串地狱 Python的LangChain/LangGraph生态有一个核心问题—— 大量使用字符串、dict、动态Graph和手写节点边 。这些在Python里“还行”,搬到Java里就变成了 维护噩梦 。 Embabel的设计原则是 强类型和面向对象 。所有的LLM交互都是强类型的,提供了编译时检查、重构支持和IDE辅助。 不再靠字符串拼接Prompt,不再靠JSON解析—— 一切都用Java/Kotlin的类型系统来保证 。

// Embabel中,Action的输入输出都是强类型领域对象
@Action(description = "查询订单状态")
public OrderStatus getOrderStatus(
 @Parameter(description = "订单ID") String orderId
) {
 // 纯Java代码,没有字符串拼接
 return orderService.findStatus(orderId);
}

4.3 两种规划模式 Embabel支持两种规划模式: 最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的 这个链接 (或许真的能够帮到你)。 ① GOAP(默认) :基于成本和价值计算最优Action序列, 不用LLM做规划 ② Utility AI :每个Action由可配置的效用函数打分,每步执行得分最高的Action。在Stashbot(RAG文档助手)中,Utility AI模式让LLM自主决定何时以及如何搜索文档。 4.4 为什么用Kotlin写? Embabel的核心代码是用 Kotlin 写的。 Rod Johnson解释说: 他个人更喜欢Kotlin的编码体验 空安全、更简洁的语法、reified泛型减少类型擦除影响 但关键点来了 ——实现框架的语言选择,不意味着在上面构建应用的语言选择。Embabel与Java有出色的互操作性,用Java构建应用时,你永远不会看到Kt导入。 无论你用Kotlin还是Java,Embabel的类型安全性和丰富领域模型的核心价值都很突出 。 五、代码实战 光说理论不够,我们来看看Embabel的实际代码。 以下是基于Embabel官方示例的简化版本。 5.1 定义领域模型

// 订单领域模型
public class Order {
 private String orderId;
 private OrderStatus status;
 private BigDecimal amount;
 // getters/setters...
}

// 订单状态枚举
public enum OrderStatus {
 PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED
}

5.2 定义Action

import com.embabel.agent.api.annotation.Action;
import com.embabel.agent.api.annotation.ActionMethod;
import com.embabel.agent.api.annotation.Parameter;

@Action(description = "查询订单状态")
public class GetOrderStatusAction {
 
 private final OrderService orderService;
 
 public GetOrderStatusAction(OrderService orderService) {
 this.orderService = orderService;
 }
 
 @ActionMethod
 public OrderStatus execute(
 @Parameter(description = "订单ID") String orderId
 ) {
 return orderService.findStatus(orderId);
 }
}

@Action(description = "取消订单")
public class CancelOrderAction {
 
 private final OrderService orderService;
 
 @ActionMethod
 public Order execute(
 @Parameter(description = "订单ID") String orderId,
 @Parameter(description = "取消原因") String reason
 ) {
 return orderService.cancel(orderId, reason);
 }
}

5.3 定义Agent

import com.embabel.agent.api.Agent
import com.embabel.agent.api.Goal

@Agent(
 name = "订单管理助手",
 description = "帮助用户查询和管理订单"
)
class OrderManagementAgent(
 private val getStatusAction: GetOrderStatusAction,
 private val cancelAction: CancelOrderAction
) {
 @Goal
 fun handleOrderRequest(
 @Parameter(description = "用户指令") instruction: String
 ): String {
 // GOAP引擎会自动规划:分析指令 → 选择Action → 执行 → 返回结果
 // 不需要手动写 if-else 或流程控制
 return agent.planAndExecute(instruction)
 }
}

5.4 启动应用

@SpringBootApplication
class Application

fun main(args: Array<String>) {
 runApplication<Application>(*args)
}

这段代码的精髓 :你没有写任何流程控制代码(if-else、switch、for循环),没有指定“先执行A再执行B”。你只是定义了 有哪些Action可用 和 最终目标是什么 ,GOAP引擎自动规划出最优行动序列。 每个Action可以是一段纯代码逻辑(零LLM调用),也可以由一小段Prompt驱动。这种设计让开发者可以 精确控制哪些环节用AI、哪些环节用确定性代码 。 六、Embabel vs Spring AI:本质区别 我把Embabel和Spring AI放在一起做了个深度对比: 对比维度 Embabel Spring AI 核心定位 企业Agent编程模型 AI模型集成框架 规划方式 GOAP算法(确定性、不用LLM) 开发者手动编排ReAct循环 规划Token消耗 0 Token (规划不用LLM) 每次规划都调用LLM 类型安全 ✅ 强类型领域对象 ✅ 强类型 可审计性 ✅ 规划过程可解释、可追溯 ⚠️ 取决于实现 开发者体验 声明式(定义Action和Goal,GOAP自动规划) 命令式(自己写循环) LLM调用量 仅Action内部按需调用 每次决策都调用 开源协议 Apache 2.0 Apache 2.0 Embabel和Spring AI的本质区别在于:谁来做决策? Spring AI :开发者手动编排ReAct循环——写一个prompt、调用tool、再写一个prompt、再调用tool。决策逻辑在开发者的代码里, 每一步怎么走是写死的 。 Embabel :开发者定义Action和Goal,GOAP引擎 在运行时动态计算 最优路径。决策逻辑在算法里, 每一步怎么走是动态计算的 。 这导致了一个根本性的差异 : 在Spring AI里,如果你需要Agent做三件事(查库存、计算价格、生成报告),你必须 在代码里明确写出执行顺序 。如果某个环节失败,你需要自己写重试逻辑。 在Embabel里,你只需要定义三个Action和最终目标,GOAP引擎 根据当前状态动态决定 先做哪个、后做哪个、失败了怎么办。 Rod Johnson自己的话说得很直白:“你可以在Java中构建比Python更好的Agent”。 七、性能与成本数据 Embabel在成本和性能上的优势 有明确的数据支撑 : 优化点 效果 GOAP规划器(不用LLM) 直接砍掉40-60%的LLM调用 强类型Domain Model精确契约 节省20-40%的Token消耗 整体成本优化 50-70%的总体降本空间 为什么强类型Domain Model能省Token? 传统AI Agent用自然语言或dict传递上下文,每次传给LLM的上下文会 恶性循环式膨胀 。 Embabel用精确的输入输出契约取代自然语言上下文,杜绝了Token的无效消耗。 2026年7月20日,Embabel正式发布 1.0.0 GA版本 。 一个框架进入GA,意味着它已经经过了足够的生产验证,API稳定性有了保障。 八、优缺点 优点 1. GOAP确定性规划,可解释、可审计 GOAP规划器完全不用LLM,决策过程可追溯、可解释。对企业来说,这意味着 合规和审计不再是问题 。 2. 成本优势显著 GOAP规划不用LLM,直接砍掉 40-60%的LLM调用 ;强类型Domain Model精确契约节省 20-40%的Token消耗 。总体成本优化空间 50-70% 。 3. 类型安全,编译时检查 所有LLM交互都是强类型的,IDE能提供完整的代码补全和重构支持。 4. 与Spring生态无缝集成 基于Spring Boot构建,Java/Kotlin开发者零学习成本接入。 5. 避免LLM“过度设计” GOAP规划最大限度地减少了不必要的LLM调用,提升了效率和成本控制。 6. 可扩展性强 可以在不修改现有代码的情况下添加新的Action、目标、条件和领域对象。 缺点 1. 项目相对年轻 Embabel 1.0 GA于2026年7月才发布,生态和社区还在早期阶段。 2. 核心用Kotlin编写 虽然Java完全兼容,但阅读框架源码需要理解Kotlin语法。 3. 学习曲线 GOAP、Utility AI等概念对大多数Java开发者来说是全新的。 4. 文档尚在完善中 作为新项目,文档和示例正在逐步完善。 5. 与Python生态的差距 虽然Rod Johnson的目标是“不仅追上Python生态,还要超越”,但目前Python AI生态的成熟度仍然领先。 九、适用场景 场景 推荐程度 理由 企业级AI Agent ✅✅✅ 强烈推荐 可解释、可审计、成本可控 已有Spring Boot技术栈 ✅✅✅ 强烈推荐 零学习成本接入 金融/合规/审计场景 ✅✅✅ 强烈推荐 GOAP确定性规划,每条决策都可追溯 多步复杂任务自动化 ✅✅✅ 强烈推荐 GOAP自动规划最优路径 传统企业系统AI赋能 ✅✅✅ 强烈推荐 不需要重写技术栈 RAG知识库问答 ✅✅ 推荐 Stashbot等官方示例 高成本敏感场景 ✅✅✅ 强烈推荐 直接砍掉40-60%的LLM调用 快速原型验证 ⚠️ 可能偏重 Spring AI可能更轻量 十、写在最后 回到最初的问题: Spring之父再次出山,开发的AI框架到底是什么? Embabel不是又一个“调用大模型的库” 。 它是一个 企业级Agent编程模型 ,试图回答一个核心问题: 怎么让非确定性的AI,在确定性的企业系统里稳定工作? 它的答案是: 用GOAP算法提供 确定性的规划 ——规划不用LLM,直接砍掉40-60%的调用 用强类型系统提供 编译时安全 ——精确契约节省20-40%的Token消耗 用Spring生态提供 企业级集成 ——基于Spring Boot,零学习成本 用Apache 2.0协议提供 商业友好 ——自由使用、修改、商用 用1.0 GA提供 生产级稳定性 ——2026年7月20日正式GA 二十多年前,他写了一本书、做了一个框架,终结了EJB时代。 二十多年后,他带着Embabel回来了。 这一次,他想终结的,是“AI只能做Demo、上不了生产”的困局。 而且这一次,他手里多了一把Python生态没有的武器—— GOAP确定性规划 。 当Python生态还在用“大量字符串、动态Graph、手写节点边”的方式堆叠Agent时,Embabel已经在用 类型安全、成本可控、可审计可追溯 的方式,把AI Agent真正带进了企业核心业务。 开源地址: GitHub :https://github.com/embabel/embabel-agent 官方示例 :https://github.com/embabel/embabel-agent-examples 官方文档 :https://docs.embabel.com 最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的 这个链接 (或许真的能够帮到你)。

Spring之父再次出山,开发了新的AI框架!
https://clxhxhhr.top/posts/3444/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。