上一篇讲了 node 和 edge 的基础。这一篇深入 edge 里最有用的一种——条件 edge(conditional edge)。
普通 edge 是「A 之后必定去 B」,是死的。条件 edge 是「A 之后根据情况去 B 或 C」,是活的。Agent 之所以能根据具体情况做不同的事,靠的就是条件 edge 做动态路由。
为什么需要条件 edge
先看一个没有条件 edge 会怎样。
假设一个客服 Agent,模型判断后,要么直接回答,要么调工具查订单。如果用普通 edge,流程是死的:模型 → 必定去某个固定节点。但你没法在「固定节点」里既处理「直接回答」又处理「调工具」——这是两件不同的事。
条件 edge 解决的就是这个:让「下一步去哪」这个决定,可以根据当前 state 动态做出。
条件 edge 怎么工作
条件 edge 由两部分组成:
- 一个路由函数:读当前 state,返回「下一步该去哪个节点」
- 一张映射表:路由函数返回的值,对应哪个节点
路由函数(state) → 返回 "need_tool"
映射表: {"need_tool": 工具节点, "direct_answer": 回答节点}
→ 下一步去工具节点
路由函数是纯逻辑——它不调模型、不做复杂操作,只看 state 里的某个字段(比如模型刚输出的消息里有没有 tool 调用),然后返回一个判断结果。这个判断结果通过映射表,决定实际的下一个节点。
经典应用:Agent 的「调工具还是直接答」
条件 edge 最经典的用法,是 Agent 的核心分支:模型这一步输出后,是去执行工具,还是直接给用户答案。
[模型节点] → 路由函数看:模型输出里有 tool 调用吗?
├─ 有 → 工具节点(执行工具)
└─ 没有 → END(直接回答)
工具节点 → 回到模型节点(带着工具结果,循环)
这就是 ReAct 模式(思考-行动)的图实现:模型判断要不要调工具,条件 edge 根据判断分流,工具执行完回到模型——一个循环就构成了能反复调工具的 Agent。这个模式后面 Phase 3 会反复用到。
条件 edge vs 把判断写进 node
有人会问:判断逻辑为什么不直接写在 node 里(node 里 if/else 决定调什么)?
因为写在 node 里,分支就看不见了。图的本意是让流程可见、可维护。把「去哪」的判断塞进「做什么」的 node,等于又回到了「钻进代码读 if/else」的老路。
条件 edge 把路由逻辑显式提到图的结构层:
- 一眼看出这个图有哪些分支
- 改路由不用动 node 内部逻辑
- 每条分支可以独立测试
上一篇说过这个分工原则,这里再强调:「做什么」放 node,「去哪」放条件 edge。放对地方,图的意图才清晰。
多路分支:不止二选一
条件 edge 不只能二选一,可以做多路分支。路由函数可以返回多种值,映射到多个不同节点:
路由函数(state) → "simple" / "complex" / "need_human"
分别去:简单处理节点 / 复杂推理节点 / 转人工节点
这种「按问题难度分流」的模式,在客服、工单系统里很常见——简单问题自动答,复杂问题深度推理,搞不定的转人工。条件 edge 让这种分流变成图结构的一部分,而不是埋在代码里的嵌套 if。
收束:条件 edge 是 Agent 灵活性的来源
这一篇讲了条件 edge:
- 它根据当前 state 动态决定下一步去哪
- 由「路由函数 + 映射表」组成,路由函数是纯逻辑
- 经典应用是 Agent 的「调工具还是直接答」分支
- 判断逻辑放条件 edge,不要塞进 node
- 支持多路分支,不止二选一
下一篇讲五要素里最容易被忽略、却最容易踩坑的——Reducer。
关于十三Tech
我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。我相信 AI 是程序员的最佳搭档。
如果你想跟完这套「图解 LangChain」,欢迎关注公众号 「十三Tech」。全系列 42 篇,会按认识基础、LangGraph 状态机、Agent 与 middleware、RAG 检索、Tools/MCP/记忆、生产化收束这条线更新。

