跳到主要内容
一个 LangGraph StateGraph 接收到了来自多个节点对不支持并发更新的状态属性的并发更新。 出现这种情况的一种方式是,如果您在图中使用了 扇出 或其他并行执行,并且您定义了一个如下所示的图:
import { StateGraph, Annotation, START } from "@langchain/langgraph";
import * as z from "zod";  

const State = z.object({
  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 的值,图将抛出此错误,因为如何更新内部状态存在不确定性。 为了解决这个问题,您可以定义一个合并多个值的 reducer:
import { registry } from "@langchain/langgraph/zod";
import * as z from "zod";

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

故障排除

以下方法可能有助于解决此错误:
  • 如果您的图并行执行节点,请确保您已使用 reducer 定义了相关的状态键。

以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.