当前位置: 首页 > news >正文

LangGraph 基础:Node、Edge、State 是什么?

01 先用一句话讲透 LangGraph

LangGraph 不是把组件用竖线连起来。它把一个复杂 Agent 变成一张图。

图里有三个核心角色:State、Node、Edge。State 保存当前任务的全部关键状态。Node 执行业务逻辑。Edge 决定下一个节点。

如果 LangChain 的 Chain 像流水线,LangGraph 就像流程引擎。流水线只能往前走;图可以分支、循环、并行、暂停、恢复。

02 为什么必须先懂 State / Node / Edge?

因为后面的 create_agent、Memory、ToolNode、Human-in-the-loop,本质都在这三个概念上叠能力。

你看不懂 State,就会把上下文塞乱。你看不懂 Node,就会把所有逻辑写成一个大函数。你看不懂 Edge,就会让 Agent 到处乱跑。

03 State:不是普通变量,是整张图的共享快照

State 是图运行时的“当前快照”。用户问题、对话消息、检索结果、工具结果、路由决策、最终答案,都可以放在 State 里。

但 State 不是垃圾桶。它只保存多个节点都要读写的关键数据。临时变量放节点内部。长期用户画像放 Store。

源码心法:StateGraph 初始化时会接收 state_schema、input_schema、output_schema。随后通过内部 schema 解析,把字段变成可读写的 channels。每个 channel 都有自己的更新规则。

官方 Graph API 文档把 State 定义为图的共享数据结构,通常用 TypedDict、dataclass 或 Pydantic model 描述;节点返回的是 State 的局部更新,不需要返回完整 State。

04 Reducer:决定 State 是覆盖,还是合并

State 最大的坑,是列表字段。

如果没有 reducer,节点返回一个新的列表,就会覆盖旧列表。比如 messages、docs、tool_results,这类字段通常不能简单覆盖。

所以 LangGraph 允许你给某个字段声明 reducer。它告诉图引擎:这个字段的新旧值,应该怎么合并。

State 字段更新逻辑可以压缩成:
old_state + node_update -> reducer -> new_state
没有 reducer:new_value 直接覆盖 old_value
有 reducer:按你指定的规则合并,比如追加消息、追加文档、去重结果

这就是为什么 messages 常常要用 add_messages。它不是装饰代码,而是状态合并规则。

05 Node:不是类,是执行任务的函数

Node 是图里的工人。它拿到当前 State,执行一段逻辑,然后返回 State 的局部更新。

这个逻辑可以很简单,也可以很重:调用模型、查向量库、调业务接口、做规则判断、写审计日志,都可以放在 Node 里。

但 Node 最好保持单一职责。一个节点只干一件事。这样出错时,Trace 才能看懂。

源码心法:add_node() 的核心不是执行节点,而是注册节点:推断节点名、推断输入 schema、封装成 Runnable、保存到 builder.nodes。真正执行发生在 compile 之后的 invoke/stream 阶段。

06 Edge:不是数据管道,是路由规则

Edge 只回答一个问题:下一个节点是谁?

固定 Edge 适合确定流程。条件 Edge 适合根据 State 动态分流。START 决定入口。END 决定结束。多个目标会进入下一轮 super-step 并行执行。

最容易犯的错:同一个节点既加固定边,又用条件边或 Command 动态跳转。这样两个路径都可能执行,流程会变得难以推理。

07 START 和 END:两个虚拟节点

START 不是你写的业务函数。它代表图的入口。用户输入从这里进入图。

END 也不是业务函数。它代表图执行结束。状态走到 END,最终结果就返回给调用方。

START -> 第一个业务节点
业务节点 -> END
这两条边决定了:图从哪里开始,到哪里停止。

08 compile():从“图纸”变成“可执行图”

StateGraph 只是 builder。你往里面加 State、Node、Edge,只是在画图纸。

compile() 才是关键。它会检查图结构,装配运行时,把节点、边、状态通道、reducer、checkpointer 组合成一个可执行的 CompiledStateGraph。

没有 compile,图不能 invoke,也不能 stream。

09 invoke/stream:图是怎么真正跑起来的?

图的执行不是普通函数调用栈。它更像一轮一轮传递消息。

输入 State 进入 START。入口节点被激活。节点执行后返回更新。Reducer 合并更新。Edge 决定下一批节点。直到所有节点都不再活跃,且没有消息在路上,图结束。

官方文档把这种运行过程称为 super-step。并行节点属于同一个 super-step,顺序节点属于不同 super-step。

10 源码视角:StateGraph 的核心对象关系

源码里,StateGraph 不是直接运行器。它更像“图构建器”。它持有 nodes、edges、branches、channels、schemas。

nodes 保存节点定义。edges 保存固定边。branches 保存条件边。channels 保存 State 字段对应的状态通道。compile() 把这些东西装配成可执行图。

