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"。 但是,如果在同一步骤内(例如在 fanout 中)多个节点都返回了 "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。