上一篇讲了 node 和 edge 的基础。这一篇深入 edge 里最有用的一种——条件 edge(conditional edge)

普通 edge 是「A 之后必定去 B」,是死的。条件 edge 是「A 之后根据情况去 B 或 C」,是活的。Agent 之所以能根据具体情况做不同的事,靠的就是条件 edge 做动态路由。

为什么需要条件 edge

先看一个没有条件 edge 会怎样。

假设一个客服 Agent,模型判断后,要么直接回答,要么调工具查订单。如果用普通 edge,流程是死的:模型 → 必定去某个固定节点。但你没法在「固定节点」里既处理「直接回答」又处理「调工具」——这是两件不同的事。

条件 edge 解决的就是这个:让「下一步去哪」这个决定,可以根据当前 state 动态做出

条件 edge:根据 state 动态决定下一步

条件 edge 怎么工作

条件 edge 由两部分组成:

  1. 一个路由函数:读当前 state,返回「下一步该去哪个节点」
  2. 一张映射表:路由函数返回的值,对应哪个节点
路由函数(state) → 返回 "need_tool"
映射表: {"need_tool": 工具节点, "direct_answer": 回答节点}
→ 下一步去工具节点

条件 edge 的工作机制

路由函数是纯逻辑——它不调模型、不做复杂操作,只看 state 里的某个字段(比如模型刚输出的消息里有没有 tool 调用),然后返回一个判断结果。这个判断结果通过映射表,决定实际的下一个节点。

经典应用:Agent 的「调工具还是直接答」

条件 edge 最经典的用法,是 Agent 的核心分支:模型这一步输出后,是去执行工具,还是直接给用户答案

[模型节点] → 路由函数看:模型输出里有 tool 调用吗?
              ├─ 有 → 工具节点(执行工具)
              └─ 没有 → END(直接回答)
工具节点 → 回到模型节点(带着工具结果,循环)

Agent 的核心分支

这就是 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/记忆、生产化收束这条线更新。

十三Tech公众号二维码