Appearance
课 1 · Graph Workflow vs Chain
本课目标
理解 Chain、ReAct、Graph Workflow 三种 Agent 架构的区别,以及 LangGraph 用图来组织 Agent 状态的核心动机。
先建立直觉:Chain 是流水线,ReAct 是循环,Graph 是有记忆的状态机。
三种 Agent 架构
Chain(顺序调用)
最简单:A → B → C,每步拿上一步的输出作为输入。
typescript
// 典型 Chain
const result1 = await queryRewrite(question)
const chunks = await retrieve(result1)
const answer = await generate(chunks)优点:简单直观,调试容易。
局限:没有循环,遇到需要多步推理或回溯的情况束手无策。
ReAct(思考-行动循环)
基础课模块 5 实现的模式:Reason → Act → Observe → Reason → ...
typescript
// 基础课 ReAct
while (!done) {
const decision = await reasonStep(messages) // 模型决定下一步
if (decision.type === 'tool_call') {
const result = await executeTool(decision) // 执行工具
messages.push({ role: 'tool', content: result })
} else {
done = true
}
}优点:支持多步工具调用,能处理动态任务。
局限:状态只有 messages 数组,结构简单但不灵活;没有分支;调试困难(不知道 Agent 在哪步出了问题)。
Graph Workflow(状态图)
LangGraph 的核心模型:
StateGraph 结构
State全局状态对象
→
Node A修改部分状态
→
条件边根据状态决定下一节点
Node B
→
Checkpoint每步保存状态
→
Node C 或 Node A
每个 Node 只修改状态的一部分,Checkpoint 在每步后保存完整状态。
优点:
- 可观测:每个 Node 的输入输出都记录在状态里,出问题能精确定位到哪步
- 可中断:任意 Node 执行后可以暂停,等待人工审批再继续
- 可分支:条件边可以根据状态动态决定走哪条路
- 可恢复:Checkpoint 记录每步状态,崩溃后可以从断点继续
Graph vs ReAct 的核心区别
| ReAct | Graph Workflow | |
|---|---|---|
| 状态 | messages 数组 | 结构化 State 对象 |
| 流程控制 | 模型决定是否继续 | 明确的 Node + Edge |
| 分支 | 无 | 条件边支持多分支 |
| 中断恢复 | 不支持 | Checkpoint 内置支持 |
| 调试 | 难(只有消息列表) | 容易(每步状态快照) |
什么时候用 Graph Workflow
不是所有 Agent 都需要 Graph Workflow。判断标准:
- ✅ 需要中断等待人工审批(如批准操作前暂停)
- ✅ 需要多分支(如根据问题类型走不同检索策略)
- ✅ 需要长时任务恢复(进程重启后继续未完成的任务)
- ✅ 团队需要可视化调试 Agent 执行过程
- ❌ 简单的单轮问答 → 普通 Chain 足够
- ❌ 标准 ReAct 工具调用 → AI SDK 的
maxSteps足够
进阶课的知识库 Agent 用混合方式:外层用 Graph 管理任务类型路由,内层用 ReAct 处理工具调用。
面试追问
Graph Workflow 和普通 Chain 有什么区别?
Chain 是静态的顺序执行,从 A 到 B 到 C,流程在代码里固定。Graph Workflow 是动态状态机:每个 Node 读取当前状态、修改状态,然后由边(可以是条件边)决定下一个 Node。关键区别在于"分支"和"循环"——Chain 做不到,Graph 原生支持。
LangGraph 为什么用 Graph 而不是传统状态机框架?
图的表达能力比顺序代码更强:节点可以任意互连,可以有环(循环),可以有条件分支。同时图结构天然可视化,容易让非技术成员理解 Agent 的决策流程。相比传统状态机框架,LangGraph 专门针对 LLM 场景做了 Reducer、Checkpoint 和 streaming 的集成。