LangGraph 同级节点的数据修改顺序解析

作者:袖梨 2026-09-14

在 LangGraph 中让多个节点从 START 同时分支后,节点的运行表现可能与普通的顺序函数调用不同。即使调整注册先后或为其中一个函数增加延迟,最终状态仍可能保持不变。要解释这一现象,需要结合节点调度、状态快照和更新合并方式,分析同级节点究竟如何读取与修改数据。

...
...
import time
class PubState(TypedDict):
  publicStr: Annotated[str, operator.add]

def fna(state: PubState):
  v2 = state["publicStr"] +"2222"
  print('a',state["publicStr"])
  return {
    "publicStr": v2
  }

def fnb(state: PubState):
  time.sleep(1)
  v1 = state["publicStr"] +"1111"
  print('b',state["publicStr"])
  return {
    "publicStr": v1
  }
builder=StateGraph(PubState)


builder.add_node("fn1",fna)
builder.add_node("fn2",fnb)

builder.add_edge(START, "fn1")
builder.add_edge(START, "fn2")
graph=builder.compile()

res=graph.invoke({"publicStr":"start"})
rprint(res)

打印结果

{'publicStr': 'startstart2222start1111'}

我试了调整fna 和 fnb 的顺序,注册先后顺序,给fnb 加延迟时间time.sleep(1),执行结果都没有变化, 后来我改变函数名字,例如,1_fnb 2_fna ,fn2 fn1 ,才返现了规律,执行顺序是根据名字的编码顺序先后执行的,编码数值小的先执行,跟注册顺序,执行先后没有关系 而且每个函数执行前就拿到了state的快照,同级函数修改结果对自己没有影响,同级函数都执行结束才统一修改state的值

相关文章

精彩推荐