最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
LangGraph 同级节点的数据修改顺序解析
时间:2026-09-14 10:24:01 编辑:袖梨 来源:一聚教程网
在 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的值