创建时间: 2026-04-02最后更新: 2026-04-23

1. 条件边有一个不方便的地方

前面几篇用条件边完成了大量路由逻辑。

ReAct Agent 的工具循环、质量门控的重试循环,核心都是 addConditionalEdges

条件边能力上没问题,但用多了会发现一个不太方便的地方:路由逻辑和节点逻辑是分开的。

比如前面的重试循环:

separate-logic.ts
01
import type { GraphNode, ConditionalEdgeRouter } from '@langchain/langgraph'
02
03
// 验证节点:检查草稿质量,把结果写入状态
04
const validate: GraphNode<typeof State> = (state) => {
05
if (state.draft.length >= 30) {
06
return { isValid: true, feedback: '' }
07
}
08
return { isValid: false, feedback: '草稿太短' }
09
}
10
11
// 路由函数:读取验证结果,决定下一步
12
const checkResult: ConditionalEdgeRouter<typeof State, 'generate'> = (state) => {
13
if (state.isValid) return END
14
if (state.retryCount >= 3) return END
15
return 'generate'
16
}

validate 节点已经知道草稿合不合格了,但它没法直接说「下一步去哪」。它只能先把 isValid 写入状态,然后等条件边的路由函数再去读这个字段。

做同一个决策,代码分散在两个地方。

当图变复杂以后,这种分离会越来越明显:

  • 决策的上下文在节点里
  • 但路由的执行在条件边里
  • 两边要通过状态字段做间接通信

Command 就是用来解决这件事的:让节点直接说「我要更新这些状态,并且下一步走到那个节点」。

订阅后可阅读剩余内容
AI 电子伴侣企业级项目实战
已发布145计划发布120目标已完成121%