
1. 项目概述
1.1 项目简介
Spring AI Alibaba 是阿里云基于 Spring AI 框架开发的 AI 应用开发平台,提供了一整套用于构建 AI 应用的组件和工具。项目版本为 1.1.2.2 ,基于 Spring Boot 3.5.8 和 Spring AI 1.1.2 构建。
1.2 技术栈
| 组件 | 版本 | 说明 |
|---|---|---|
| Java | 17+ | 最低JDK版本要求 |
| Spring Boot | 3.5.8 | 基础框架 |
| Spring AI | 1.1.2 | AI核心框架 |
| DashScope SDK | 2.15.1 | 阿里云DashScope API SDK |
| Nacos | 3.1.0 | 服务注册与配置中心 |
| Reactor | - | 响应式编程框架 |
2. 架构总览
2.1 整体架构图
2.2 模块依赖关系
3. 模块结构分析
3.1 核心模块清单
| 模块名称 | 路径 | 核心职责 |
|---|---|---|
spring-ai-alibaba-bom |
/spring-ai-alibaba-bom |
BOM依赖管理 |
spring-ai-alibaba-graph-core |
/spring-ai-alibaba-graph-core |
状态图执行引擎 |
spring-ai-alibaba-agent-framework |
/spring-ai-alibaba-agent-framework |
Agent框架与ReAct实现 |
spring-ai-alibaba-studio |
/spring-ai-alibaba-studio |
Studio Web模块 |
spring-ai-alibaba-sandbox |
/spring-ai-alibaba-sandbox |
沙箱执行环境 |
3.2 Starter模块清单
| STARTER名称 | 功能说明 |
|---|---|
spring-ai-alibaba-starter-a2a-nacos |
A2A协议与Nacos服务发现 |
spring-ai-alibaba-starter-config-nacos |
Nacos配置中心集成 |
spring-ai-alibaba-starter-graph-observation |
可观测性支持(Micrometer) |
spring-ai-alibaba-starter-builtin-nodes |
内置节点类型(LLM、工具、HTTP等) |
spring-ai-alibaba-starter-agentscope |
AgentScope流程编排 |
3.3 Admin模块结构
spring-ai-alibaba-admin/
├── spring-ai-alibaba-admin-server-core # 核心服务
├── spring-ai-alibaba-admin-server-openapi # OpenAPI接口
├── spring-ai-alibaba-admin-server-runtime # 运行时领域模型
├── spring-ai-alibaba-admin-server-start # 启动模块
└── frontend/ # 前端UI
4. 核心组件详解
4.1 状态图核心(Graph Core)
4.1.1 类层次结构

4.1.2 StateGraph 核心类分析
类位置 : com.alibaba.cloud.ai.graph.StateGraph
核心职责: 状态图定义与编译入口,提供DSL风格的图构建API
关键属性:
| 属性名 | 类型 | 说明 |
|---|---|---|
nodes |
Nodes |
节点集合 |
edges |
Edges |
边集合 |
keyStrategyFactory |
KeyStrategyFactory |
状态键策略工厂 |
stateSerializer |
StateSerializer |
状态序列化器 |
关键方法:
java
// 添加普通节点
public StateGraph addNode(String id, NodeAction action)
// 添加异步节点
public StateGraph addNode(String id, AsyncNodeAction action)
// 添加普通边
public StateGraph addEdge(String sourceId, String targetId)
// 添加条件边
public StateGraph addConditionalEdge(String sourceId, EdgeAction condition,
Map<String, String> mappings)
// 编译为可执行图
public CompiledGraph compile(CompileConfig compileConfig)
4.1.3 CompiledGraph 核心类分析
类位置 : com.alibaba.cloud.ai.graph.CompiledGraph
核心职责: 已编译状态图的执行引擎,支持同步和异步执行
线程安全 : 使用 Node.ActionFactory 而非实例存储,确保线程安全
执行流程:

4.2 Agent框架
4.2.1 类层次结构

4.2.2 ReactAgent 核心类分析
类位置 : com.alibaba.cloud.ai.graph.agent.ReactAgent
核心职责: 实现 ReAct(Reasoning + Acting)模式的智能体,支持工具调用和多轮对话
设计特点:
-
基于状态图实现Agent循环
-
支持 Hook 机制扩展
-
支持拦截器链(Interceptor Chain)
-
线程安全的并发处理
核心属性:
| 属性名 | 类型 | 线程安全 | 说明 |
|---|---|---|---|
threadIdStateMap |
ConcurrentMap |
是 | 线程状态存储 |
llmNode |
AgentLlmNode |
是 | LLM调用节点 |
toolNode |
AgentToolNode |
是 | 工具执行节点 |
hooks |
List<Hook> |
否(构建时确定) | Hook列表 |
modelInterceptors |
List<ModelInterceptor> |
否 | 模型拦截器 |
toolInterceptors |
List<ToolInterceptor> |
否 | 工具拦截器 |
ReAct执行流程:

