LangGraph 状态、Schema 与 Reducer
状态是节点共享的数据。Schema 定义允许的字段与类型;节点读取当前状态并返回“更新”,通常无需返回完整状态。
每个字段的 Reducer 决定如何把更新合入旧值。未指定 Reducer 时,新值通常覆盖旧值;累积消息或列表时可使用追加型 Reducer。并行节点同时更新同一字段时,Reducer 还决定这些更新能否合法合并。
from operator import add
from typing import Annotated
from typing_extensions import TypedDict
class State(TypedDict):
status: str # 默认覆盖
notes: Annotated[list[str], add] # 合并累积
如果旧 notes 为 ["a"],节点返回 ["b"],合并后为 ["a", "b"]。返回空列表不会清空追加字段;需要明确覆盖语义。消息通常使用专用消息 Reducer,以调用 ID 和消息 ID 处理追加或替换。
输入、输出与内部状态可以使用不同 Schema。不能序列化、无需恢复或包含请求级秘密的数据,应通过运行时上下文或不跟踪值传递,而不是写入检查点。