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_key"
的状态值为 "some_string_value"
。
然而,如果在例如单个步骤内的 fanout 中,多个节点都返回了 "some_key"
的值,那么图会抛出此错误,因为存在不确定性如何更新内部状态。
要解决这个问题,你可以定义一个用于合并多个值的 reducer:
import operator
from typing import Annotated
class State(TypedDict):
# 使用 operator.add 作为 reducer 函数,使这个键变为只追加
some_key: Annotated[list, operator.add]
这将允许你定义逻辑来处理从多个并行执行的节点返回的相同键。
故障排除¶
以下方法可能有助于解决此错误:
- 如果您的图以并行方式执行节点,请确保使用 reducer 定义了相关的状态键。