4.3 检查点与状态管理
4.3.1 检查点存储架构

4.3.2 状态序列化机制
类位置 : com.alibaba.cloud.ai.graph.serializer.StateSerializer
实现类:
| 实现类 | 序列化格式 | 适用场景 |
|---|---|---|
SpringAIJacksonStateSerializer |
JSON | 默认,跨语言兼容 |
ObjectStreamStateSerializer |
Java序列化 | Java内部传输 |
5. 设计模式分析
5.1 构建者模式(Builder Pattern)
广泛应用于 Agent、StateGraph、CompileConfig 等复杂对象的创建。
应用示例 - ReactAgent.Builder:
java
ReactAgent agent = ReactAgent.builder()
.name("my-agent")
.instruction("你是一个助手...")
.model(chatModel)
.tools(toolCallbacks)
.hooks(hooks)
.modelInterceptors(interceptors)
.build();
优势:
-
链式调用,代码可读性强
-
可选参数灵活配置
-
构建过程可验证
5.2 策略模式(Strategy Pattern)
应用场景: 状态更新策略

实现类:
-
AppendStrategy: 追加策略,用于消息列表 -
ReplaceStrategy: 替换策略,用于标量值 -
MergeStrategy: 合并策略,用于Map对象
5.3 责任链模式(Chain of Responsibility)
应用场景: 拦截器链

5.4 工厂模式(Factory Pattern)
应用场景: AgentBuilderFactory、Node ActionFactory
java
// AgentBuilderFactory 接口
public interface AgentBuilderFactory {
Builder builder();
}
// 默认实现
public class DefaultAgentBuilderFactory implements AgentBuilderFactory {
public Builder builder() {
return new DefaultBuilder();
}
}
5.5 观察者模式(Observer Pattern)
应用场景: GraphLifecycleListener

6. 扩展点与SPI机制
6.1 Hook机制
接口位置 : com.alibaba.cloud.ai.graph.agent.hook.Hook
Hook类型:
| HOOK类型 | 触发时机 | 用途 |
|---|---|---|
AgentHook |
Agent启动/结束 | 初始化资源、清理 |
ModelHook |
模型调用前后 | 请求修改、响应处理 |
InstructionAgentHook |
指令处理 | 动态提示词修改 |
HumanInTheLoopHook |
人机交互点 | 人工审核 |
自定义Hook示例:
java
@Component
public class CustomLoggingHook implements AgentHook {
@Override
public String getName() {
return "custom-logging-hook";
}
@Override
public void onAgentStart(OverAllState state) {
log.info("Agent started with state: {}", state);
}
@Override
public void onAgentEnd(OverAllState state) {
log.info("Agent ended with state: {}", state);
}
}
6.2 拦截器扩展
ModelInterceptor : com.alibaba.cloud.ai.graph.agent.interceptor.ModelInterceptor
内置拦截器:
| 拦截器 | 功能 |
|---|---|
ModelRetryInterceptor |
模型调用重试 |
ModelFallbackInterceptor |
模型降级 |
ToolRetryInterceptor |
工具调用重试 |
ToolSelectionInterceptor |
工具选择增强 |
SkillsInterceptor |
技能注入 |
自定义拦截器示例:
java
public class CustomModelInterceptor extends ModelInterceptor {
@Override
public ModelResponse interceptModel(ModelRequest request, ModelCallHandler handler) {
// 前置处理:修改请求
ModelRequest modifiedRequest = modifyRequest(request);
// 调用下一个处理器
ModelResponse response = handler.handle(modifiedRequest);
// 后置处理:修改响应
return modifyResponse(response);
}
}
6.3 Skill注册表扩展
接口位置 : com.alibaba.cloud.ai.graph.skills.registry.SkillRegistry
扩展点:
-
自定义Skill扫描策略
-
自定义Skill存储后端
-
自定义Skill加载器
7. Spring Boot自动配置
7.1 自动配置类结构

7.2 核心自动配置类分析
类位置 : com.alibaba.cloud.ai.autoconfigure.graph.GraphObservationAutoConfiguration
条件注解使用:
java
@AutoConfiguration
@ConditionalOnClass({ StateGraph.class, ObservationRegistry.class })
@EnableConfigurationProperties(GraphObservationProperties.class)
@ConditionalOnProperty(
prefix = GraphObservationProperties.CONFIG_PREFIX,
name = "enabled",
havingValue = "true",
matchIfMissing = true
)
public class GraphObservationAutoConfiguration {
// ...
}
条件注解说明:
| 注解 | 作用 |
|---|---|
@ConditionalOnClass |
类存在时启用 |
@ConditionalOnBean |
Bean存在时启用 |
@ConditionalOnProperty |
配置属性满足时启用 |
@ConditionalOnMissingBean |
Bean不存在时创建 |
7.3 Nacos配置中心集成
类位置 : com.alibaba.cloud.ai.agent.nacos.NacosReactAgentBuilder
配置热更新流程:

