以编程方式使用文档

一个 LangGraph StateGraph 从多个节点接收到对其状态中某个状态属性的并发更新,该属性不支持 此操作。

一种可能发生这种情况的场景是,如果您正在使用 扇出 或图中的其他并行执行,并且您定义了如下所示的图:

const State = new StateSchema({
  someKey: z.string(),
});

const builder = new StateGraph(State)
  .addNode("node", (state) => {
    return { someKey: "some_string_value" };
  })
  .addNode("otherNode", (state) => {
    return { someKey: "some_string_value" };
  })
  .addEdge(START, "node")
  .addEdge(START, "otherNode");

const graph = builder.compile();

如果上述图中的某个节点返回 { someKey: "some_string_value" },这将覆盖 someKey 的值,替换为 "some_string_value". 但是,如果单个步骤中(例如扇出)的多个节点返回 someKey的值,图将抛出此错误,因为 存在关于如何更新内部状态的不确定性。

要解决这个问题,您可以定义一个合并多个值的 reducer:

const State = new StateSchema({  // [!code highlight]
  someKey: new ReducedValue(  // [!code highlight]
    z.array(z.string()).default(() => []),  // [!code highlight]
    {
      inputSchema: z.array(z.string()),
      reducer: (existing, update) => existing.concat(update),  // [!code highlight]
    }
  ),
});

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

故障排除

以下内容可能有助于解决此错误:

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