先看现象。LangGraph 0.3 里用 Command(goto=..., update={...}) 从节点直接跳转,跳到目标节点读到的 state 里没有上一步写的字段,改成 add_edge 走就不会丢,整张图跑完不报错但结果为空。

这类报错背后常见的原因有几处,逐个排除就行。节点返回 Command 时 update 的键没有走 state 的 reducer。也可能是state 用了自定义 reducer,update 被当成整体替换。

另外,并行分支同时写同一个键,后到的覆盖先到的。

少数情况下是checkpointer 里存的是旧快照,读到的是历史版本。

动手时先在目标节点打印完整 state 定位缺失字段

python show_state.py --node target

然后把 update 改成只写本节点负责的键

return Command(goto='next', update={'draft': text})

给并行写入的键加合并 reducer

python graph.py --reducer merge --show-state

等前面都确认过,再清掉该 thread 的检查点后重跑

python run_graph.py --thread t1 --reset

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

改完先别撤,确认这几项。目标节点能读到前一步写的全部字段,并行分支的结果都保留,最终输出非空。

Command 的 update 走的是 state 的 reducer,自定义 reducer 写错时不会报错,只会安静地丢字段。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189