简介:本文围绕Spring AI Alibaba 1.1版本中的Graph与Agent Framework两层能力展开对比分析,从架构定位、功能边界、适用场景、开发复杂度、运维成本等维度系统梳理二者差异,帮助开发者、技术负责人和架构师在构建企业级多智能体应用时做出更清晰的选型判断,避免盲目引入不必要的抽象层级。
2025年11月,Spring AI 1.1.0 GA版本发布,紧随其后,Spring AI Alibaba 1.1版本正式推出。这一版本被业界视为企业级、生产就绪的AI智能体应用进入新阶段的重要标志。官方宣称只需不到10行代码即可启动一个智能体应用,同时对Multi-agent协作和Workflow工作流编排提供了更强大的支持。
然而,在实际项目落地过程中,一个高频问题随之出现:Spring AI Alibaba中的Graph和Agent Framework到底有什么区别?我该在什么场景下直接用Agent Framework,什么场景下需要下沉到Graph层?Graph真的有必要学吗?
这个问题的本质,不是“要不要学某个API”,而是在构建复杂AI应用时,如何选择正确的抽象层级。选错了层级,轻则导致代码过度设计,重则让系统难以维护、难以扩展。本文将从架构设计出发,结合典型场景,对这两层能力进行系统性拆解与对比。
Agent Framework是Spring AI Alibaba中面向开发者的核心编程入口。它以ReactAgent设计理念为中心,内置了自动上下文工程(Automatic Context Engineering)、Human In The Loop等高级能力。
从使用体验来看,Agent Framework追求的是“意图驱动”的开发模式。开发者关注的是“这个智能体要完成什么任务、具备什么工具、遵循什么推理逻辑”,而不需要关心底层节点如何调度、消息如何在节点之间流转。简单来说,Agent Framework回答的问题是:“如何最快地构建一个能干活、能推理、能调用工具的智能体。”
Graph则是一个更底层的工作流和多代理协调框架。按照官方架构说明,Graph是Agent Framework的底层运行时基座,用于实现复杂的工作流编排,同时对用户开放API。
Graph的核心抽象是节点(Node)与边(Edge)。开发者通过定义节点的执行逻辑和节点之间的流转条件,显式地控制整个系统的执行路径。Graph回答的问题是:“当多个智能体或多个处理步骤需要以确定性的顺序、条件分支、并行或循环方式协作时,如何精确编排它们。”
在深入差异之前,必须先澄清一个常见误解:Graph和Agent Framework不是二选一的竞争关系,而是分层协作关系。
相同点主要体现在以下几个方面:
第一,共享同一套底层能力。无论使用Agent Framework还是直接操作Graph,最终都基于Augmented LLM层提供的模型、工具、消息、向量存储等原子抽象。这意味着模型接入方式、工具注册机制、消息格式在两者之间是打通的。
第二,服务于同一个目标。两者的最终目标都是构建能够完成复杂任务的AI应用系统,区别只在于抽象层级和控制粒度。
第三,技术栈同源。它们都运行在Spring Boot生态之上,复用Spring的依赖注入、配置管理、可观测性等基础设施能力。对于熟悉Spring体系的团队而言,学习曲线起点相同。
Agent Framework是“自驱动”模式。 它基于ReactAgent的思考-行动-观察循环,让大模型自主决定下一步调用哪个工具、是否继续推理、何时产出最终结果。开发者通过配置系统提示词、工具列表和终止条件来约束行为,但具体执行路径由模型动态生成。
Graph是“显式编排”模式。 开发者需要预先定义状态流转图,明确每个节点的职责、节点间的有向边以及触发条件。执行路径在运行前已经确定,模型只在特定节点内参与决策。
这一差异的核心影响在于:Agent Framework适合目标明确但路径灵活的任务,Graph适合流程明确且需要确定性控制的任务。
| 能力维度 | Agent Framework | Graph |
|---|---|---|
| 自动推理循环 | 内置React循环 | 需手动实现循环逻辑 |
| 上下文工程 | 自动管理 | 需手动设计状态传递 |
| Human In The Loop | 框架级支持 | 需通过节点定义实现 |
| 条件分支 | 由模型动态决定 | 显式定义条件边 |
| 并行执行 | 需要额外配置 | 原生支持并行节点 |
| 循环控制 | 由推理逻辑驱动 | 显式定义循环条件 |
| 动态路由 | 模型自主决策 | 需要编程实现路由逻辑 |
| 可观测粒度 | 智能体级别 | 节点级别 |
使用Agent Framework构建一个基础ChatBot,从代码量来看确实可以在10行以内启动。以官方示例为例,核心配置包括:注入ChatClient、声明工具方法、创建ReactAgent实例,然后即可发起对话。框架自动管理消息历史、工具调用结果回填、上下文裁剪等细节。
而使用Graph实现同样的功能,则需要至少定义以下内容:一个负责调用模型的节点、一个负责执行工具的节点、一个判断是否需要继续的条件边、以及节点间的状态传递结构。代码量可能是Agent Framework的3到5倍。
但这并不意味着Agent Framework在所有场景下都更优。当系统的执行逻辑需要精确审计、严格按序执行或涉及多个独立子流程时,Graph的显式性反而降低了理解和调试成本。
Agent Framework的自动上下文工程在简化开发的同时,也带来一个副作用:开发者对上下文内容的精确控制力下降。在某些需要严格控制提示词内容、裁剪策略、注入时机的高级场景中,框架的默认行为可能不满足要求。
Graph则要求开发者自己管理状态对象在节点间的传递。这意味着更大的开发工作量,但换来了完全可预测的上下文内容。在涉及敏感数据过滤、多租户数据隔离、审计日志记录等场景中,显式状态管理往往是刚需。
Agent Framework对智能体的执行过程提供了一定程度的可视化支持,比如可以在控制台看到工具调用和推理过程。对于排查“模型为什么做出某个决策”的问题,这种智能体级日志是有效的。
Graph层则提供了更细粒度的调试能力。由于每个节点的输入输出都是显式定义的,开发者可以在节点边界设置断点、记录中间状态、甚至对单个节点进行单元测试。在需要高可靠性的生产系统中,这种节点级可观测性是重要优势。
在实际生产中,最常见的架构是Agent Framework构建单体智能体,Graph负责编排多个智能体。例如,一个客服系统可能包含:一个基于Agent Framework构建的意图理解智能体、一个订单查询智能体、一个人工转接判断节点。这些组件通过Graph编排为一个完整的工单处理流程。这种分层方式兼顾了开发效率与流程可控性。
基于上述分析,给出以下条件化判断:
如果您的系统具有以下特征,建议从Agent Framework入手,仅在需要时下沉到Graph:
如果您的系统具有以下特征,建议从一开始就基于Graph进行架构设计:
需要特别注意的是,从Agent Framework迁移到Graph通常不是简单的代码替换,而是涉及执行模型的重新设计。如果项目预期未来会走向复杂Multi-agent协作,建议在早期阶段就评估Graph的学习成本,避免后期重构。
当单体智能体逐渐膨胀,出现“一个Agent承担太多职责、工具列表过长、上下文频繁溢出、行为难以预测”等信号时,就需要考虑向Graph架构演进。
演进过程中需要注意:
第一,智能体拆分策略。将一个大型Agent拆分为多个职责单一的小型Agent时,需要重新设计提示词、工具集和输出格式,确保拆分后的每个Agent都能独立完成任务边界内的职责。
第二,状态传递设计。Graph中的状态对象是显式的,需要提前规划哪些字段在哪些节点间传递,避免出现状态字段膨胀或遗漏。
第三,错误处理策略。Agent Framework中,模型可以自行尝试从错误中恢复。在Graph中,错误恢复逻辑需要显式定义,包括节点失败后的重试策略、降级路径和告警触发条件。
Agent Framework的自动上下文工程在迁移到Graph后不再自动生效。开发者需要在Graph的状态设计中手动实现以下能力:对话历史摘要、过期消息裁剪、系统提示词模板填充、工具结果压缩。这些能力不影响业务逻辑正确性,但直接影响最终输出质量和Token消耗。
在Agent Framework阶段,日志分析和调试主要围绕单个智能体的推理过程。在Graph阶段,需要建立节点级的监控指标体系,包括节点执行时长、节点失败率、条件边的选择分布、状态对象大小等。这些指标对于后续的容量规划和性能调优至关重要。
回到最初的问题:Graph真的有必要学吗?
答案是:取决于您要构建的系统的复杂度上限,而非当前需求。
如果您的AI应用在可预见的未来始终保持“单一智能体+多个工具”的形态,那么Agent Framework已经足够,Graph的学习优先级可以调低。但如果您正在规划或已经面临Multi-agent协作、确定性流程编排、人机协同审批、复杂条件路由等需求,那么Graph不仅是“有必要学”,而且是架构设计层面必须掌握的能力。
更准确地说,Graph与Agent Framework的关系类似于“编程语言中的高阶函数与底层循环控制”的关系——前者让常见任务写得更快,后者让你在需要时不被框架限制住。理解两者的边界,才能在合适的场景选择合适的工具,构建出既高效又可维护的企业级AI智能体应用。