上一篇讲了 state——共享的数据。这一篇讲它的两个搭档:Node(步骤) 和 Edge(连线)。state 是数据,node 是处理数据的动作,edge 是动作之间的路。三者合起来,图就能跑了。
Node:一个处理步骤
上一篇已经提过,node 本质是一个函数:读 state、做事、返回更新。这里补充几个工程上的要点。
每个 node 职责单一。一个 node 只干一件事:调一次模型、做一次检索、执行一个工具、做一个判断。不要在一个 node 里塞太多——和写函数一个道理,职责单一才好维护、好测试。
node 的输入输出是约定好的。输入是当前 state(或它的部分),输出是要更新的字段。你不用自己手动合并 state,框架按 reducer 帮你做。
常见的 node 类型:
| 类型 | 干什么 | 返回什么 |
|---|---|---|
| 模型节点 | 调 LLM 生成 | 新的 ai 消息 |
| 检索节点 | 查知识库 | docs 字段更新 |
| 工具节点 | 执行工具 | tool 消息 |
| 判断节点 | 决定走哪条路 | 通常不直接改 state,配合条件 edge |
Edge:节点间的路
Edge 决定「这一步跑完,下一步去哪」。LangGraph 里 edge 有几种连法:
普通 edge:固定下一步。A 跑完必定去 B。用在「确定的顺序」上。
条件 edge:根据当前 state 动态决定下一步。A 跑完,可能去 B,也可能去 C,取决于 state 里的某个值。这是做分支的关键,下一篇(12)专门讲。
入口和出口:图有一个 START(入口)和一个 END(出口)。START 连第一个 node,某个 node 连到 END 就表示「到这里结束」。
一个最小图的完整定义
把 node 和 edge 组合起来,定义一个最小图大概是这样(伪代码示意,重在结构):
1. 定义 state(有哪些字段)
2. 定义几个 node 函数
3. 创建 graph,把 node 加进去
4. 连 edge:
- START → 第一个 node
- node 之间用普通或条件 edge 连
- 最后一个 node → END
5. 编译 graph,得到可运行的对象
注意最后一步「编译」——图定义好后要编译成可运行对象,编译时可以挂上 checkpointer(持久化,第 14 篇讲)。编译后得到的对象,调用方式就和 Runnable 一样:graph.invoke(输入)。
跑起来的样子
图跑起来时,是这样一个循环:
- 从 START 出发,进第一个 node
- node 执行,读 state、返回更新,合并进 state
- 看 edge,决定下一个 node
- 到了下一个 node,重复 2-3
- 直到某条 edge 指向 END,结束
这个循环和第 9 篇讲的五要素协作是一致的——node 是动作,edge 是路由,state 在其间流转,super-step 是每一轮。
Node 与 Edge 的分工
一个容易混淆的点:判断逻辑放 node 里还是 edge 里?
简单原则:「做什么」放 node,「去哪」放 edge。
- 「调用模型」「执行工具」——这是做什么,是 node 的职责
- 「根据结果决定下一步去检索还是直接回答」——这是去哪,是条件 edge 的职责
把判断逻辑放对地方,图的意图才清晰。如果发现一个 node 里写了一堆「如果...就跳到某节点」的逻辑,多半是把 edge 的活塞进 node 了,应该拆成条件 edge。
收束:node 是动作,edge 是路
这一篇讲了 Node 和 Edge:
- Node 是处理步骤,职责单一,输入 state 输出更新
- Edge 有普通(固定)、条件(动态)、入口出口三种
- 定义图:定 state → 写 node → 连 edge → 编译
- 分工原则:做什么放 node,去哪放 edge
下一篇讲条件 edge 的核心用法——动态路由,这是图能做「根据情况走不同路」的关键。
关于十三Tech
我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。我相信 AI 是程序员的最佳搭档。
如果你想跟完这套「图解 LangChain」,欢迎关注公众号 「十三Tech」。全系列 42 篇,会按认识基础、LangGraph 状态机、Agent 与 middleware、RAG 检索、Tools/MCP/记忆、生产化收束这条线更新。

