我为什么开始了解 LangGraph
整理 Agent 的学习方向时,我开始关心多步骤任务的控制:某一步失败怎么办,检查不通过要回到哪里,需要人工确认时又怎样暂停?
围绕这些问题,我了解了 LangGraph。这篇记录我的理解,重点是它帮助我怎样拆解流程,不是已经完成的项目功能清单。
先把它想成流程控制器
在一个整理笔记的任务里,模型负责生成内容,但整个任务还需要决定读取、检查和保存的顺序。
我把 LangGraph 理解为描述这些步骤与连接方式的工具。哪些地方运行确定的程序,哪些地方交给模型判断,可以在同一个流程里组织。官方将它定位为用于长时间、有状态 Agent 的底层编排框架与运行时。LangGraph 概览
Node、Edge、State,分别是什么
为了记住这些概念,我用一个简单例子:
开始 → 读取笔记 → 生成草稿 → 检查 ├─ 通过 → 等待确认 → 保存 → 结束 └─ 未通过 → 有限修改 → 再检查
Node 是做事的步骤,例如读取资料;Edge 是步骤之间的连接,例如读取之后进入生成;State 是它们之间传递的任务信息,例如资料、草稿和检查结果。
这个图是学习示意。它让我先看清楚“任务有几种去向”,再决定代码应该怎样组织。
我最关心的是分支
把步骤依次写下来并不难。更容易变复杂的是异常和条件:没有资料时怎么办,结果不合格能修改几次,用户取消之后是否还会保存。
我希望这些去向在流程里明确表达。每个步骤结束后,依据状态选择下一步,同时有一个能够停止的条件。
例如,检查节点需要区分资料不足、格式错误和事实待核查。不同原因未必应该进入同一种重试。
这种思考也适用于普通 Python 程序。理解流程之后,才知道框架是否解决了自己遇到的问题。
它和 LangChain 的关系
我会把 LangChain 理解为模型、工具与 Agent 的抽象和集成,LangGraph 则更关注执行步骤、状态与连接方式。两者可以一起使用,但使用 LangGraph 不要求先采用 LangChain。
这帮助我避免按名字理解框架。选型时,我更应该问:现在缺的是模型接入,还是流程控制?有没有必要为这个任务引入新的依赖?
图画出来,不代表任务就能恢复
流程图让结构更清楚,但保存状态、选择存储方式和处理外部写入,仍然需要设计。
LangGraph 提供 checkpoint 机制来保存线程状态;如果希望跨进程重启继续使用,需要选择适合的持久化存储,而不是只保存在内存里。持久化说明
即使知道下一步是“保存 Notion 页面”,还要确认上一次请求有没有已经生效。这是外部操作的结果确认问题。
下一步,我想从小流程验证
我想先用读取、生成、检查三个步骤建立最小流程,再逐项加入取消、失败和确认分支。
这样每次新增一个能力,都能提出具体问题:状态有没有传过去,分支有没有走对,任务能否正常停止。
了解 LangGraph 对我最有帮助的地方,是让我先把执行过程讲清楚。等过程清楚,再决定怎样实现,会更容易判断自己究竟需要什么。