LangGraph 系列之 3—— 多个节点
·
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
# 定义状态结构,包含姓名、年龄和最终输出结果
class State(TypedDict):
name: str # 姓名(字符串类型)
age: int # 年龄(整数类型)
final: str # 最终输出的字符串结果
def node1(x: State) -> State:
"""第1个节点:生成当前年龄的描述信息"""
# 生成当前年龄的描述,并完整传递所有状态字段
return {
"name": x["name"], # 传递姓名
"age": x["age"], # 传递年龄
"final": f'{x["name"]},你现在 {x["age"]} 岁了'
}
def node2(y: State) -> State:
"""第2个节点:计算1年后的年龄并生成描述信息"""
# 创建新的状态字典,避免直接修改输入状态
new_state = y.copy()
# 年龄加1
new_state["age"] += 1
# 使用当前节点的输入参数y(而非未定义的x)来获取姓名
new_state["final"] = f'{y["name"]},1年后,你的年龄是:{new_state["age"]}'
return new_state
# 创建状态图构建器,关联State结构
graph_builder = StateGraph(State)
# 添加节点:"a"对应node1,"b"对应node2
graph_builder.add_node("a", node1)
graph_builder.add_node("b", node2)
# 定义流程路径:START → a节点 → b节点 → END
graph_builder.add_edge(START, "a")
graph_builder.add_edge("a", "b")
graph_builder.add_edge("b", END)
# 编译图为可执行对象
app = graph_builder.compile()
# 调用图,传入初始状态(姓名Jim,年龄13)
result = app.invoke({"name": "Jim", "age": 13})
# 输出最终结果
print(result["final"]) # 输出:Jim,1年后,你的年龄是:14
# 显示图结构(需在Jupyter环境中运行)
from IPython.display import Image, display
display(Image(app.get_graph().draw_mermaid_png()))
1. 核心功能
通过两个节点的依次处理,完成 “当前年龄描述→1 年后年龄计算与描述” 的流程,最终输出 1 年后的年龄信息。
例如:输入姓名 “Jim”、年龄 13,输出 “Jim,1 年后,你的年龄是:14”。
2. 注意事项
数据类型严格设置,如果将 {"final": f'{x["name"]},你现在 {x["age"]} 岁了' } 改成 "final": '{x["name"]+',你现在'+ {x["age"]} +'岁了'} 就会TypeError
3. 关键组件与作用
-
状态(State):
用TypedDict定义的结构化数据载体,包含 3 个字段:name:存储姓名(字符串);age:存储年龄(整数);final:存储各节点生成的描述文本(字符串)。
作用:在节点间传递数据,确保信息在流程中不丢失。
-
节点(Node):
node1:接收初始状态,生成 “当前年龄描述”(如 “Jim,你现在 13 岁了”),并完整传递name、age和final到下一个节点。node2:接收node1传递的状态,将年龄加 1,生成 “1 年后年龄描述”(如 “Jim,1 年后,你的年龄是:14”)。
-
图(Graph):
通过StateGraph构建线性流程:START → node1(a节点)→ node2(b节点)→ END,确保节点按顺序执行。
4. 执行流程
- 调用
app.invoke({"name": "Jim", "age": 13})传入初始状态; - 流程从
START进入node1,生成当前年龄描述,更新状态并传递给node2; node2接收状态,计算 1 年后的年龄(13+1=14),生成最终描述;- 流程到达
END,返回最终状态,打印final字段结果。
5. 代码价值
- 展示了 LangGraph 的核心工作模式:状态在节点间按预定流程流转,逐步被处理。
- 体现了 “状态完整传递”“节点逻辑分离” 的设计思想,为扩展更复杂的流程(如多分支、条件判断)奠定基础。
- 可通过可视化代码(
display(Image(...)))在 Jupyter 环境中查看流程图,直观理解节点关系。
总之,这段代码是 LangGraph 构建简单线性工作流的典型示例,清晰展示了 “状态定义→节点逻辑→图流程设计→执行与输出” 的完整链路。
更多推荐
所有评论(0)