学了Spring AI Graph再看LangGraph,发现API几乎一模一样
2026/6/8 2:03:29 网站建设 项目流程

Java开发者看LangGraph文档最痛苦的不是概念难,而是同一个东西换了名字。本文6张对照表+代码对比,帮你5分钟打通两个框架。


先说结论

LangGraph和Spring AI Graph,底层模型完全一样:有向图 + 共享状态 + 节点执行 + 边路由。甚至StateGraph这个类名都一样。

真正的差异只有两处:

  1. 术语不同:Reducer→KeyStrategy,TypedDict→OverAllState
  2. 语言表达不同:Python用装饰器/字典,Java用Builder/Map

这篇文章把这两处差异一次性讲清楚。


一、状态管理:术语差异最大

这是最容易搞混的部分。

概念LangGraph (Python)Spring AI Graph (Java)
状态定义TypedDict+AnnotatedOverAllState+KeyStrategy
状态追加Annotated[list, operator.add]KeyStrategy.APPEND
状态覆盖不加注解的字段KeyStrategy.REPLACE

Python版:

class AgentState(TypedDict): messages: Annotated[list, operator.add] # 追加 next_action: str # 覆盖

Java版:

KeyStrategyFactory factory = KeyStrategyFactory.builder() .keyStrategy("messages", KeyStrategy.APPEND) .keyStrategy("nextAction", KeyStrategy.REPLACE) .build(); StateGraph graph = new StateGraph(factory);

本质一样:追加还是覆盖,就是Reducer/KeyStrategy要解决的事。


二、节点与边:API比想象中更像

概念LangGraphSpring AI Graph
添加节点add_node("name", fn)addNode("name", AsyncNodeAction.node_async(fn))
普通边add_edge("a", "b")addEdge("a", "b")
起始边add_edge(START, "a")addEdge(START, "a")
条件边add_conditional_edges(src, fn, map)addConditionalEdges(src, AsyncEdgeAction.edge_async(fn), map)
并行分叉多次add_edge(START, "a")addEdge(START, List.of("a", "b"))
并行汇聚add_edge(["a","b"], "c")addEdge(List.of("a","b"), "c")

注意看:addNode/addEdge/addConditionalEdges,连方法名都只差下划线和驼峰

条件边对比

Python:

workflow.add_conditional_edges( "reviewer", route_decision, {"continue": "planner", "done": END, "retry": "executor"} )

Java:

graph.addConditionalEdges( "reviewer", AsyncEdgeAction.edge_async(routeDecision), Map.of("continue", "planner", "done", END, "retry", "executor") );

映射逻辑完全一致,Java只是多了AsyncEdgeAction的异步包装。

并行写法差异

Python并行分叉需要多次连边:

workflow.add_edge(START, "code_check") workflow.add_edge(START, "style_check") workflow.add_edge(["code_check", "style_check"], "merge")

Java可以一步传List:

graph.addEdge(START, List.of("codeCheck", "styleCheck")); graph.addEdge(List.of("codeCheck", "styleCheck"), "merge");

Java这边反而更简洁。


三、持久化与恢复:几乎一致

概念LangGraphSpring AI Graph
内存检查点MemorySaver()InMemoryCheckpointSaver
数据库检查点PostgresSaver(conn)自定义实现
编译时启用compile(checkpointer=...)compile(config)
获取/恢复状态get_state()/update_state()getState()/updateState()

两边都是Pregel模型的标准实现,命名和用法几乎一致。


四、人机交互:Python更灵活

概念LangGraphSpring AI Graph
中断interrupt(value)interruptsBefore/interruptsAfter
恢复Command(resume=...)继续调用invoke

Python的interrupt()可以在节点函数内部随时中断,Java目前需要在编译时声明中断点。这是Java版目前的一个局限。


五、ReAct Agent写法

LangGraph:一行搞定

from langgraph.prebuilt import create_react_agent agent = create_react_agent(model, tools, checkpointer=MemorySaver())

Spring AI Graph:两种方式

简单场景用ChatClient:

var chatClient = ChatClient.builder(chatModel) .defaultTools(toolCallbackProvider) .build();

复杂场景用Graph编排:

StateGraph graph = new StateGraph(factory); graph.addNode("llm", AsyncNodeAction.node_async(llmNode)); graph.addNode("tool", AsyncNodeAction.node_async(toolNode)); graph.addEdge(START, "llm"); graph.addEdge("llm", "tool"); graph.addConditionalEdges("tool", AsyncEdgeAction.edge_async(routeNode), Map.of("continue", "llm", "done", "end")); graph.addEdge("end", END);

选型原则:简单工具调用用ChatClient,需要多步编排/人工介入才用Graph。


六、术语速查表

LangGraph Spring AI Graph ────────── ────────────── StateGraph ↔ StateGraph(同名!) TypedDict ↔ OverAllState Annotated + Reducer ↔ KeyStrategy add_node() ↔ addNode() + AsyncNodeAction add_edge() ↔ addEdge() add_edge()×N (fan-out) ↔ addEdge(src, List.of(...)) add_edge([...], tgt) ↔ addEdge(List.of(...), tgt) add_conditional_edges() ↔ addConditionalEdges() + AsyncEdgeAction compile() ↔ compile() MemorySaver ↔ InMemoryCheckpointSaver PostgresSaver ↔ 自定义CheckpointSaver interrupt() ↔ interruptsBefore/After Command(goto=) ↔ 条件路由 create_react_agent() ↔ ChatClient + Tools LangSmith ↔ Micrometer + OTel

选型建议

场景选LangGraph选Spring AI Graph
团队技术栈PythonJava/Spring
可观测性LangSmith深度集成Micrometer + OTel
企业级部署需自建Spring安全体系天然支持
和业务集成需跨语言直接融入Spring微服务
生态丰富度LangChain生态最全快速追赶中

Java开发者的现实问题:用Python写Agent、Java写业务,两套代码库维护成本翻倍。Spring AI Graph的价值就是——不换语言,做同样的事。

但核心观点是:框架只是实现,图状态机这个模型才是本质。理解了模型,换框架只是API转换。


参考资料:

  • LangGraph 官方文档(langchain-ai/langgraph,2026)
  • Spring AI Alibaba Graph 源码(alibaba/spring-ai-alibaba,2026)
  • Spring AI Alibaba Graph 并行节点文档(java2ai.com)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询