目录

LangGraph要解决的根本问题

LLM是无状态的,但真实任务是有状态的

 Agent的行为本质不是线性的

控制逻辑不能藏在Prompt里

LangGraph的核心抽象

为什么State是LangGraph的核心

State是唯一的真相源

Node 只能返回“状态增量”

Graph为什么一定要是显式图

Edge 本质是状态转移规则

        普通边(确定执行)

        条件边(状态驱动)

LangGraph是数据驱动的状态机

为什么必须Compile

为什么END是显式的

从ReAct反推:Agent天然是Graph

总结


        在LLM应用早期,Agent=Prompt+循环
        随着任务复杂度上升,这种方式很快暴露出问题:不可控不可调试不可复用

        LangGraph的出现,并不是为了“换一种写法”,而是
        从底层抽象上,重构了LLM工作流的组织方式。

        本文将从设计动机 → 抽象模型 → 图构建原理三个层面,系统讲清楚:
        LangGraph的图到底是什么,以及为什么必须这样构建。

LangGraph要解决的根本问题

LLM是无状态的,但真实任务是有状态的

        LLM的计算模型是:

Input → Output

        而真实任务是:

输入
 ↓
中间推理
 ↓
工具调用
 ↓
结果判断
 ↓
是否继续?

        如果把这些都塞进Prompt,就会导致:

  • Prompt无限膨胀
  • 状态不可持久化
  • 无法中断 / 回放 / 调试

        LangGraph的第一性原则:状态必须存在于LLM之外


 Agent的行为本质不是线性的

        传统Pipeline假设:

A → B → C → END

        而Agent的真实形态是:

  • 判断
  • 分支
  • 回环
  • 不确定何时结束

        例如ReAct

Thought → Action → Observation
      ↖───────────────┘

        这是一个循环图,而不是线性流程。


控制逻辑不能藏在Prompt里

        Prompt内部的控制逻辑有致命问题:

  • 不可视化
  • 不可审计
  • 不可复用
  • 不可外部干预

        LangGraph的核心立场是:控制流属于系统,而不是模型


LangGraph的核心抽象

        LangGraph并没有引入复杂的新概念,它只做了三件事的明确分离:

抽象含义
State系统的真实状态
Node对状态的纯计算
Edge状态驱动的执行路径

为什么State是LangGraph的核心

State是唯一的真相源

        在LangGraph中:

  • Prompt只是State的一种投影
  • 工具结果写回State
  • 是否结束由State决定

        一个典型State结构:

State = {
    "messages": [],
    "tool_results": [],
    "step": 0,
    "done": False
}

        这意味着:

  • 状态可序列化
  • 状态可持久化
  • 状态可回放

        系统的行为可以被完整复现。


Node 只能返回“状态增量”

        LangGraph要求:

node(state) → partial_state_update

        禁止在Node中直接修改State,否则会破坏可回放性与确定性。

        这样设计是为了:

  • 可预测性(相同State→ 相同结果)
  • 支持中断恢复
  • 支持未来分布式执行

        从抽象上看:

  • Node≈纯函数
  • State≈上下文快照

Graph为什么一定要是显式图

Edge本质是状态转移规则

        LangGraph中有两类边:

        普通边(确定执行)

A → B

        表示逻辑与状态无关,执行路径是确定的。


        条件边(状态驱动)

A → (条件判断) → B / C / END

        判断函数本质是:

State → NextNode

        这在抽象层面等价于有限状态机(FSM)


LangGraph是数据驱动的状态机

        对照来看:

状态机LangGraph
状态State
动作Node
转移条件Conditional Edge
终止态END

        LangGraph≠简单流程图,而是结构化状态机。


为什么必须Compile

        在构建Graph后,必须调用Compile

graph = builder.compile()

        这一步完成了:

  1. 拓扑合法性校验
  2. 路径完整性校验
  3. 从“描述”到“可执行体”的转换

        没有CompileGraph只是配置,不是系统。


为什么END是显式的

        LangGraph不允许“自然结束”。

        原因只有一个:Agent不能靠“我觉得差不多了”来结束。

        显式END带来的能力包括:

  • 可控终止
  • 可审计
  • 可与UI/调度系统同步

从ReAct反推:Agent天然是Graph

        经典Agent循环:

Thought → Action → Observation → 判断是否完成

        拆解后可以发现:

  • 每一步都在修改State
  • 是否继续由State决定
  • 行为存在回环

        这本质上就是一个图结构。


总结

LangGraph不是让模型更聪明,而是让系统更理性。

  • State把“记忆”从Prompt中解放出来

  • Graph把“流程”从模型中解耦出来

  • Agent从黑盒,变成可控的状态机

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