LangGraph 的边(Edges)

   在 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值