乐于分享
好东西不私藏

Jakarta Agentic AI首个里程碑

Jakarta Agentic AI首个里程碑

Jakarta Agentic AI 首个里程碑

昨天 Jakarta Agentic AI 项目放出了第一个正式交付物:jakarta.agentic-ai-api:1.0.0-M1 已经挂到 Maven Central,配套的 1.0 规范草案也开放公开评审了。从去年 11 月通过 creation review 到现在,这个由 Eclipse Foundation 主导的规范项目终于有了看得见摸得着的 API 表面。

标准化的缺口

过去两年写 agent 的 Java 开发者基本只有两条路:要么钻进某个厂商框架的私有 API,要么自己手搓一个编排层。框架换来换去,agent 的核心逻辑,触发、决策、调用工具、处理异常,全都要重写一遍。

Jakarta Agentic AI 的目标就是把这层东西标准化。它想对 agentic AI 做的事,跟 Jakarta Servlet 对 HTTP 处理、Jakarta Batch 对批处理做的事一样:给出一套厂商无关、可以在不同 Jakarta EE 运行时之间移植的编程模型。规范里明确说它是 standalone 规范,不进 platform,也不属于任何 profile,定位就是"你想用就用"。

M1 的交付物

这个里程碑的主题是 annotations-and-lifecycle,核心是一组注解和一个轻量级的 LLM 门面。

<dependency>
<groupId>jakarta.agentic-ai</groupId>
<artifactId>jakarta.agentic-ai-api</artifactId>
<version>1.0.0-M1</version>
</dependency>

规范草案定义的注解包括:

  • @Agent — 标记一个 CDI bean 为 agent,容器负责管理其生命周期
  • @Trigger — 声明 agent 的入口,相当于工作流的起点
  • @Decision — 决定下一步走哪个分支
  • @Action — 标记一个方法为 agent 可调用的工具
  • @Outcome — 定义工作流的终止状态
  • @HandleException — 声明式的异常恢复路径
  • @WorkflowScoped / @ApplicationScoped — agent 工作流作用域,一个 workflow 实例里的状态在多次调用间保持

还有 LargeLanguageModel 这个接口,做 LLM 调用的统一门面,unwrap() 可以拿到底层实现的原生 API,跟 JPA 里 unwrap 的思路一脉相承,需要逃逸到厂商特性时给你留个口子。

规范文档的示例章节用同一套注解演示了几类典型场景:欺诈检测、从 PR 自动生成文档、客服 agent、带参数校验的错误恢复工作流。注意这些示例目前都在草案 PDF 里,接口细节在正式版落地前可能还会调整。

一个 agent 的骨架

基于草案公开的注解模型,一个客服 agent 的骨架大致是这样(接口以 M1 实际 API 为准,示意代码):

@Agent
@WorkflowScoped
publicclass SupportAgent{

@LargeLanguageModel
LargeLanguageModelllm;

@Trigger
publicOutcomehandle(Stringquestion){
Stringplan=llm.generate("判断问题类型: "+question);
returnroute(plan);
}

@Decision
publicDecisionroute(Stringplan){
returnplan.contains("退款")?Decision.to("refund"):Decision.to("faq");
}

@Action
publicOutcomerefund(Orderorder){
order.refund();
returnOutcome.success("退款已发起");
}

@HandleException
publicOutcomeonError(Exceptione,Stringquestion){
returnOutcome.retry("转人工处理");
}
}

对比现在的主流做法,Spring AI 的 @Tool 注解、LangChain4j 的 @AgentToolSpecification,你会发现思路是趋同的:注解声明 agent 结构、CDI 管理生命周期、LLM 只负责决策。区别在于 Jakarta 版本背后有 TCK 和兼容性认证,你在 Payara 上写的 agent,理论上可以直接搬到 Open Liberty 或者别的实现上跑。

我的判断

这个项目出现的时间点很微妙。Spring AI 2.0 刚在 Spring Boot 4.1 生态里站稳,LangChain4j 迭代也很快,Jakarta Agentic AI 现在进场,短期内很难撼动 Spring AI 在 Spring 系开发者里的地位——M1 连参考实现和 TCK 都还没有。

但值得关注的是它把"agent 编程模型"这件事提到了规范层面。Reza Rahman 在公告里说得很直白:M1 是注解和生命周期的里程碑,参考实现和 TCK 是 1.0 正式版之前的下一块拼图,再往后还规划了编程式工作流 API,支持运行期动态修改 agent 流程。

对普通开发者来说,现在可以做的事很具体:拉一份 M1 依赖,在 Jakarta EE 10 环境里把草案里的示例跑一遍,然后去 GitHub 提反馈。规范的早期反馈窗口只有这一次,等 1.0 定了型,想改就难了。

参考链接: - 发布公告: https://foojay.io/today/jakarta-agentic-ai-hits-its-first-milestone - 规范主页: https://jakarta.ee/specifications/agentic-ai/1.0 - Maven Central: https://central.sonatype.com/artifact/jakarta.agentic-ai/jakarta.agentic-ai-api/1.0.0-M1