8. 关键调用流程
8.1 聊天完成请求全流程

8.2 流式响应处理流程

8.3 配置加载流程

9. 配置使用指南
9.1 基础配置(application.yml)
XML
spring:
ai:
alibaba:
dashscope:
api-key: ${DASHSCOPE_API_KEY}
chat:
options:
model: qwen-max
temperature: 0.7
graph:
observation:
enabled: true
9.2 Graph Observation配置
XML
spring:
ai:
alibaba:
graph:
observation:
enabled: true
metrics:
enabled: true
tracing:
enabled: true
9.3 Nacos配置
XML
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
namespace: ai-agent
group: DEFAULT_GROUP
discovery:
server-addr: localhost:8848
9.4 检查点存储配置
java
// 内存存储(默认)
CompileConfig config = CompileConfig.builder()
.checkpointSaver(new MemorySaver())
.build();
// 数据库存储
CompileConfig config = CompileConfig.builder()
.checkpointSaver(new MysqlSaver(dataSource))
.build();
// Redis存储
CompileConfig config = CompileConfig.builder()
.checkpointSaver(new RedisSaver(redisTemplate))
.build();
10. 最佳实践
10.1 Agent设计建议
-
状态管理: 使用合适的KeyStrategy
javastateGraph.addKeyStrategy("messages", new AppendStrategy()); stateGraph.addKeyStrategy("context", new ReplaceStrategy()); -
拦截器使用: 按优先级排序
javaList<ModelInterceptor> interceptors = Arrays.asList( new ModelRetryInterceptor(), // 先重试 new ModelFallbackInterceptor() // 再降级 ); -
Hook注册: 避免循环依赖
javaReactAgent agent = ReactAgent.builder() .hooks(Arrays.asList( new LoggingHook(), new MetricsHook() )) .build();
10.2 性能优化
-
使用流式响应: 减少等待时间
javaFlux<String> stream = agent.stream(message); -
配置合适的检查点策略: 避免过度持久化
javaCompileConfig config = CompileConfig.builder() .checkpointSaver(memorySaver) // 开发环境使用内存 .recursionLimit(50) // 限制递归深度 .build(); -
启用观察性: 便于性能监控
XMLspring: ai: alibaba: graph: observation: enabled: true
10.3 线程安全注意事项
-
CompiledGraph: 线程安全,可共享实例
-
StateGraph: 构建后可复用,但非线程安全修改
-
ReactAgent: 线程安全,支持并发调用
-
自定义NodeAction: 需确保无状态或线程安全
10.4 错误处理
java
try {
AssistantMessage response = agent.call(message);
} catch (GraphRunnerException e) {
// 图执行异常
log.error("Graph execution failed: {}", e.getMessage());
} catch (AgentException e) {
// Agent异常
log.error("Agent error: {}", e.getMessage());
} catch (ToolCancelledException e) {
// 工具调用被取消
log.warn("Tool call cancelled");
}
附录A:核心类索引
A.1 状态图核心
| 类名 | 路径 | 职责 |
|---|---|---|
StateGraph |
graph/StateGraph.java |
状态图定义 |
CompiledGraph |
graph/CompiledGraph.java |
编译后图执行 |
Node |
graph/internal/node/Node.java |
节点定义 |
OverAllState |
graph/OverAllState.java |
状态容器 |
CompileConfig |
graph/CompileConfig.java |
编译配置 |
A.2 Agent框架
| 类名 | 路径 | 职责 |
|---|---|---|
ReactAgent |
agent/ReactAgent.java |
ReAct智能体 |
BaseAgent |
agent/BaseAgent.java |
Agent基类 |
AgentLlmNode |
agent/node/AgentLlmNode.java |
LLM节点 |
AgentToolNode |
agent/node/AgentToolNode.java |
工具节点 |
Hook |
agent/hook/Hook.java |
Hook接口 |
ModelInterceptor |
agent/interceptor/ModelInterceptor.java |
模型拦截器 |
A.3 检查点与序列化
| 类名 | 路径 | 职责 |
|---|---|---|
BaseCheckpointSaver |
checkpoint/BaseCheckpointSaver.java |
检查点存储接口 |
MemorySaver |
checkpoint/savers/MemorySaver.java |
内存存储 |
StateSerializer |
serializer/StateSerializer.java |
序列化接口 |