
在 LangGraph 中,边(Edge) 是连接节点(Node) 的路径,定义了工作流的执行顺序和逻辑流向。边决定了从一个节点执行完毕后,下一步应该去哪个节点。
一、边的类型
LangGraph 提供了两种主要的边:
| 边类型 | 作用 | 适用场景 |
|---|---|---|
| 普通边(Normal Edge) | 固定的、无条件的跳转 | A 执行完 → 总是去 B |
| 条件边(Conditional Edge) | 根据条件动态选择下一个节点 | 根据状态的值决定下一步去哪 |
二、普通边(Normal Edge)
from langgraph.graph import StateGraph, END
# 创建图
graph = StateGraph(State)
# 添加节点
graph.add_node("node_a", node_a_function)
graph.add_node("node_b", node_b_function)
# 添加普通边:node_a 执行完 → node_b
graph.add_edge("node_a", "node_b")
# 从 node_b 到 END(结束)
graph.add_edge("node_b", END)
# 设置入口点
graph.set_entry_point("node_a")
执行流程

特点:确定性的,没有分支,总是按固定路线执行。
三、条件边(Conditional Edge)
from langgraph.graph import StateGraph, END
graph = StateGraph(State)
# 添加节点
graph.add_node("check_condition", check_function)
graph.add_node("process_true", true_function)
graph.add_node("process_false", false_function)
# 条件边:check_condition 执行后,根据返回值决定去哪个节点
def route_condition(state):
if state["condition"]:
return "process_true"
else:
return "process_false"
graph.add_conditional_edges(
"check_condition", # 源节点,从哪个节点出发
route_condition, # 路由函数:返回一个字符串(目标节点名)
{ # ③ 映射表:返回值 → 真实节点名
"process_true": "process_true", # 返回 "process_true" → 去 process_true
"process_false": "process_false", # 返回 "process_false" → 去 process_false
}
)
graph.set_entry_point("check_condition")
备注:也可以不写映射表,让路由函数直接返回真实节点名
执行流程

四、边的函数形式
1. 普通边函数
# add_edge 直接接受节点名称
graph.add_edge("node_a", "node_b")
2. 条件边函数
# 路由函数接收 state,返回字符串
def router(state):
if state["messages"][-1].type == "error":
return "handle_error"
elif state["is_complete"]:
return "summarize"
else:
return "continue_work"
graph.add_conditional_edges(
"think_node",
router,
{
"handle_error": "error_node",
"summarize": "summary_node",
"continue_work": "next_node"
}
)
3. 列表形式的路由器
# 也可以直接返回目标节点列表
graph.add_conditional_edges(
"split_node",
lambda state: ["branch_a", "branch_b"] if state["parallel"] else ["branch_a"],
{
"branch_a": "branch_a_node",
"branch_b": "branch_b_node",
}
)
五、特殊边:START 和 END
| 特殊节点 | 作用 |
|---|---|
START | 图的入口,从 START 连接到第一个节点 |
END | 图的出口,连接到 END 后图执行结束 |
# 设置入口节点
graph.set_entry_point("first_node") # 等价于添加 START → first_node
# 终止执行
graph.add_edge("last_node", END)
六、与节点(Node)的对比
| 概念 | 作用 | 示例 |
|---|---|---|
| 节点(Node) | 做事情(执行函数) | 调用 LLM、执行工具、处理数据 |
| 边(Edge) | 决定走哪条路(控制流) | A → B、A → B/C/D |
&spm=1001.2101.3001.5002&articleId=162881016&d=1&t=3&u=14114e05b04d427cb5de704024b8fdc2)
840

被折叠的 条评论
为什么被折叠?



