Skip to main content
一个 LangGraph StateGraph 收到了来自多个节点的并发更新,但目标状态属性不支持并发操作。 这种情况可能发生的一种方式是,如果你正在使用 fanout 或其他并行执行,并且你定义了一个像这样的图:
class State(TypedDict):
    some_key: str

def node(state: State):
    return {"some_key": "some_string_value"}

def other_node(state: State):
    return {"some_key": "some_string_value"}


builder = StateGraph(State)
builder.add_node(node)
builder.add_node(other_node)
builder.add_edge(START, "node")
builder.add_edge(START, "other_node")
graph = builder.compile()
如果上图中的一个节点返回 { "some_key": "some_string_value" },这将覆盖 "some_key" 的状态值为 "some_string_value"。然而,如果在单个步骤中的多个节点(例如在一个扇出中)返回 "some_key" 的值,图将抛出此错误,因为如何更新内部状态存在不确定性。 为了解决这个问题,你可以定义一个reducer来合并多个值:
import operator
from typing import Annotated

class State(TypedDict):
    # The operator.add reducer fn makes this append-only  #
    some_key: Annotated[list, operator.add]  
这将允许您定义逻辑来处理从多个并行执行的节点返回的相同键。

故障排除

以下内容可能有助于解决此错误:
  • 如果你的图并行执行节点,请确保你已为相关的状态键定义了归约器。

以编程方式连接这些文档 到 Claude、VSCode 等,通过 MCP 获取实时答案。