流程控制与路由

掌握 LangGraph 的核心路由能力:条件分支、循环与并行执行

📚 学习目标

学完这篇文章后,你将能够:

  • 使用 Conditional Edges 实现条件分支
  • 构建 Loop(循环)工作流
  • 实现 Parallel(并行)执行模式
  • 理解 LangGraph 的四种核心流程模式

前置知识

在开始学习之前,建议先阅读:


1️⃣ 超越线性流程

目前为止,我们的图都是一条直线。但现实世界的业务逻辑往往更复杂:

  • "如果是 VIP 用户,走高级通道;否则走普通通道。"(分支)
  • "如果生成的代码有 Bug,重写一遍。"(循环)
  • "同时搜索 Google 和 Bing,然后合并结果。"(并行)

LangGraph 提供了强大的工具来支持这些模式。

2️⃣ 分支流程 (Branching)

我们使用 addConditionalEdges 来实现根据条件选择路径。

语法结构

graph.addConditionalEdges(
    'sourceNode',   // 1. 从哪个节点出发
    shouldContinue, // 2. 路由函数:决定去哪里
    {               // 3. 映射表(可选,TypeScript下推荐提供以获得类型提示)
        'routeA': 'nodeA',
        'routeB': 'nodeB',
        'end': END
    }
)

路由函数示例

const shouldContinue = (state: typeof StateAnnotation.State) => {
    // 根据状态中的 input 判断
    if (state.input.includes("B")) {
        return 'nodeB'; // 返回目标节点的名称
    } else if (state.input.includes("C")) {
        return 'nodeC';
    }
    return END; // 或者直接结束
}

3️⃣ 循环流程 (Loops)

循环本质上就是一种特殊的条件分支:一条指向上游节点自身的边。

为了防止无限循环,我们通常需要在状态中维护一个计数器。

// 1. 状态中增加计数器
const StateAnnotation = Annotation.Root({
    loopCount: Annotation<number>({
        reducer: (a, b) => a + b, 
        default: () => 0
    }),
    // ...
})

// 2. 节点逻辑:每次执行增加计数
const processingNode = (state) => {
    return { loopCount: 1, ... };
}

// 3. 路由逻辑
const checkLoop = (state) => {
    if (state.loopCount < 3) {
        return 'processingNode'; // 继续循环
    }
    return END; // 退出循环
}

// 4. 构建循环
graph.addConditionalEdges('processingNode', checkLoop);

4️⃣ 并行流程 (Parallel Execution)

并行执行是通过让多条边从同一个节点出发来实现的。LangGraph 会自动等待所有并行分支完成后,再进入汇聚节点。

const graph = new StateGraph(StateAnnotation)
    .addNode('nodeE', nodeE)
    .addNode('nodeF', nodeF)
    .addNode('nodeH', nodeH) // 汇聚节点
    
    // 并行分支:START 同时指向 E 和 F
    .addEdge(START, 'nodeE')
    .addEdge(START, 'nodeF')
    
    // 汇聚:E 和 F 都指向 H
    .addEdge('nodeE', 'nodeH')
    .addEdge('nodeF', 'nodeH')
    
    .addEdge('nodeH', END)

注意:对于并行节点产生的状态更新,通常需要使用追加模式(如数组 Reducer)的字段,以避免并发写冲突(Race Conditions)。

💡 练习题

  1. 场景题:设计一个“文章润色”工作流。如果文章超过 1000 字,将其切分为两部分并行处理,然后再合并;如果少于 1000 字,直接处理。你会用到哪些流程模式?
    • 参考答案:分支(判断字数) + 并行(处理长文) + 线性(处理短文)。

📚 参考资源

项目代码


✅ 总结

核心要点

  • addConditionalEdges 是实现动态流的关键。
  • 循环是构建自我修正(Self-Correction)Agent 的基础。
  • 并行执行可以显著提高复杂任务的效率。
  • 所有的复杂图都是由这些基本模式(线性、分支、循环、并行)组合而成的。

下一步:在下一篇文章《流式输出》中,我们将学习如何实时获取图的执行状态,这对于提升用户体验至关重要。

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page