Skip to main content
一个 LangGraph StateGraph 从多个节点收到了对其状态的并发更新,而该状态属性不支持这种操作。 这种情况可能发生的一种原因是,您在图中使用了扇出或其他并行执行方式,并且定义了如下所示的图:
import { StateGraph, StateSchema, START } from "@langchain/langgraph";
import { z } from "zod/v4";

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" },这将用 "some_string_value" 覆盖 someKey 的状态值。 然而,如果例如在单个步骤内的扇出中,多个节点为 someKey 返回了值,图将抛出此错误,因为对于如何更新内部状态存在不确定性。 要解决此问题,您可以定义一个归约器来组合多个值:
import { StateSchema, ReducedValue } from "@langchain/langgraph";
import { z } from "zod/v4";

const State = new StateSchema({
  someKey: new ReducedValue(  
    z.array(z.string()).default(() => []),
    {
      inputSchema: z.array(z.string()),
      reducer: (existing, update) => existing.concat(update),
    }
  ),
});
这将允许您定义逻辑,以处理从并行执行的多个节点返回的相同键。

故障排除

以下内容可能有助于解决此错误:
  • 如果您的图并行执行节点,请确保您已为相关的状态键定义了归约器。