大家好,我是大志。
如果说 LangChain 是 AI Agent 的基础开发框架,那么 LangGraph 就是目前企业级 Agent 应用最主流的工作流编排框架。
随着 AI Agent 的发展,越来越多的企业开始采用 LangGraph 来构建复杂的 Agent 系统。因此,在 AI Agent 面试中,LangGraph 相关问题的出现频率也越来越高,尤其是 State、Node、Edge、Checkpoint、Human-in-the-loop、多 Agent 协作等知识点,几乎都是面试官重点考察的内容。
这篇文章就和大家一起系统梳理 LangGraph 的核心概念和工程实践,希望能帮助大家更好地理解 LangGraph。
另外,完整的 AI Agent 面试题文档也已经同步到了 aiflowline.cn,大家可以结合文章一起阅读。
1、LangGraph解决了什么问题?
LangChain在面对复杂的业务场景时,会遇到以下几个问题:
执行流程不可控:通过
create_agent创建的Agent执行流程是黑盒的,开发者很难修改和调整执行路径。无法处理复杂逻辑:当Agent的逻辑变得复杂后,可能会有多个分支、循环,无法构建复杂的业务流程。
不支持持久执行:如果Agent执行到一半失败了,只能从头开始重新执行,无法从失败的地方恢复继续。
不支持人工介入:在某些关键步骤(如转账、扣款),需要人工确认后才能继续。
LangGraph 就是为了解决这些问题而诞生的。它是一个基于图结构的Agent编排框架,通过图来管理Agent的执行流程。

