Graph的基本流程理解

py 复制代码
# 完整代码
from typing import TypedDict
from langgraph.graph import StateGraph, START, END

## 定义状态
class MyState(TypedDict, total=False):
    node1: str  
    node2: str  
  • TypedDict:说明这个类是「类型描述字典」,用来约定state的数据结构,给IDE类型提示。
  • total=False :默认情况下 TypedDict 要求你必须提供所有字段;total=False 意思:字段可选,可以不存在。
  • node1和node2:state中的通道(channel) ,是state字典里的key,用来存放数据。⚠️ 注意:不是运行节点,这里只是刚好和节点同名,容易混淆。
py 复制代码
## 实例化图
workflow = StateGraph(MyState)

这句代码的意思是告诉graph:整个工作流所依据的数据容器,必须符合 MyState 这个结构。

py 复制代码
## 定义节点
def node1(state: MyState):
    return {"node1": "node1 result"}

def node2(state: MyState):
    return {"node2": "node2 result"}
  • state:当前最新的状态字典。图运行到这个节点时,框架自动把当前 state 传给函数。
  • return:返回的字典不是完整新 state,是增量补丁 patch。只会更新指定通道,不会覆盖整个state。
py 复制代码
## 添加节点和边
(
workflow.add_node("node1", node1)
.add_node("node2", node2)
.add_edge(START, "node1")
.add_edge("node1", "node2")
.add_edge("node2", END)
)

这个workflow的工作流为:START ------ node1 ------ node2 ------ END。

py 复制代码
## 编译及运行
graph = workflow.compile()
result = graph.invoke({})

运行过程

  1. invoke 传入初始 state:{}
  2. START 触发,进入节点 node1
  3. node1 收到 state{},返回 patch {"node1": "node1 result"}
  4. LangGraph 合并,state 变成{"node1": "node1 result"}
  5. 静态边流转,走到节点 node2
  6. node2 收到 state {"node1": "node1 result"},返回 patch {"node2": "node2 result"}
  7. LangGraph 合并,state 变成{"node1": "node1 result", "node2": "node2 result"}
  8. node2 执行完,走到 END,图终止,返回最终 state

疑惑自解

Q1: node节点在定义时,要传参state,但是workflow在add_node时,传入的node并没有带state参。 A1:workflow.add_node("node1", node1),这段代码,将node1函数在workflow进行登记,并将该节点命名为"node1"。 至于node1执行的时机,是在执行graph.invoke({}),图开始执行时:

  1. LangGraph 拿到当前全局 state
  2. 找到要执行的节点对应的函数(也就是我们注册进去的 node1)
  3. LangGraph 自动调用 node1(state) ,把当前 state 当做第一个参数塞进去。

核心区分:

  • 构建期:add_node只是登记函数,不执行,不需要传state
  • 运行期:invoke启动图,框架自动调用节点函数并传入state

概念区分(重点)

  • 节点(Node):def node1 这个函数,代表一段业务逻辑

  • 通道(Channel):state里的key,node1/node2,用来存储数据

    本示例只是名字碰巧一样,二者完全不是同一个东西。


相关推荐
hpoenixf5 小时前
当每个模块都能说“不”:我们为何要收回 Agent 系统里散落的否决权
agent
遇码6 小时前
流式调用中途断连别直接报错:瞬态故障识别、退避重试与中文根因诊断的搭建方法
大数据·人工智能·ai·rust·数据分析·大模型·agent
misty youth7 小时前
Agent-智能体工程方法论
人工智能·ai·llm·agent·智能体
空堂与归10 小时前
英伟达开源ASPIRE:机器人自己攒Skill
人工智能·机器人·开源·agent
Summer-Bright11 小时前
浏览器成了AI应用的新入口:智能体接管标签页之后,三本账谁买单
人工智能·chatgpt·agent·浏览器·智能体
Darling噜啦啦11 小时前
别再"盲盒式"调 Agent 了!LangSmith 全链路观测 + RAG 量化评估实战(LangGraph × Milvus)
agent·测试
李溪白12 小时前
RAG 进阶:Agentic RAG 与多智能体协作(系列二·第3篇):多模态 Agent
agent
方方洛12 小时前
ai-agent教程-14-附录A-术语表
人工智能·llm·agent
Morning的Tech12 小时前
LangGraph 的 Swarm 多智能体机制
人工智能·agent
用户31346721435412 小时前
learn-claude-code笔记4: Hooks — 挂在循环上,不写进循环里
llm·agent