条件边是 LangGraph 实现循环和分支的核心机制。通过 add_conditional_edges() 方法,开发者可以为某个节点指定一个路由函数,该函数接收当前状态并返回目标节点的名称。例如,在一个 RAG 流程中,可以根据检索结果的质量评分决定是直接输出答案还是重新搜索。条件边的路由逻辑是完全确定性的 Python 函数,不依赖 LLM 决策,保证了调试的可复现性。
循环通过条件边指向已访问过的上游节点来实现。典型的 ReAct 循环包含两个节点(LLM 节点和工具节点)和一条条件边:LLM 节点生成响应后,条件边检查是否存在 tool_calls,如果有则路由到工具节点执行,执行完后再回到 LLM 节点;如果没有则路由到结束节点。这种循环机制使得 Agent 可以进行多轮"思考-行动-观察"的迭代推理。
为防止无限循环,LangGraph 提供了 recursion_limit 配置项,默认值为 25。当图的执行步数超过限制时,会自动终止并抛出 GraphRecursionError 异常。在生产环境中,开发者通常会在状态中显式维护计数器,或通过条件边检测连续若干步没有实质性进展时强制退出,实现对循环退出的精细控制。
LangGraph 支持两种实现条件分支的方式:静态方式使用 add_conditional_edges() 在编译期声明所有可能的路由目标,图可视化清晰;动态方式使用 Command(goto=...) 在节点内部直接返回下一步的目标节点,适合节点内部已掌握全部决策信息的场景。两种方式最终生成的图拓扑相同,选择取决于代码组织的偏好。