INVALID_CONCURRENT_GRAPH_UPDATE¶
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_string_value"
覆盖 "some_key"
的状态值。然而,如果在例如一个步骤中的扇出中,多个节点返回了 "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]
这将允许您定义逻辑来处理从并行执行的多个节点返回的相同键。
故障排除¶
以下可能有助于解决此错误
- 如果您的图并行执行节点,请确保您已使用 reducer 定义了相关的状态键。