Skip to content

INVALID_CONCURRENT_GRAPH_UPDATE

一个 LangGraph StateGraph 收到了来自多个节点对状态属性的并发更新,而该状态属性并不支持这种操作。

这种情况的一种发生方式是如果你在图中使用了扇出或其他并行执行,并定义了一个这样的图:

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_string_value" 覆盖状态属性 "some_key" 的值。 然而,如果在一个步骤内的多个节点(例如在扇出中)返回了 "some_key" 的值,图将抛出此错误,因为不确定如何更新内部状态。

为了避免这种情况,你可以定义一个合并多个值的归约器:

import operator
from typing import Annotated

class State(TypedDict):
    # 使用 operator.add 作为归约函数使这个属性只追加不修改
    some_key: Annotated[list, operator.add]

这样就可以定义逻辑来处理从多个并行执行的节点返回的相同键。

故障排除

以下方法可能有助于解决此错误:

  • 如果您的图并行执行节点,请确保已使用reducer定义了相关的状态键。

Comments