多种状态,Reducer合并状态
全局,局部(私有),输入状态,输出状态
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
class InputState(TypedDict):
username: str
class OutputState(TypedDict):
graph_output: str
class OverAllState(TypedDict):
nickname: str
username: str
graph_output: str
class PrivateState(TypedDict):
greeting: str
def node_1(state: InputState) -> OverAllState:
# 向全局状态写入数据
return {
"nickname": "Dear " + state["username"]
}
def node_2(state: OverAllState) -> PrivateState:
# 从全局状态读取数据,写入私有状态
return {
"greeting": state["nickname"] + ", 早上好~"
}
def node_3(state: PrivateState) -> OutputState:
# 从私有状态读取数据,写入输出状态
return {
"graph_output": state["greeting"] + " 很高兴认识你!"
}
builder = StateGraph(OverAllState,input_schema=InputState,output_schema=OutputState)
builder.add_node("node_1", node_1)
builder.add_node("node_2", node_2)
builder.add_node("node_3", node_3)
builder.add_edge(START, "node_1")
builder.add_edge("node_1", "node_2")
builder.add_edge("node_2", "node_3")
builder.add_edge("node_3", END)
graph = builder.compile()
print(graph.invoke({"username":"小黄"}))
InputState 用于约束图的外部输入。
OverAllState 是图内部主要使用的状态 Schema。
其中:
username来自图的输入;nickname由node_1写入;graph_output由node_3写入,并最终作为图的输出返回。PrivateState用于节点之间传递临时数据。
OutputState 用于约束图最终返回给外部调用方的数据。
合并状态的方法:
operater.add:
列表直接拼接
add_massage合并消息:
消息专用 reducer,核心是"智能追加":
- 新消息追加到末尾;
- 同 id 的消息会替换而不是重复(工具调用的 ToolMessage 就是靠这个配对);
- 兼容单条消息或消息列表,类型安全。
自定义合并消息的方式继承MessagesState

浙公网安备 33010602011771号