LangGraph 的状态通过类型化的数据结构定义,支持 TypedDict、Pydantic BaseModel 或 dataclass。TypedDict 是最常用的方式,性能最优;Pydantic 提供递归数据验证但性能略低。每个节点的输入和输出都遵循状态的 schema,确保类型安全。从 LangGraph 1.0 开始,官方推荐使用 Pydantic BaseModel 定义状态;Pydantic v3 的验证性能相比 v2 有显著提升,适合生产环境使用。
状态中的每个键对应一个通道(Channel),通道决定了当多个节点同时写入同一字段时如何进行合并。常见的 reducer 包括:add_messages(追加模式,用于消息历史累加)、last_value(覆盖模式,用于标量值)、merge(字典合并)和自定义 reducer。开发者可以通过 Annotated[..., reducer] 语法为每个状态键指定合并策略,避免并发写入时的数据冲突。
LangGraph 支持子图(Subgraph)机制,可以将复杂的 Agent 拆分为多个独立的子状态机。子图作为一个整体节点嵌入父图中,通过定义的输入/输出 schema 与父图通信。这种模块化设计允许不同团队各自开发子图模块,最后组装成完整系统,也便于单元测试和复用。
除了状态之外,LangGraph 还支持 context schema,用于注入运行时不变的上下文数据(如 user_id、数据库连接等)。context 对所有节点可见但不可修改,适合传递只读的配置信息,避免了将这些数据放入可变状态中带来的复杂度。