2025-2026 年,Java 生态迎来了 AI 框架井喷期。Spring AI 1.0 GA、Spring AI Alibaba 1.0 GA、AgentScope 2.0 相继发布,Java 开发者终于不再只能羡慕 Python 生态。本文基于实际项目经验,从架构设计、核心能力、适用场景三个维度做一次硬核横评。
先说结论
如果你赶时间,这张表够了:
| 维度 | Spring AI | Spring AI Alibaba | AgentScope |
|---|---|---|---|
| 一句话 | AI 领域的 JDBC | AI 领域的 MyBatis-Plus | AI 领域的 Hibernate |
| 核心理念 | 模型抽象 + 可组合 | Graph 工作流编排 | Agentic 自主决策 |
| Agent 状态 | 无状态 | 无状态 | 有状态 |
| 最适合 | 快速集成多模型 API | 企业级 AI 工作流 | 桌面 Agent / 自动化任务 |
如果你想知道为什么,请继续往下看。
一、三个框架分别是什么
Spring AI ------ 基础抽象层
Spring AI 由 VMware/Pivotal 团队开发,2025 年 5 月发布 1.0 GA。它的定位很明确:为 Spring 生态提供统一的 AI 模型访问抽象。
就像 JDBC 屏蔽了不同数据库的差异,Spring AI 屏蔽了 OpenAI、Anthropic、Ollama 等不同模型提供商的 API 差异。你写一次代码,换个配置就能切换模型。
java
// 换模型?改配置就行,代码一行不用动
@Autowired
private ChatClient chatClient;
String reply = chatClient.prompt("你好").call().content();
核心组件:
- ChatClient:统一的对话客户端,支持同步/流式
- ChatMemory:对话记忆,按 conversationId 存取,支持 JDBC、Redis 等后端
- Advisor API:拦截器链模式,注入检索上下文和对话历史
- Function Calling:标准化的工具调用协议
- Embedding / VectorStore:向量化和检索抽象
Spring AI Alibaba ------ 企业级增强
Spring AI Alibaba 由阿里巴巴开源,2026 年 5 月发布 1.0 GA。它完全兼容 Spring AI 的核心 API ,在此基础上增加了企业级能力,最大的亮点是 Graph 工作流引擎。
如果说 Spring AI 是给你砖头和水泥,Spring AI Alibaba 就是给你一套精装修方案。
java
// Graph 工作流编排示例
Graph graph = new StateGraph<>(AgentState::new)
.addNode("classify", classifyNode)
.addNode("handle_complaint", complaintNode)
.addNode("handle_inquiry", inquiryNode)
.addEdge(START, "classify")
.addConditionalEdges("classify", routerFunction)
.compile();
核心组件:
- Graph 引擎:DAG 工作流编排,支持条件分支、并行、循环
- MCP 协议支持:标准化的工具调用协议
- 百炼平台集成:深度对接阿里云 AI 基础设施
- 多 Agent 节点编排:在 Graph 中编排多个 Agent 协作
AgentScope ------ 原生 Agentic 框架
AgentScope 同样由阿里巴巴开源,2.0 版本以 Java 为主要语言。它的设计理念和前两者完全不同:不是让开发者编排流程,而是让 Agent 自己决定怎么做。
给 Agent 一个目标,它自己规划步骤、调用工具、处理异常、总结结果。开发者只需要定义"做什么",不需要定义"怎么做"。
java
// 创建一个有状态的 Agent,它自己决定调用什么工具
HarnessAgent agent = HarnessAgent.builder()
.name("dev-assistant")
.sysPrompt("你是一个开发助手")
.model(model)
.workspace(Paths.get("./workspace"))
.session(session)
.sessionKey(SimpleSessionKey.of("my-session"))
.build();
// 给它一个任务,它自己规划执行
agent.call(Msg.user("帮我重构这个类的异常处理"))
.subscribe(reply -> System.out.println(reply.getTextContent()));
核心组件:
- HarnessAgent:全功能 Agent,内置 ReAct 循环、工具调用、文件系统
- Session + AgentState:有状态的会话管理,支持持久化和恢复
- Compaction:自动对话压缩,长对话不会 token 爆炸
- Sandbox:隔离的 Shell 和文件系统执行环境
- Skill 系统:动态发现、安装、管理 Agent 技能
- Hub/Observer:多 Agent 通信和协作
二、架构设计的本质区别
三个框架的根本差异在于一个问题:谁来决定下一步做什么?
arduino
控制力强 ◄─────────────────────────────► 自主性强
(开发者决定每一步) (Agent 自己决定)
Spring AI Spring AI Alibaba AgentScope
│ │ │
"调哪个API" "走哪条路径" "怎么完成目标"
开发者硬编码 Graph DAG 定义 Agent ReAct 规划
Spring AI:开发者完全控制
markdown
开发者代码 ──► ChatClient ──► 模型API ──► 返回结果
│
开发者决定何时调用、传什么参数
你需要自己写 if/else 来决定调什么模型、传什么上下文、怎么处理返回值。框架只负责帮你把 API 调用变得简单。
Spring AI Alibaba:Graph 控制流程
yaml
开发者定义 Graph
│
├── Node A: 意图分类
├── Edge: if 投诉 → Node B
├── Edge: if 咨询 → Node C
├── Node B: 处理投诉
└── Node C: 处理咨询
运行时:数据沿 Graph 自动流转
开发者定义好路径和条件,运行时框架自动驱动。流程确定、可预测、可审计。
AgentScope:Agent 自主规划
yaml
开发者给目标:"帮我修复这个 bug"
│
Agent 自主决策 (ReAct 循环)
├── Thought: 先看报错信息
├── Action: 读取日志文件
├── Observation: NullPointerException at line 42
├── Thought: 需要看源码
├── Action: 读取源文件
├── Thought: 缺少空值检查
└── Action: 修改代码 + 运行测试
Agent 自己决定每一步做什么,开发者只需要提供工具和目标。
三、核心能力对比
| 能力 | Spring AI | Spring AI Alibaba | AgentScope |
|---|---|---|---|
| 对话(Chat) | ✅ ChatClient | ✅ ChatClient | ✅ HarnessAgent.call() |
| 流式响应 | ✅ Flux<String> | ✅ Flux<String> | ✅ streamEvents() |
| 工具调用 | ✅ Function Calling | ✅ + MCP 协议 | ✅ ReAct + Toolkit |
| 对话记忆 | ✅ ChatMemory(外置) | ✅ ChatMemory(外置) | ✅ AgentState(内置) |
| RAG 检索增强 | ✅ VectorStore + Advisor | ✅ + 百炼集成 | ✅ Knowledge + RAGMode |
| 工作流编排 | ❌ | ✅ Graph DAG | ❌ |
| 多 Agent 协作 | ❌ | ✅ Graph 多节点 | ✅ Hub/Observer |
| Sandbox 执行 | ❌ | ❌ | ✅ Shell + FS 隔离 |
| 自动对话压缩 | ❌ | ❌ | ✅ Compaction |
| Skill 管理 | ❌ | ❌ | ✅ 动态 Skill |
| 会话持久化 | ✅ JDBC/Redis | ✅ JDBC/Redis | ✅ Session 接口 |
| 模型切换 | ✅ 换 Bean | ✅ 换 Bean | ⚠️ 需重建 Agent |
| 高并发 | ✅ 天然支持 | ✅ 天然支持 | ⚠️ 需管理实例生命周期 |
四、Agent 与 Session 的设计哲学
这是三个框架最深层的分歧,直接决定了它们各自擅长什么。
Spring AI / Spring AI Alibaba:无状态 Agent
java
// Agent 是无状态的,Memory 由外部管理
ChatMemory memory = new JdbcChatMemory(jdbcTemplate);
ChatClient client = ChatClient.builder(model)
.defaultAdvisors(new MessageChatMemoryAdvisor(memory))
.build();
// 每次调用传入 conversationId,框架自动加载/保存历史
client.prompt("你好")
.advisors(a -> a.param("conversationId", "session-123"))
.call();
- Agent 本身不持有任何状态
- 对话历史由
ChatMemory按conversationId独立存取 - 切换模型:换个 ChatClient Bean,历史不受影响
- 多会话:天然支持,不同 conversationId 就是不同会话
- 水平扩展:无状态 = 随便加机器
AgentScope:有状态 Agent
java
// Agent 在构建时绑定 SessionKey,状态和 Agent 耦合
HarnessAgent agent = HarnessAgent.builder()
.session(session)
.sessionKey(SimpleSessionKey.of("session-123")) // 构建时固定
.build();
// Agent 内部维护 AgentState(对话历史 + 工具状态 + 压缩状态)
// sessionKey 和 state 都是 final 的,不可变
- 一个 Agent 实例 = 一个会话,不可复用
AgentState不仅有对话历史,还有工具执行上下文、Compaction 状态等- 切换模型:需要创建新的 Agent 实例
- 多会话:每个会话一个 Agent 实例,需要 LRU/TTL 管理
- 优势:状态连贯,支持复杂的多轮工具调用和文件操作
五、适用场景推荐
场景 1:多用户 Web 聊天平台
需求:多用户并发、多模型切换、会话管理
推荐:Spring AI Alibaba > Spring AI > AgentScope
原因:无状态 Agent 天然适配 Web 服务的高并发、无状态部署模型。切换模型只需换配置,不影响现有会话。
场景 2:企业审批/客服工作流
需求:确定性流程、多节点协作、可审计
推荐:Spring AI Alibaba
原因:Graph 引擎专为这类场景设计------意图分类 → 路由 → 处理 → 审核,每一步可控可追溯。
css
用户输入 → [意图分类] → 投诉? → [情绪安抚] → [工单创建] → [通知]
→ 咨询? → [知识检索] → [回答生成]
场景 3:IDE / 桌面 AI 助手
需求:文件读写、Shell 执行、长时间交互、技能扩展
推荐:AgentScope
原因:内置 Sandbox、文件系统、Skill 管理,Agent 有状态可以维持复杂的多轮工具调用上下文。这就是 Cursor、Copilot 类产品的底层需求。
场景 4:后台自动化 Agent
需求:给一个目标,Agent 自己规划执行
推荐:AgentScope
原因:ReAct 循环让 Agent 自主决策,不需要预定义流程。适合代码审查、自动修复、数据处理等开放式任务。
场景 5:快速接入大模型 API
需求:最小成本接入 OpenAI / 通义 / DeepSeek
推荐:Spring AI
原因:最轻量,核心就是模型抽象层。加几个依赖、写几行配置就能跑。
场景 6:多 Agent 自主协作
需求:多个 Agent 各司其职,自主通信
推荐:AgentScope
原因:Hub/Observer 模式让 Agent 之间可以异步通信、互相观察,适合模拟团队协作(PM Agent、Dev Agent、QA Agent)。
六、技术选型决策树
markdown
你的需求是什么?
│
├── 只是调模型 API,不需要复杂逻辑
│ └── ✅ Spring AI(最轻量)
│
├── 需要确定性的业务流程编排
│ └── ✅ Spring AI Alibaba(Graph 引擎)
│
├── 需要 Agent 自主规划和执行
│ ├── 单用户/桌面场景?
│ │ └── ✅ AgentScope(天然适配)
│ └── 多用户 Web 服务?
│ └── ✅ AgentScope + 生命周期管理(LRU/TTL)
│ 或考虑 Spring AI Alibaba
│
├── 需要高并发多用户聊天
│ └── ✅ Spring AI Alibaba(无状态,易扩展)
│
└── 需要深度阿里云集成
└── ✅ Spring AI Alibaba(百炼平台原生支持)
七、能不能混着用?
可以,而且阿里巴巴官方也建议这样做:
- Spring AI Alibaba 做 Web 层和工作流编排:接收用户请求、管理会话、编排业务流程
- AgentScope 做 Agent 执行层:在工作流的某个节点中,启动一个 AgentScope Agent 执行开放式任务
yaml
用户请求 → Spring AI Alibaba (Graph)
├── Node 1: 意图分类(确定性)
├── Node 2: 知识检索(确定性)
└── Node 3: AgentScope Agent(自主执行复杂任务)
├── ReAct: 读文件
├── ReAct: 分析代码
└── ReAct: 生成修复方案
两者互补:Graph 提供可控性 ,AgentScope 提供自主性。
八、总结
| Spring AI | Spring AI Alibaba | AgentScope | |
|---|---|---|---|
| 你应该选它,如果 | 只需要调模型 API,追求轻量 | 需要企业级工作流 + 高并发 Web 服务 | 需要自主 Agent + 工具执行 + 桌面场景 |
| 你不应该选它,如果 | 需要复杂的 Agent 编排 | 需要 Agent 完全自主决策 | 需要高并发多用户 Web 服务 |
| 学习曲线 | ⭐ 低 | ⭐⭐ 中 | ⭐⭐⭐ 高 |
| 灵活性 | ⭐⭐⭐ 高 | ⭐⭐ 中 | ⭐ 低(框架约束强) |
| 开箱即用 | ⭐ 低 | ⭐⭐ 中 | ⭐⭐⭐ 高 |
没有最好的框架,只有最合适的场景。理解它们的设计哲学,才能做出正确的选型。