📍 全程回望 · 10 个阶段 60 天,你在终点
①入门→
②状态流→
③控制流→
④Pregel→
⑤通道→
⑥持久化→
⑦中断→
⑧函数式→
⑨预制流式→
⑩生产收官
💡 一句话总结你学到了什么
LangGraph 的本质,就一句话:把「一个 Agent 的推理过程」建模成一张图,用 Pregel 超步引擎驱动它一步步跑,用通道管数据、用 checkpoint 存进度,从而让它可中断、可回放、可分布式、可上线。这 60 天,你把这句话里的每一个词都拆到了源码层。
还记得 Day 1 那个疑问吗——「LangGraph 和 LangChain 到底啥关系,它解决什么」。现在你能自己回答了:LangChain 管「怎么调一次模型/工具」,LangGraph 管「怎么把很多次调用编排成一个有状态、能循环、能人工介入的流程」。60 天就是沿着这个「编排引擎」从外到内、再从内到上线,走了一圈:
看得见的层
StateGraph / 节点 / 边 / State —— 你写的 API(阶段 1-3)
看不见的引擎
Pregel 超步循环 / 通道 / checkpoint —— 框架的核心(阶段 4-6)
高级能力
中断人在环 / 函数式 / 子图 / 预制件 / 流式(阶段 7-9)
上线
Runtime / 错误 / CLI 部署(阶段 10)
👶 大白话前三个阶段学的是「你怎么用」,中间三个学的是「它内部怎么转」,后三个学的是「怎么玩出花」,最后学「怎么发货」。一个完整的软件生命周期:会用 → 懂原理 → 用得高级 → 能上线。这正是「读懂一个框架源码」该有的深度。
把 60 天钉在一张图上。每个阶段标注了「核心源码文件」和「你该记住的一句话」:
图注:绿=你写的 API 层,蓝=数据/控制流,紫=核心引擎(深水区),橙=高级能力,青=预制/流式,靛=上线。
| 阶段 | 一句话记住 | 核心源码 |
| ① 入门 | 图 = 节点 + 边 + 共享状态 | graph/state.py |
| ② 状态流 | reducer 决定「新旧值怎么合并」 | graph/message.py, channels/binop.py |
| ③ 控制流 | 条件边/Command/Send 决定「下一步去哪、扇出几份」 | graph/_branch.py, types.py |
| ④ Pregel ★ | 超步循环:准备任务→并行执行→apply_writes→存档 | pregel/_loop.py, _algo.py |
| ⑤ 通道 | 每个 state 字段背后是一个 Channel 存取策略 | channels/*.py |
| ⑥ 持久化 ★ | checkpoint 拆值存 blob;Store 管跨线程长期记忆 | libs/checkpoint* |
| ⑦ 中断 | interrupt 抛异常暂停,Command(resume=) 从断点续 | types.py, pregel |
| ⑧ 函数式 | @entrypoint/@task 把普通函数变成图 | func/__init__.py |
| ⑨ 预制/流式 | create_react_agent 开箱即用;5 种 stream 模式 | prebuilt/*, pregel/_messages.py |
| ⑩ 生产 | Runtime 注入依赖;langgraph.json + CLI 打包上线 | runtime.py, libs/cli |
如果只让你记一件事,记这个——把 graph.invoke({"messages":[...]}, config) 到返回结果之间发生的全过程串起来,你就把 60 天的知识点全用上了:
图注:橙色虚线是「循环回边」——只要还有活跃节点,就回到步骤4 开下一个超步。这就是 Pregel 的心跳,也是 60 天所有知识点的交汇处。
💡 能把这张图讲清楚,你就真的懂 LangGraph 了这 11 步里,几乎每一步都对应一个阶段:输入输出映射(阶段4)、恢复存档(阶段6)、超步循环(阶段4)、通道写入(阶段5)、中断(阶段7)、Runtime 注入(阶段10)、流式(阶段9)。它们不是孤立的知识点,而是一次执行里前后咬合的齿轮。面试时被问「LangGraph 内部怎么跑的」,把这张图讲一遍就是满分答案。
本站还做了 eino / OpenHands / CrewAI / AutoGPT 等一系列框架的源码教程。学完 LangGraph,横向对比能帮你建立「选型直觉」——没有最好的框架,只有最合适的场景:
| 框架 | 核心抽象 | 擅长 | 取舍 |
| LangGraph | 状态图 + Pregel 超步 + checkpoint | 需要循环、人在环、持久化、可回放的有状态复杂 Agent | 概念多、上手陡;但生产能力最全 |
| LangChain | Chain / Runnable 链 | 线性的「取数据→喂模型→出结果」流水线 | 不擅长循环与复杂状态(所以才有了 LangGraph) |
| CrewAI | Role/Agent/Task/Crew 角色协作 | 「多个角色分工协作」的直觉式建模,上手快 | 底层编排能力弱于图模型,复杂控制流受限 |
| AutoGPT | 目标驱动的自主循环 | 「给个目标自己想办法」的实验性自治 | 可控性/可靠性弱,偏演示 |
| OpenHands | Event 流 + Agent/Runtime 沙箱 | 软件工程类 Agent(读写代码、跑命令) | 面向 coding 场景,通用编排非重点 |
| eino (字节) | Graph/Chain 编排(Go) | Go 生态、强类型、高性能服务端 | 生态与 Python LLM 工具链相比较新 |
💡 选型直觉:什么时候选 LangGraph当你的需求里出现这些词——「多轮循环、工具调用后再判断、需要人工审批、崩了要能续跑、要能回看历史步骤、要上线扛并发」——LangGraph 的每一个特性都是为它们量身打造的。反过来,如果只是「一次性把文档喂给模型总结一下」,用 LangChain 甚至直接调 SDK 就够了,上 LangGraph 是杀鸡用牛刀。框架的复杂度应该匹配问题的复杂度。
👶 学了 LangGraph,其它框架还用重新学吗?
👨🏫 不用从零学。因为你已经掌握了Agent 编排的通用心智:状态怎么管、控制流怎么走、工具怎么调、多步怎么协作。换个框架,只是换一套 API 名字和抽象包装——CrewAI 的 Task、eino 的 Graph、OpenHands 的 Event,本质都在解决你已经理解的同一批问题。这就是深读一个框架源码的复利:第一个框架学原理,后面的框架都是查文档。
🤔 你可能正在想「源码是读完了,但离『能拿这个吃饭』还有多远?简历上怎么写?下一步该做什么项目?」
三条务实的路,按你的目标挑:
🛠 想做工程
用 LangGraph 做一个带持久化 + 人在环 + 流式的完整项目(如客服/研究 Agent),走一遍 langgraph dev → build → 部署。把 D59 的部署链路亲手跑通,这就是最好的作品集。
📚 想懂更深
二刷阶段 ④⑥⑦(Pregel/持久化/中断),对照本站其它框架教程横向读。尝试给 LangGraph 提一个小 PR(改文档/加测试也算),体验开源协作。
💼 想求职
把 L03 那张「invoke 生命周期图」讲熟——它是面试杀手锏。简历写「读过 LangGraph 源码,理解 Pregel 超步/checkpoint 机制」,比只写「用过 LangChain」有分量得多。
💡 关于「读源码」这件事本身的收获这 60 天真正训练的,不只是 LangGraph 知识,而是一种能力:面对一个陌生的大型代码库,能从入口一步步啃到核心、看懂设计取舍、还原作者的思考。这个能力换到任何框架、任何语言都通用,是比「会用某个库」值钱得多的硬本事。
本站有一份专门的 Agent 开发求职路线,把「从 0 到能面试」拆成了每天 30 分钟的路径,和这套源码教程正好互补——源码教程给你「深度」,路线图给你「广度和节奏」:
→ 去看《Agent 开发 0→1 学习路线 · 68 天》
← 回 60 天总目录二刷
🎓 写在最后60 天前,LangGraph 对你可能只是一个「能画 Agent 流程图的库」。60 天后,你能说清它的每一层:为什么用超步而不是普通递归、checkpoint 为什么要拆值存 blob、interrupt 靠抛异常实现、Runtime 为什么不进 state……你不再是「会调 API 的人」,而是「懂它为什么这么设计的人」。这中间的差距,就是这 60 天每天 30 分钟攒下来的。
最后用一段代码收尾——回到最开始,但你现在看它的眼神已经完全不同了:
# 一个 StateGraph,你现在能看穿它背后的每一层
from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.memory import InMemorySaver
builder = StateGraph(State) # ← 阶段1:图的骨架
builder.add_node("agent", call_model) # ← 阶段4:节点会变成 PregelNode
builder.add_conditional_edges("agent", route) # ← 阶段3:Branch 决定去向
builder.add_edge(START, "agent") # ← 阶段1:入口
graph = builder.compile( # ← 编译成 Pregel(阶段4)
checkpointer=InMemorySaver(), # ← 阶段6:每步存档
)
graph.invoke({"messages": [...]}, {"configurable": {"thread_id": "1"}})
# ↑ 这一行背后,是 L03 那张 11 步生命周期图的完整运转
💡 从「看代码」到「看穿代码」同样六行代码,60 天前你看到的是「怎么写」,现在你看到的是「每一行会触发框架内部的哪套机制」。这就是读透源码的意义——代码没变,你的眼睛变了。
🏁 60 天,你征服了
- 10 个阶段、60 天、覆盖 LangGraph 从 API 到引擎到上线的全栈
- 核心深水区:Pregel 超步引擎、持久化/checkpoint、中断与人在环
- 一张能讲清「invoke 内部全过程」的生命周期图(面试杀手锏)
- 六框架选型直觉 + 一套可迁移的「读大型源码」的方法论
🚀 下一站:回到
60 天总目录 挑感兴趣的阶段二刷,或跳到
Agent 求职路线 把知识变成作品和 offer。感谢你走完这 60 天——真正的学习,从合上教程、打开自己的项目那一刻才开始。