embabel-agent
embabel/embabel-agent加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2019年,当大多数开发者还在用 Python 玩转 AI Agent 时,一位 Java 界的传奇人物悄然开始了新的探索。他就是 Rod Johnson——Spring 框架的创始人,改变了 Java 企业级开发方式的这个男人。他没有选择继续在 Python 主导的 AI 领域随波逐流,而是决定在自己最熟悉的 JVM 生态中,为 AI Agent 的构建提供一种全新的可能性。Embabel Agent Framework(发音 /ɛmˈbeɪbəl/,意为 "Em-BAY-bel")就这样诞生了。

上图展示了 Embabel Agent 的一个实际运行案例——基于地图规划路径任务的执行过程。
Python 生态中有 LangChain、AutoGPT、crewAI 等成熟方案,但对于深耕 Java/Kotlin 的企业开发团队而言,引入 Python 技术栈意味着额外的学习成本、运维复杂度和长期维护风险。更关键的是,Python Agent 框架往往缺乏企业级应用所要求的强类型保障、依赖注入和事务管理能力。
Embabel Agent 的核心设计理念正是:让 AI Agent 的开发回归企业级软件工程的正道。它不是简单地将 Python 方案移植到 Kotlin,而是从架构层面重新思考 Agent 的构建方式——在 JVM 的类型安全性和 Spring 生态的工程化能力之上,构建一套完整的 Agent 运行时。
Embabel Agent 用四个核心概念建模 Agent 流程:
| 概念 | 作用 |
|---|---|
| Action(动作) | Agent 可以执行的单个步骤,如调用 API、操作数据库、执行 LLM 推理 |
| Goal(目标) | Agent 试图达成的最终状态,如"生成一份市场分析报告" |
| Condition(条件) | 评估前置状态或判断目标是否已达成;每次 Action 后重新评估 |
| Domain Model(领域模型) | 支撑整个流程的领域对象,包含业务逻辑 |
这四个概念之上,是 Embabel 独特的动态规划引擎。与传统的有限状态机(FSM)或顺序执行不同,Embabel 在每个 Action 完成后会重新规划,计算下一步最优动作——这本质上是一个 OODA 循环(观察-Orient-决策-行动)。
框架内置两种规划算法:
两种算法可以共存,开发者按场景切换。
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Focused | 代码显式调用指定 Agent | 事件驱动流程 |
| Closed | 意图分类后选择对应 Agent | 对话式入口 |
| Open | 平台自动识别目标并构建 Agent | 开放式任务执行,最强大也最不确定 |
Open 模式尤其值得关注——系统可以从零组合多个 Provider 的 Actions,找到开发者未曾预设的解决方案路径。
Embabel Agent 是一个多模块 Maven 项目,主仓库包含 16 个核心模块:
embabel-agent-api — 核心 APIembabel-agent-common — 通用组件embabel-agent-code — 代码执行能力embabel-agent-domain — 领域模型embabel-agent-mcp — MCP (Model Context Protocol) 协议支持embabel-agent-rag — RAG 检索增强生成embabel-agent-shell — Shell 命令执行embabel-agent-skills — 技能库embabel-agent-observability — 可观测性(指标/追踪)embabel-agent-onnx — ONNX 本地模型支持支持的 LLM 提供商(通过 23 个 Starters 模块接入):OpenAI、Anthropic Claude、Google Gemini、Azure OpenAI、阿里通义千问、DeepSeek、Mistral、Ollama(本地)、LM Studio(本地)、Cohere、MiniMax 等,覆盖国内外主流模型。
Spring Boot 集成:框架天然融入 Spring 生态,支持通过 @Agent 注解声明 Agent 类,使用 Spring AOP 装饰函数,通过 Spring 的依赖注入管理 Agent 生命周期。
Python Agent 框架中,Prompt 和代码之间的交互往往依赖"魔法 Map"——字符串键值对,没有类型检查,重构即噩梦。Embabel Agent 中,Actions/Goals/Conditions 均由强类型领域模型驱动,享受完整的 IDE 自动补全、类型检查和重构支持。
框架对 Ollama 和 ONNX 的深度支持,使其成为少数真正重视本地部署隐私需求的 Agent 框架之一。在数据合规要求严格的金融、医疗场景,这一特性尤为关键。
Embabel Agent 的编程模型与运行时平台解耦。同一套 Agent 代码,理论上可以在不同 AgentPlatform 实现之间切换——本地开发用轻量平台,生产环境用高 QoS 平台,无需改代码。
embabel-agent-rag 模块提供开箱即用的检索增强能力;embabel-agent-mcp 支持 MCP 协议,使 Agent 可以调用外部工具生态。两者结合,构成一个完整的 Agent 工具调用体系。
Embabel Agent 提供两种编写 Flow 的方式:
注解式(Spring MVC 风格):
@Agent
class TravelAgent {
@Goal
fun planTrip(@Condition destination: String): TripPlan { ... }
@Action
fun searchFlights(from: String, to: String): List<Flight> { ... }
}
Kotlin DSL 式:
agent {
goal("plan a trip to Tokyo") {
action { searchFlights() }
action { bookHotel() }
}
}
两种方式各有适用场景,前者更符合企业 Java 开发者的习惯,后者对 Kotlin 开发者更友好。
虽然框架声称"从 Java 使用很自然",但 README 和大量示例以 Kotlin 为主。习惯 Java 8/11 风格的资深工程师可能需要额外时间适应 Kotlin 语法。
GOAP 和 Utility AI 的概念对没有游戏 AI 背景的开发者而言需要额外学习成本。加上强类型领域建模的要求,初学者上手门槛明显高于 LangChain。
截至目前约 4,200+ stars,主要贡献者集中于创始团队。虽然 Maven Central 发布规范,但社区生态(第三方扩展、模板市场)仍在早期。
对于期望快速 Demo 的用户,Embabel Agent 需要构建一个完整的 Spring Boot 项目。这与 LangChain 的"5行代码跑起来"形成鲜明对比。
Embabel Agent 的出现,填补了 JVM 生态在 AI Agent 领域的关键空白。它代表了一种趋势:将 AI Agent 的工程化从脚本语言推向企业级平台。
随着 Spring AI 项目的成熟,Embabel 与 Spring 生态的协同效应正在显现。可以预见,在企业 AI 应用落地的第二波浪潮中——当"能用"不再是问题,"能用好"成为核心竞争力时——强类型、可测试、事务安全的 JVM Agent 方案将迎来更大的舞台。
| 维度 | 评分(5星) | 简评 |
|---|---|---|
| 架构设计 | ⭐⭐⭐⭐⭐ | GOAP+OODA 动态规划,架构领先 |
| 企业就绪度 | ⭐⭐⭐⭐ | Spring 集成强,类型安全,但社区薄 |
| 上手门槛 | ⭐⭐⭐ | 需要 Kotlin + Agent 概念基础 |
| 部署便捷 | ⭐⭐ | 纯库框架,无一键部署 |
| 本地模型支持 | ⭐⭐⭐⭐⭐ | Ollama/ONNX 深度集成,隐私友好 |
| 文档质量 | ⭐⭐⭐ | 文档覆盖基本概念,深入内容偏少 |
适合场景:已有 JVM 技术栈的团队构建生产级 AI Agent;数据隐私要求高需本地部署的场景;追求强类型和工程化规范的 AI 应用开发。
慎用场景:快速原型验证(推荐 LangChain);纯 Python 技术栈团队(维护两套生态成本高);没有 Spring 背景的个人开发者。