LangGraph:节点 = 独立计算单元 完整解读

LangGraph:节点 = 独立计算单元 完整解读

LangGraph:节点 = 独立计算单元 完整解读

一、核心定义

Node(节点)是 LangGraph 图结构里最小、独立、原子化的计算单元

  • 本质:一段独立 Python 函数 / Runnable(LCEL 链)
  • 定位:只负责单一职责计算,不耦合其他节点逻辑
  • 通信规则:节点之间不能直接调用、传参,全部通过全局 State(状态)交互,天然解耦,实现 “独立”

一句话官方原文:

Nodes encode isolated logic, receive State as input, run computation, return partial state updates. 节点封装独立逻辑,接收全局状态作为输入,执行计算,返回局部状态更新。

二、为什么说它是「独立」计算单元(四大独立特性)

1. 职责独立(单一原子任务)

一个节点只做一件事,严禁混合多段逻辑:

  • 检索节点:只做向量库查询(RAG Retrieve)
  • 生成节点:只调用 LLM 组装回答
  • 工具节点:只执行工具调用、解析工具返回
  • 校验节点:只校验输出、过滤幻觉 好处:可单独调试、替换、复用、单元测试。

2. 执行上下文独立

  1. 节点自身无私有内存 / 变量,所有输入输出全部托管在全局 State;
  2. 每次调度节点时,框架传入当前快照 State,节点只读不修改原 State;
  3. 节点只返回「增量更新字典」,由框架统一合并到全局状态,不存在跨节点变量污染。

示例标准节点格式:

python

运行

# 独立检索节点:只做向量检索 def retrieve_node(state: GraphState) -> dict: # 仅读取状态,不修改外部变量 question = state["user_question"] query_vec = embed_model.encode(question).tolist() docs = collection.query(query_embeddings=[query_vec], n_results=3)["documents"][0] # 只返回需要更新的字段,增量输出 return {"chunks": docs}

3. 调度独立(运行互不干扰)

  • 边(Edge)控制节点执行顺序,节点完全不知道上下游是谁;
  • 支持循环、分支、并行、子图嵌套,单个节点增删不破坏整体流程;
  • 可单独缓存、重试、超时拦截、人工介入(human-in-the-loop)。

4. 部署 / 复用独立

  • 任意节点可抽离成独立函数单独调用;
  • 支持把子图整体封装成一个节点(子图节点),实现模块化分层;
  • 同一个节点可被多条分支、多处流程复用。

三、节点完整执行流程(固定三步,完全隔离)

所有独立节点统一遵循:读状态 → 独立计算 → 返回增量更新

  1. 读取全局 State从共享状态中取出当前任务所需字段(上游节点产出、用户输入、历史上下文)。
  2. 独立计算(核心隔离区)纯本地逻辑:LLM 调用、向量检索、工具请求、数据清洗、条件判断,计算过程与其他节点完全隔离。
  3. 输出局部更新不返回完整 State,仅返回需要修改的键值对;LangGraph 引擎自动合并到全局状态,完成数据传递给下游节点。

四、和传统 Chain(线性链)的关键区别

传统 LCEL Chain:逻辑串行耦合,一段代码塞全部流程,无法拆分独立单元; LangGraph Node:

  • 每一步拆成独立计算单元;
  • 数据统一走状态池,无硬编码参数传递;
  • 支持动态分支、循环、断点恢复,每个节点可独立观测日志。

五、常见独立节点类型(对应你之前 RAG 流水线)

  1. Retrieve 检索节点:独立向量查询计算单元
  2. Augment 上下文组装节点:独立 Prompt 拼接单元
  3. Generate LLM 生成节点:独立大模型调用单元
  4. Citation 引用整理节点:独立来源格式化单元
  5. Condition 判断节点:独立路由逻辑单元(条件边配套)
  6. Tool 工具节点:独立外部 API / 函数执行单元
  7. Subgraph 子图节点:把一整套子流水线打包为单个独立计算单元

六、直观类比

把 LangGraph 工作流比作流水线工厂:

  • State= 传送带(统一存放所有半成品数据)
  • Node 节点= 独立工位(每个工位只干一道工序,互不干涉)
  • Edge 边= 传送带轨道(控制半成品流向下一个工位)

每个工位(节点)只拿传送带上的原料,加工完放回传送带,工位之间不直接对接,完美体现「独立计算单元」设计思想。

七、核心优势总结(源于节点独立设计)

  1. 可维护:逻辑拆分清晰,改检索不影响生成;
  2. 可调试:单独打印任意节点输入输出,定位问题;
  3. 可扩展:新增节点只需新增函数,不用改动原有流程;
  4. 可观测:每个节点执行时长、输入输出可单独埋点日志;
  5. 可容错:单个节点超时 / 报错可单独重试,不整体崩溃。