文章目录
- Pre
- 背景:为什么要上 Graph?
- 项目结构:按真实工程拆分
- 订单助手 Graph 设计:从多 Agent 视角出发
- 业务场景回顾
- Graph 拆分为节点
- 实战:定义 OverAllState 与 Graph
- 定义 OverAllState
- 构建 StateGraph
- 节点实现:把 Agent 融入 Graph
- 1. 入口节点 EntryNode
- 2. 意图路由节点 IntentRouterNode
- 3. 条件边分发器 IntentRouteDispatcher
- 4. 商品 Agent 节点 ProductAgentNode
- 对外暴露:Controller 触发 Graph 执行
- 工程落地经验:从 Demo 到生产
- 1. 按模块拆分职责
- 2. Graph 与多智能体的演进路径
- 3. 与治理 / 观测体系集成
- 小结
- 扩展阅读
- 一、Spring AI Alibaba Graph(核心概念 & 官方实现)
- 二、Spring AI 多 Agent / 编排(Orchestrator & Workflow)
- 三、Spring AI Alibaba **实践 & 教程
- 四、Graph / Agent 原理解析 & 深度解读(中文社区)
- 五、阿里云 / 企业级案例 & 生态视角

LLM - 从生成式到 Agentic (Java技术栈)
- StateGraph:整张「订单助手」流程图,描述有哪些节点、怎么跳转。
- Node:一个节点就是一个「步骤」,例如意图识别、商品咨询 Agent、订单查询 Agent、退款 Agent 等。
- Edge:节点间的连线,可以是固定跳转,也可以是根据上下文条件路由。
- OverAllState:全局状态,贯穿整个流程,存放用户输入、上下文、中间结果等。
这样做的好处是:
- 业务逻辑从 if-else 中抽离出来,以图结构可视化管理。
- 支持多智能体协作、并行节点和条件边,后续要加新 Agent 只需加节点和边。
- 原生支持 streaming、Human-in-the-loop、快照与恢复,适合企业级智能体系统。
示例采用 Maven 多模块结构,参考官方与社区**实践,将 AI 能力与业务工程解耦。
springai-order-assistant/ ├── ai-starter/ # 封装 Spring AI Alibaba & Graph 的通用配置 ├── ai-graph-order/ # 本文核心:订单助手 StateGraph + Nodes 实现 ├── ai-domain/ # 领域模型与仓储(Order、Product 等) ├── ai-web/ # REST Controller,对外的 HTTP API └── pom.xml # 父工程
- ai-starter:统一引入 Spring AI Alibaba 依赖、模型配置、日志与监控等。
- ai-graph-order:只关心「订单助手这张图」,包含 StateGraph、节点实现与状态定义。
- ai-domain:普通领域模块,负责订单、商品等数据访问,与 AI 解耦。
- ai-web:Spring Boot Web 启动入口 + Controller,接收用户请求并触发图执行。
订单助手要解决三类需求:
- 商品咨询:用户问「这款耳机支持降噪吗?」
- 订单查询:用户说「查一下我上次买的耳机能不能退」
- 退货退款:用户想执行「帮我退掉昨天那单」
对应之前的四个 Agent 角色:
- OrchestratorAgent:理解意图并路由。
- ProductAgent:商品问答 / 推荐。
- OrderAgent:订单查询。
- RefundAgent:退款判断与创建。
在 Graph 版本中,这四个角色将对应 4 个主要节点,外加 1 个入口节点与 1 个结束节点,构成一张简单而清晰的状态图。
用 Spring AI Alibaba Graph 的术语,可以设计如下节点:
-
entry:入口节点,初始化全局状态(如 userId、原始输入)。 -
intent_router:意图识别节点,决定走 PRODUCT / ORDER / REFUND 分支。 -
product_agent:商品咨询 Agent 节点。 -
order_agent:订单查询 Agent 节点。 -
refund_agent:退款 Agent 节点。 -
end:结束节点,返回最终回复。
图上的边关系为:
- entry → intent_router
- intent_router → product_agent / order_agent / refund_agent / end(条件边)
- product_agent / order_agent / refund_agent → end
在真实项目中,只要 OverAllState 设计合理,后面要加「人工校验节点」「日志审计节点」「风控节点」都可以通过新增 Node+Edge 实现。
OverAllState 是整条工作流共享的状态,一般包括:
- userId、sessionId
- 用户原始输入与模型回复
- 意图识别结果(route)
- 各 Agent 的中间结果(订单列表、退款条件判断等)
示例代码(放在 ai-graph-order 模块):
@Data public class OrderAssistantState {
// 上下文字段 private String userId; private String sessionId; // 本轮输入与最终输出 private String userInput; private String finalReply; // 路由结果:PRODUCT / ORDER / REFUND / UNKNOWN private String route; // 中间结果:订单、退款判断等 private List
orders; private boolean refundable;
}
在 Graph 执行过程中,所有节点对状态的修改都会写回 OverAllState,确保后续节点可以复用信息。
使用 Spring AI Alibaba Graph 的 StateGraph 定义节点和边。
@Configuration public class OrderAssistantGraphConfig }
这里使用了同步 node 与异步 node_async,对于需要调用外部服务或 LLM 的 Agent 节点,推荐异步以提高吞吐。
负责从 HTTP 请求参数构建初始状态。
@Component public class EntryNode implements Node
{
@Override public OrderAssistantState apply(OrderAssistantState state) { // 一般通过外层传入已有 state,这里可以做一些初始化 // 例如:写入时间戳、初始化列表等 return state; }
}
实际项目里通常由外层 Controller 构造好 state,再交给 Graph 执行,EntryNode 可以留空或作为「预处理」节点。
对应之前 Orchestrator 里那段「只返回 PRODUCT / ORDER / REFUND」的逻辑,这里做成一个独立 Node。
@Component public class IntentRouterNode implements Node
{
private final ChatModel chatModel; public IntentRouterNode(ChatModel chatModel) { this.chatModel = chatModel; } @Override public OrderAssistantState apply(OrderAssistantState state)
}
Graph 执行到这里后,不直接决定下一个节点,而是交给条件边上的 IntentRouteDispatcher 来根据 route 决定跳转目标。
public class IntentRouteDispatcher implements EdgeDispatcher
;
}
}
配合前面的 addConditionalEdges 使用,使得 intent_router 节点可以被复用于更多复杂路由,而不是在节点内部写死 if-else。
这里直接复用前文 ProductAgent 的核心逻辑,把它包装成一个 Node,注意从 state 中拿 userInput,并把结果写回 state.finalReply。
@Component public class ProductAgentNode implements Node
@Override public OrderAssistantState apply(OrderAssistantState state)
}
同理,实现 OrderAgentNode 与 RefundAgentNode 时,只需要替换工具集与 System Prompt,同时可在 state 中填充订单列表与退款判断结果以供后续节点使用。
Graph 本身只是一个可以被调用的「状态机」,需要一个入口来接收 HTTP 请求、构造初始状态并执行 Graph。
在 ai-web 模块中定义 Controller:
@RestController @RequestMapping(“/api/order-assistant”) public class OrderAssistantController
@PostMapping("/chat") public ResponseEntity
chat(@RequestBody ChatRequestDto request)
}
-
StateGraphExecutor封装了 Graph 的执行流程与状态序列化 / 反序列化。 - 每次调用都会从入口节点开始,根据节点逻辑与条件边推进,直到 END。
- 最终通过
finalReply字段返回字符串响应,前端可以直接展示。
- Graph 与节点只负责「流程与智能体」,不直接依赖 Web、数据库细节。
- 领域模块(ai-domain)负责订单、商品、用户等实体与仓储。
- ai-starter 中统一管理模型、工具与监控配置,避免在每个业务模块重复引入依赖。
这种分层有利于:
- 后续增加新的 Graph(如客服助手、营销 Agent)时复用 Starter 与领域模块。
- 把 Graph 部分抽象成「AI 能力中台」,供多个业务线共享。
- 第一阶段:像本文这样,将之前单工程 Orchestrator 重构为 Graph,保持 Agent 逻辑基本不变。
- 第二阶段:引入并行节点(ParallelNode),例如同时查询多个业务系统或同时跑多个推荐策略。
- 第三阶段:加 Human-in-the-loop 节点,让关键步骤(如退款审批)必须经过人工确认后再继续。
- 第四阶段:配合 Spring AI Alibaba Admin 或自研控制台,对 Graph 的配置、版本与监控进行可视化管理。
- 在 Graph 层统一注入 TraceId / SpanId,利用阿里云或自建链路追踪体系做全链路观测。
- 为每个节点打点:包括 LLM 调用次数、平均成本、错误率,支持按节点与按 Graph 分析瓶颈。
- 对敏感节点(如 RefundAgentNode)增加审计日志与强制 HITL,避免业务风险。
这一组是Graph / Agent 编排的中枢知识源:
- Spring AI Alibaba Graph 官方介绍
https://java2ai.com/docs/1.0.0.2/tutorials/graph/whats-spring-ai-alibaba-graph/ - Spring AI Alibaba Graph 源码(官方)
https://github.com/alibaba/spring-ai-alibaba/tree/main/spring-ai-alibaba-graph - Spring AI Alibaba Graph Issue & 设计讨论
https://github.com/alibaba/spring-ai-alibaba/issues/1251https://github.com/alibaba/spring-ai-alibaba/labels/area%2Fgraph - 阿里系 Graph 相关深度文章(CNBlogs)
https://www.cnblogs.com/alisystemsoftware/p/https://www.cnblogs.com/alisystemsoftware/p/https://www.cnblogs.com/alisystemsoftware/p/
这组回答的是:Agent 如何分工?如何调度?如何协作?
- Spring AI Orchestrator / Worker / Workflow 指南
https://bootcamptoprod.com/spring-ai-orchestrator-workers-workflow-guide/ - Spring AI 多 Agent 实战(Azure Cosmos DB)
https://devblogs.microsoft.com/cosmosdb/building-multi-agent-ai-apps-in-java-with-spring-ai-and-azure-cosmos-db/ - 多 Agent 示例代码(微软官方)
https://github.com/AzureCosmosDB/multi-agent-spring-ai
偏工程落地 + 实战经验,非常适合你这种偏架构视角的人:
- Spring AI Alibaba Best Practices(代码仓库)
https://github.com/hllqkb/Spring-AI-Ailibaba-Best-Practices - Spring AI 教程合集(GTyingzi)
https://github.com/GTyingzi/spring-ai-tutorial - Spring AI Alibaba 综合教程
https://www.hxstrive.com/subject/spring_ai/3478.htm
适合写“为什么要 Graph?”、“和传统流程引擎有什么本质区别?”
偏企业实践、平台化思路:
- 阿里云开发者社区(Spring AI 相关)
https://yqh.aliyun.com/detail/26692https://sca.aliyun.com/blog/case/ - 今日头条技术解读
https://www.toutiao.com/article//

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/251368.html