跳到内容

INVALID_CONCURRENT_GRAPH_UPDATE

LangGraph StateGraph 接收到来自多个节点的对其状态的并发更新,而这些节点的状态属性不支持并发更新。

发生这种情况的一种方式是,如果您在图中使用 扇出 (fanout) 或其他并行执行,并且您定义了一个具有如下值的状态

const StateAnnotation = Annotation.Root({
  someKey: Annotation<string>,
});

const graph = new StateGraph(StateAnnotation)
  .addNode(...)
  ...
  .compile();

如果上述图中的一个节点返回 { someKey: "someStringValue" },这将使用 "someStringValue" 覆盖 someKey 的状态值。但是,如果单个步骤中扇出内的多个节点返回 "someKey" 的值,则图会抛出此错误,因为内部状态的更新方式存在不确定性。

为了解决这个问题,您可以定义一个归约器 (reducer) 来组合多个值

const StateAnnotation = Annotation.Root({
  someKey: Annotation<string[]>({
    default: () => [],
    reducer: (a, b) => a.concat(b),
  }),
});

这将允许您定义逻辑来处理从并行执行的多个节点返回的相同键。

问题排查

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

  • 如果您的图并行执行节点,请确保您已为相关的状态键定义了归约器。