LangGraph解决了上述问题:
流程可视化:用图结构描述执行流程,整个执行流程非常清晰 支持处理复杂逻辑:通过定义节点、边、条件边控制分支结构 持久执行:通过 Checkpoint机制,支持断点恢复人工介入:通过 interrupt/resume,支持Human-in-the-Loop
2、LangGraph中的State是什么?
State(状态) 是 LangGraph 中所有节点的共享数据,定义了图运行过程中需要传递和更新的数据,State一般用于短期记忆。LangGraph 提供了一个 MessagesState,继承了 TypedDict,内部定义了消息列表,如果我们想自定义 State 可以继承 MessagesState。
classMessagesState(TypedDict): messages: Annotated[list[AnyMessage], add_messages]State 中的每个字段都可以指定一个归纳函数,决定了当节点返回数据时,是覆盖还是追加。不指定归纳函数,节点返回的数据会直接覆盖原数据;**指定 operator.add**,节点返回的数据会追加到原数据后面。
# 不指定归纳函数 → 覆盖classState(TypedDict): result: str # 每次节点返回都会覆盖# 指定operator.add → 追加classState(TypedDict): result: Annotated[list[str], operator.add] # 每次节点返回都会追加每个节点函数都可以接收 State 作为参数,并读取 State 中的数据,通过返回值对字段进行更新。
defmy_node(state: MessagesState):# 读取State中的消息列表 messages = state["messages"]# 处理逻辑...# 返回需要更新的字段,`LangGraph`会自动合并到State中return {"messages": [new_message]}3、LangGraph中的Node是什么?
Node(节点)是 LangGraph 中最基本的执行单元,本质上就是一个处理 State 的 Python 函数。
它接收当前状态(State)作为输入,执行相应逻辑后返回状态更新结果,LangGraph 会自动将返回结果合并到全局 State 中。
defchatbot(state): response = model.invoke(state["messages"])return {"messages": [response] }添加 Node:
graph.add_node("chatbot", chatbot)其中:
state:LangGraphState数据chatbot:Node的具体实现返回值:需要更新的状态数据
Node 节点可以负责调用 LLM、调用 Tool、RAG 检索、数据处理、条件判断等工作,在 LangGraph 中,State 负责存储数据,Node 负责处理数据,多个 Node 通过 Edge(边)连接后组成完整的 LangGraph 工作流。
4、LangGraph中的Edge是什么?
Edge(边)用于连接 Node 节点,通过边来决定工作流的执行顺序和执行路径。
添加边的方法如下,当 chatbot 节点执行完成后,会自动执行 tool 节点。
graph.add_edge("chatbot", "tool")除了普通 Edge 之外,LangGraph 还支持条件边(Conditional Edge),示例如下:在条件边的路由函数中,判断是否需要执行工具,如需要,则返回 tool,执行 tool 节点,否则返回 END,执行结束节点。
graph.add_conditional_edges("chatbot", route)defroute(state):if need_tool:return"tool"return END所以,Edge 的核心作用是定义 Node 之间的执行顺序和执行路径,通过条件边实现条件分支和循环执行。
5、Checkpoint的作用是什么?
Checkpoint(检查点)用于持久化保存 State,让 LangGraph 拥有记忆能力。
当图执行到某个节点时,LangGraph 会自动将当前 State 保存到 Checkpoint 中。如果程序中断、重启或需要继续执行,可以从上次保存的位置恢复,而不需要重新开始。
例如:
from langgraph.checkpoint.memory import InMemorySavercheckpointer = InMemorySaver()builder = StateGraph(State)graph = builder.compile( checkpointer=checkpointer)执行过程中,State 会被自动保存:
{"messages": [...],"user_info": {...}}下次使用相同的 thread_id 调用时,LangGraph 会自动恢复之前的 State,实现多轮对话记忆。
config = {"configurable": {"thread_id": "user_001" }}Checkpoint 的主要作用:
持久化保存 State实现短期记忆 支持断点执行( Resume)支持 Human-in-the-loop(人在环路)支持长时间运行的 Agent 工作流
6、LangGraph如何实现断点恢复?
LangGraph 通过 Checkpoint(检查点)机制来实现断点恢复。
工作流运行过程中,LangGraph 会自动将当前 State 数据保存到 Checkpointer 中。当程序异常退出、服务重启或执行中断后,通过相同的 thread_id 恢复之前保存的状态,并从中断位置继续执行。
示例如下:
graph = builder.compile( checkpointer=InMemorySaver())config = {"configurable": {"thread_id": "user_001" }}第一次执行:
graph.invoke( {"messages": [HumanMessage("你好")]}, config=config)程序重启后再次执行:
graph.invoke( {"messages": [HumanMessage("继续刚才的话题")]}, config=config)因为使用了相同的 thread_id,LangGraph 会自动从 Checkpoint 中恢复之前保存的 State,而不是从头开始执行。
Checkpoint 不仅保存 State,还会保存当前图的执行快照,包括下一步待执行的节点信息。因此恢复时不仅能恢复数据,还能恢复执行进度,从上次中断的位置继续执行。
7、LangGraph如何实现循环执行?
LangGraph 通过 条件边回到之前的节点 来实现循环执行,本质上就是在图中形成一个环(Loop)。
在实际场景中,通过条件边(Conditional Edge)控制循环何时结束,比如当 LLM 判断需要继续调用工具时,执行 tool 节点,工具执行完再回到 agent 节点;当任务完成时直接返回 END,执行结束节点停止循环。
graph.add_conditional_edges("agent", should_continue)defshould_continue(state):if state["need_tool"]:return"tool"return END为什么需要循环执行呢?因为在很多 Agent 场景中,LLM 往往需要多轮思考,本质上都依赖循环执行机制。
例如:
ReAct Agent Tool Calling Agent RAG 检索增强 多步任务规划
8、LangGraph如何实现多Agent协作?
LangGraph 中的多 Agent 协作,本质上是将多个 Agent 作为不同的 Node 节点,通过共享的 State 和 Edge 连接起来共同完成任务。
例如:
graph.add_node("planner", planner_agent)graph.add_node("researcher", researcher_agent)graph.add_node("writer", writer_agent)graph.add_edge("planner", "researcher")graph.add_edge("researcher", "writer")其中:Planner Agent 负责任务规划,Researcher Agent 负责信息检索,Writer Agent 负责内容生成,多个 Agent 共享同一个 State。
classState(TypedDict): task: str research_result: str final_answer: str还可以使用 Conditional Edge 动态路由,来决定执行哪个 Agent。
graph.add_conditional_edges("planner", route_agent)9、LangGraph和AutoGen有什么区别?
LangGraph 和 AutoGen 都可以用于构建 AI Agent 应用,但两者的设计理念不同。LangGraph 更关注工作流编排,AutoGen 更关注多 Agent 协作。LangGraph 执行过程由图结构控制,开发者需要明确设计执行流程。AutoGen 基于 Agent 对话,多个 Agent 通过消息传递协作完成任务。
在流程管理上:
LangGraph 支持条件分支、循环执行、状态持久化、 Human-in-the-loop、断点恢复。AutoGen 流程主要依赖 Agent 之间的对话,控制逻辑更多由 Agent 自主决定,复杂流程的可控性弱于 LangGraph。
在状态管理上:
LangGraph 拥有统一的 State,所有节点共享同一个状态对象。AutoGen 每个 Agent 维护自己的消息历史,状态管理相对分散。
在多 Agent 支持上:
LangGraph 支持多 Agent,但不是核心设计目标,通常把 Agent 当作 Node。AutoGen 把多 Agent 当成核心能力,天然适合 Agent 间协作和讨论。
在使用场景上:
LangGraph 更适合企业级 Agent、长流程任务。 AutoGen 适合实验项目、Agent 研究、多智能体探索。
10、LangGraph和CrewAI有什么区别?
LangGraph 更关注工作流编排,CrewAI 更关注多 Agent 角色协作。
在核心模型上:
LangGraph 基于 State Graph(状态图),由 State、Node、Edge构成,执行过程由图结构控制,开发者需要明确设计执行流程。CrewAI 基于 Role + Task + Crew(角色与任务),通过定义不同 Agent 角色和任务分工,由框架自动完成协作调度。
在流程管理上:
LangGraph 支持条件分支、循环执行、 Checkpoint状态持久化、Human-in-the-loop、断点恢复等能力,流程可控性非常强。CrewAI 支持顺序执行(Sequential)和层级执行(Hierarchical),整体流程更偏自动化编排,复杂流程控制能力弱于 LangGraph。
在状态管理上:
LangGraph 拥有统一的 State,所有 Node共享同一个状态。CrewAI 主要依赖 Task 输出传递,上一任务输出作为下一任务输入,状态管理相对分散,没有统一全局 State。
在多 Agent 支持上:
LangGraph 支持多 Agent,但本质是把 Agent 当作 Node来编排,多个 Agent 如何协作由开发者实现。CrewAI 多 Agent 是核心能力,通过角色分工(如 Researcher、Writer、Reviewer)天然支持团队式协作。
在适用场景上:
LangGraph 更适合:企业级 Agent、 Tool Calling、RAG 工作流、长流程任务、复杂业务编排。CrewAI 更适合:多角色内容生产、市场调研、写作协作等场景。
好啦,今天这期 LangGraph 面试题就到这里。后面我会每周至少更新1期面试题系列,想看后续 【AI Agent 进阶面试题】 的朋友,欢迎关注「大志说编程」!
觉得有用的话,转发给正在面试的小伙伴,咱们下期见~
往期回顾