基本语法
graph.add_conditional_edges(
"router", # 从哪个节点出发
route_func, # 用哪个函数判断
{
"add": "add_node",
"sub": "subtract_node"
}
)
即:
add_conditional_edges(
从哪出发,
谁来判断,
判断结果对应去哪
)
路由函数
def route_func(state):
if state["operation"] == "+":
return "add"
else:
return "sub"
这里返回的 "add" / "sub" 为路线标签,并非节点执行结果。
路线映射
{
"add": "add_node",
"sub": "subtract_node"
}
- 左边是
route_func(state)的返回值 - 右边是实际要进入的节点名
因此:
router
│
▼
route_func(state)
│
├── "add" ─────→ add_node
│
└── "sub" ─────→ subtract_node
和 add_edge() 的区别
graph.add_edge("A", "B")
表示固定路线:
A → B
而:
graph.add_conditional_edges(...)
表示存在分支:
A
/ \
B C
固定路线用 add_edge();需要 if / else 分流用 add_conditional_edges()。
简化写法
如果路由函数直接返回节点名:
def route_func(state):
if state["operation"] == "+":
return "add_node"
return "subtract_node"
则可以省略映射字典:
graph.add_conditional_edges(
"router",
route_func
)
二级结论
- Node 负责执行,Router Function 负责判断,Conditional Edge 负责跳转。
add_conditional_edges()的本质是运行时动态选择下一节点。- 真正的 Agent 中,“要不要调用工具”“继续循环还是结束”也都是同一种路由机制。
- 当前学习阶段优先使用“路线标签 → 节点名”的显式映射写法,更容易看懂图结构。