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 岁了”),并完整传递 nameage 和 final 到下一个节点。
    • node2:接收 node1 传递的状态,将年龄加 1,生成 “1 年后年龄描述”(如 “Jim,1 年后,你的年龄是:14”)。
  • 图(Graph)
    通过 StateGraph 构建线性流程:START → node1(a节点)→ node2(b节点)→ END,确保节点按顺序执行。

4. 执行流程

  1. 调用 app.invoke({"name": "Jim", "age": 13}) 传入初始状态;
  2. 流程从 START 进入 node1,生成当前年龄描述,更新状态并传递给 node2
  3. node2 接收状态,计算 1 年后的年龄(13+1=14),生成最终描述;
  4. 流程到达 END,返回最终状态,打印 final 字段结果。

5. 代码价值

  • 展示了 LangGraph 的核心工作模式:状态在节点间按预定流程流转,逐步被处理
  • 体现了 “状态完整传递”“节点逻辑分离” 的设计思想,为扩展更复杂的流程(如多分支、条件判断)奠定基础。
  • 可通过可视化代码(display(Image(...)))在 Jupyter 环境中查看流程图,直观理解节点关系。

总之,这段代码是 LangGraph 构建简单线性工作流的典型示例,清晰展示了 “状态定义→节点逻辑→图流程设计→执行与输出” 的完整链路。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