在 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的值
conda环境下ubuntu 20.04 jupyter添加或删除内核的方法
Ubuntu怎么换壁纸? Ubuntu中设置自己照片为桌面的技巧
Ubuntu系统日期和时间怎么设置? Ubuntu修改时间和日期的技巧
LangGraph 初识:Agent 为什么要采用 Graph 工作流?
LangGraph 人工介入机制:用 Interrupt 暂停 Agent 并等待确认
Ubuntu怎么进行延迟截图? Ubuntu截图技巧