StateGraph 关键字段可以这样理解:
nodes -> 节点注册表
edges -> 固定路由表
branches -> 条件路由表
channels -> State 字段通道
schemas -> State / Input / Output schema
compiled -> 是否已经编译

11 常见图形:线性、分支、循环、并行

学 LangGraph,不要只盯一个 ReAct Agent。先学会四种图形。

线性流程适合固定任务。条件分支适合意图识别。循环适合自检和重试。并行适合多数据源检索、多个工具同时执行。

12 企业项目里,State 应该怎么设计?

State 设计得好,整个 Agent 就稳。State 设计得乱,后面全是补丁。

建议把 State 按职责分层:输入层、对话层、检索层、工具层、控制层、输出层。这样每个节点都知道自己读什么、写什么。

13 最容易踩的 8 个坑

第一,把所有逻辑写进一个节点。结果 Trace 看不懂,异常也不好定位。

第二,把 State 当全局变量乱改。节点应该返回更新,不要依赖隐式副作用。

第三,列表字段不写 reducer。messages、docs、tool_results 很容易被覆盖。

第四,同一个节点混用固定边和动态路由。两个路径都可能执行。

第五,条件路由函数返回值不稳定。返回值最好有限、明确、可映射。

第六,State 字段太多。字段越多,节点依赖越乱。

第七,不设置 END。图可能循环到递归限制。

第八,不用 trace。复杂图不上观测,等于黑盒。

14 总结

LangGraph 的基础,不是 API,而是思维方式。

State 是系统当前快照。Node 是独立执行单元。Edge 是控制流。Reducer 是状态合并规则。compile 是从图纸到程序。invoke/stream 是按 super-step 运行。

一句话总结:会写 LangGraph,不是会背 add_node 和 add_edge,而是能把复杂 Agent 拆成清晰的状态、节点和路由。


内容来源:LangGraph 基础:Node、Edge、State 是什么?:功能变化与行业影响解析_热闻岛

http://www.rkmt.cn/news/1532144.html

相关文章:

  • 5个步骤掌握低代码数据处理:Awesome-Dify-Workflow的AI辅助数据分析终极指南
  • 2026年6月《剑与翼》正版下载安装完整指南:三端适配调试与新手稳定开荒手册一、文章概述
  • SolidWorks第四部分_直接实体建模特征3_分割特征应用
  • ​6月16日晚上19:00直播丨Ascend C开源资料及样例分享
  • 开短路测试(Open/Short Test)原理
  • 5个生产级Jupyter扩展构建可审计Notebook工作流
  • 蓝牙产品:蓝牙信标 (BLE Beacon) 深度调研
  • `pdfplumber` 是一个用于从 PDF 文件中提取文本、表格和元数据的 Python 库
  • 终极指南:如何在5分钟内完成MelonLoader Unity游戏Mod加载器安装
  • 用目标传播训练硬激活神经网络:原理与PyTorch实操
  • Zotero Style插件:终极文献管理效率提升70%的完整指南
  • 开源工具完整解析:轻松实现Office订阅版功能解锁
  • JD-AssistantV2:如何通过自动化抢购工具在3分钟内提升京东秒杀成功率500%
  • 酒店预订数据的探索性分析实战:EDA与可视化深度指南
  • 别再走弯路!2026亲测靠谱的AI写作辅助网站|实测避坑硬核版
  • 你说的应该是‌exFAT注意簇的大小‌吧,簇大小(分配单元大小)是exFAT使用中需要重点权衡的参数,直接影响存储空间利用率和读写性能,核心结论和建议如下:
  • 2026年 插板门供应厂家:专业密封插板门/耐磨插板门/气动插板门/电动插板门企业考察 - 品牌发掘
  • 青岛配眼镜适合什么人:三步搞定配镜决策的快速攻略 - 配眼镜新资讯
  • 2026年聚合氯化铝厂家怎么选?五大维度实测与行业案例深度分析! - 优质品牌商家
  • 【多微电网】基于粒子群优化算法的面向配电网的多微电网协调运行与优化附Matlab代码
  • 亲密的网络旅程(十一):从“信标”到“分片”——802.11帧的精密解剖与聚合艺术
  • 体验家 XMPlus AI 大模型应用实践:用 LLM 实现客户反馈智能摘要、自动归因与行动建议生成
  • 论文复现的工程化方法:从阅读到验证的系统化流程
  • 广州配眼镜适合谁?按预算分三档指南 - 配眼镜新资讯
  • 从“技术炫技”到“用户价值”:AI 产品设计的务实转型
  • 3步免费解锁Wand专业版:完整游戏修改体验终极指南
  • 深度解析游戏逆向工程:unnpk文件解析工具完整实战指南
  • 氢原子基态能级跃迁紫外频段光子频率计算
  • 动态知识演化的类型系统NM-DEKL3∞解析
  • 【无人机覆盖路径规划】基于matlab分解和扫描线策略进行多边形区域的凹面感知覆盖路径规划【含Matlab源码 15630期】