Spring AI Alibaba 架构解析
学习仓库:
alibaba/spring-ai-alibaba
克隆路径:_refs/repos/spring-ai-alibaba/
学习日期:2026-05-08
1. 定位与概述
Spring AI Alibaba 是阿里巴巴官方推出的 Agentic AI 框架,构建在 Spring AI(v1.1.2)和 Spring Boot(v3.5.8)之上。
它不是简单地包装 Spring AI,而是提供了一个全新的 Agent 抽象层、持久化层和分布式协调层,使 Java 开发者能像 Python 开发者用 LangGraph 一样构建复杂 Agent 应用。
核心定位:生产级的 Agent、Workflow 和多智能体应用框架。
2. 三层架构
┌─────────────────────────────────────────┐
│ Platform 层:Admin + Studio │ ← 可视化 IDE、可观测性、MCP 管理
├─────────────────────────────────────────┤
│ Framework 层:Agent Framework │ ← ReactAgent、多 Agent 编排、Hooks
├─────────────────────────────────────────┤
│ Runtime 层:Graph Core │ ← StateGraph、CompiledGraph、Checkpoint
└─────────────────────────────────────────┘
| 层级 | 模块 | 用途 |
|---|---|---|
| Platform | spring-ai-alibaba-admin | 一站式可视化 Agent 平台 |
| Platform | spring-ai-alibaba-studio | 嵌入式 Agent 调试 UI |
| Framework | spring-ai-alibaba-agent-framework | ReAct Agent、多 Agent 编排、Context Engineering |
| Runtime | spring-ai-alibaba-graph-core | 类 LangGraph 的图执行引擎 |
依赖流向:agent-framework → graph-core → spring-ai-*
3. 核心特性(相比 vanilla Spring AI 的新增)
| 特性 | 说明 | 源码位置 |
|---|---|---|
| ReactAgent | ReAct 循环 Agent,内置工具调用 | agent-framework/.../agent/ReactAgent.java |
| 多 Agent 编排 | Sequential / Parallel / Loop / Routing | agent-framework/.../agent/flow/agent/ |
| Context Engineering | 上下文压缩、编辑、调用限制、重试、动态工具选择 | agent-framework/.../agent/hook/ |
| Human-in-the-Loop | 可中断动作、人工审核 Hook | agent-framework/.../hip/HumanInLoopHook.java |
| 图工作流引擎 | StateGraph API,条件边、并行执行、子图 | graph-core/.../graph/StateGraph.java |
| A2A 通信 | Agent-to-Agent,Nacos 服务发现 | agent-framework/.../a2a/A2aRemoteAgent.java |
| 持久化/Checkpoint | Memory / File / PG / MySQL / Oracle / Mongo / Redis | graph-core/.../checkpoint/savers/ |
| 图表生成 | 导出 Mermaid / PlantUML | graph-core/.../diagram/MermaidGenerator.java |
| Skills Registry | 类路径/文件系统技能注册,Prompt 增强 | graph-core/.../skills/registry/ |
| Voice Agent | WebSocket 实时语音 Agent | examples/voice-agent/ |
4. Agent Framework 详解
4.1 核心抽象
Agent (抽象基类:invoke / stream / schedule / getGraph)
└── BaseAgent (通用属性:name, description, outputKey)
└── ReactAgent (ReAct 实现)
4.2 ReactAgent 内部结构
ReactAgent 内部把自己编译成一个 StateGraph,包含:
AGENT_MODEL_NAME节点:LLM 调用(AgentLlmNode)AGENT_TOOL_NAME节点:工具执行(AgentToolNode)- 条件边:根据
AssistantMessage.hasToolCalls()在 model → tool → model 之间路由 - Hook 节点:在
BEFORE_AGENT、AFTER_AGENT、BEFORE_MODEL、AFTER_MODEL处注入
4.3 Hook 机制
Hook 实现 Hook 接口,可以声明 JumpTo 目的地(model、tool、end)动态改变控制流。
内置 Hook 类型:
HumanInTheLoopHook— 人工介入ModelCallLimitHook— 模型调用次数限制SummarizationHook— 上下文摘要压缩SkillsAgentHook— 技能注入
4.4 Flow Agents(内置编排模式)
| Agent | 模式 |
|---|---|
SequentialAgent | 链式串行执行子 Agent |
ParallelAgent | 并发扇出,可配置 MergeStrategy |
LoopAgent | 迭代执行,LoopStrategy: COUNT / CONDITION / JSON_ARRAY |
LlmRoutingAgent | LLM 动态路由到子 Agent |
均通过 FlowGraphBuilder 构建 StateGraph 实现。
4.5 Interceptor 层
在 Hook 之下还有一层拦截器:
ModelInterceptor/ToolInterceptorContextEditingInterceptor— 上下文编辑ModelRetryInterceptor— 模型重试ToolRetryInterceptor— 工具重试ToolSelectionInterceptor— 动态工具选择
5. Graph Core 详解
这是 Java 版 LangGraph 的实现:
| 类 | 角色 |
|---|---|
StateGraph | 定义节点、边、条件边、子图 |
CompiledGraph | StateGraph.compile(CompileConfig) 生成的可执行形式 |
OverAllState | 中央可序列化状态对象;键有 KeyStrategy(Append / Replace / Merge) |
NodeOutput | 每步输出包装器 |
RunnableConfig | 运行时配置:threadId、metadata、checkpoint config、executor |
InterruptableAction | Human-in-the-Loop 接口:interrupt() / interruptAfter() |
Graph 特性
- 条件路由:
addConditionalEdges(source, condition, mappings) - 并行条件边:
addParallelConditionalEdges(source, multiCommand, mappings) - 子图:
addNode(id, CompiledGraph)或addNode(id, StateGraph) - 持久化:
CompileConfig+SaverConfig支持 memory/file/DB/Redis/Mongo - 流式:
CompiledGraph.stream()返回Flux<NodeOutput> - 调度:
CompiledGraph.schedule(ScheduleConfig)支持 cron-like 调度 - 状态序列化:Jackson-based + Java ObjectStream
6. 关键源码目录速查
Agent Framework
spring-ai-alibaba-agent-framework/.../graph/agent/
├── Agent.java, BaseAgent.java, ReactAgent.java
├── Builder.java, DefaultBuilder.java
├── node/
│ ├── AgentLlmNode.java # LLM 调用节点
│ └── AgentToolNode.java # 工具执行节点
├── flow/
│ ├── agent/
│ │ ├── SequentialAgent.java
│ │ ├── ParallelAgent.java
│ │ ├── LoopAgent.java
│ │ └── LlmRoutingAgent.java
│ ├── builder/FlowGraphBuilder.java
│ └── strategy/ # 各模式的图构建策略
├── hook/
│ ├── AgentHook.java, ModelHook.java
│ ├── hip/HumanInTheLoopHook.java
│ ├── modelcalllimit/ModelCallLimitHook.java
│ ├── summarization/SummarizationHook.java
│ └── skills/SkillsAgentHook.java
├── interceptor/
│ ├── ModelInterceptor.java, ToolInterceptor.java
│ ├── contextediting/ContextEditingInterceptor.java
│ ├── modelretry/ModelRetryInterceptor.java
│ ├── toolretry/ToolRetryInterceptor.java
│ └── toolselection/ToolSelectionInterceptor.java
├── tool/
│ ├── AsyncToolCallback.java
│ └── multimodal/ # 多模态工具结果支持
└── a2a/
├── A2aRemoteAgent.java
└── A2aNodeActionWithConfig.java
Graph Core
spring-ai-alibaba-graph-core/.../graph/
├── StateGraph.java
├── CompiledGraph.java
├── OverAllState.java, OverAllStateBuilder.java
├── RunnableConfig.java
├── action/ # Node/Edge action 接口
├── checkpoint/
│ ├── BaseCheckpointSaver.java
│ └── savers/ # Memory, File, PG, MySQL, Oracle, Mongo, Redis
├── state/ # Channel, Reducer, AppenderChannel
├── serializer/ # Jackson & ObjectStream
├── observation/ # Micrometer/OpenTelemetry
├── diagram/
│ ├── MermaidGenerator.java
│ └── PlantUMLGenerator.java
└── store/ # Key-value store 抽象
7. 示例与 Starter
Examples(examples/)
| 示例 | 说明 |
|---|---|
chatbot/ | 基础聊天机器人 + 嵌入式 Studio UI |
multiagent-patterns/ | 丰富的多 Agent 模式:handoff、pipeline、routing、skills、subagent、supervisor、workflow |
multimodal/ | 图像/音频输入的 ReactAgent |
voice-agent/ | WebSocket 实时语音 Agent |
deepresearch/ | 深度研究 Agent(图工作流) |
agentscope/ | AgentScope handoff 集成 |
Spring Boot Starters
spring-ai-alibaba-starter-a2a-nacos— A2A + Nacos 服务发现spring-ai-alibaba-starter-config-nacos— Nacos 动态配置spring-ai-alibaba-starter-graph-observation— 图可观测性spring-ai-alibaba-starter-builtin-nodes— 预置工作流节点spring-ai-alibaba-starter-agentscope— AgentScope 集成
8. 与 Spring AI 的关系
| 维度 | Vanilla Spring AI | Spring AI Alibaba |
|---|---|---|
| Agent 抽象 | ChatClient、ChatModel、Advisors | 完整的 ReactAgent,ReAct 循环、Hooks、拦截器 |
| 多 Agent | 手动编排 | 内置 SequentialAgent、ParallelAgent、LoopAgent、RoutingAgent |
| 状态执行 | 简单 Memory repositories | StateGraph + OverAllState + Checkpoint + 子图 |
| 工作流引擎 | 无原生支持 | 类 LangGraph 的图 API |
| 人工介入 | 无内置 | InterruptableAction、HumanInTheLoopHook |
| 上下文工程 | 基础 | 上下文压缩、编辑、调用限制、重试、PII 检测 |
| A2A / 分布式 | 无 | Nacos 集成的 A2A |
| 可视化平台 | 无 | Admin(全平台)+ Studio(嵌入式调试) |
| 云原生 | 通用 | DashScope/Tongyi 深度集成 |
一句话总结:Spring AI 提供原子能力(ChatModel、ToolCallback、Advisors、VectorStore),Spring AI Alibaba 在这些原子上构建了一个完整的 Agent 操作系统。
9. 学习路径建议
- 入门:跑通
examples/chatbot/,理解 ReactAgent 的基本用法 - 进阶:阅读
ReactAgent源码,看它如何把自身编译成StateGraph - 深入:研究
multiagent-patterns/示例,理解各种编排模式 - 底层:看
graph-core的StateGraph和CompiledGraph,理解图引擎原理 - 对比:与 LangGraph Python 对比,理解设计差异