LangGraph 将 Agent 工作流建模为有向图,由节点(Node)、边(Edge)和状态(State)三个基本元素构成。与传统的有向无环图(DAG)不同,LangGraph 的图支持循环,这使得 Agent 可以在多个节点之间反复流转,实现迭代推理、工具调用循环等复杂行为。图的执行采用消息传递算法,受 Google Pregel 系统和 Apache Beam 启发,以离散的"超级步"(super-step)为单位推进:每个超级步中,所有收到消息的节点并行执行,执行完毕后向下游发送更新,下一超级步根据新的消息决定哪些节点继续运行,直到所有节点进入停滞状态。
节点是图中的计算单元,本质上是接收当前状态、执行操作并返回状态更新的 Python 函数。一个节点可以调用大语言模型、执行工具、查询数据库或运行任意业务逻辑。边定义节点之间的连接和执行顺序,分为无条件边和条件边两种:无条件边表示固定的执行路径,条件边则通过路由函数根据当前状态动态决定下一个节点。状态是一个共享的 typed 数据结构(通常用 TypedDict 或 Pydantic 模型定义),贯穿整个图的执行过程,所有节点都可以读取和写入状态。
LangGraph 使用 StateGraph 类作为主要构建器,开发者依次添加节点、边和检查点配置后,调用 .compile() 方法将图编译为可执行对象。编译过程会进行结构校验(如检测孤立节点),并将运行时参数(如 checkpointer、断点配置)绑定到图中。编译后的图实现了 Runnable 接口,支持 invoke()、stream()、ainvoke()、astream() 等多种调用方式。
LangGraph 虽然可以与 LangChain 深度集成,利用其丰富的模型和工具组件,但它并不依赖 LangChain,可以独立使用。在 LangChain 的产品体系中,LangChain 提供模型和工具的抽象与集成,LangGraph 负责编排运行时(持久执行、流式输出、人机协同),LangSmith 提供追踪、评估和部署平台,三者各司其职又无缝协作。