LangChain 和 LangGraph 有什么区别?
- 标签:AI、大模型、LangChain、LangGraph
🏛 业务架构师
一句话区分:LangChain 是组件库+线性链,LangGraph 是状态机图。
- 抽象层级:Chain 把组件串成单向流水线(A→B→C),数据一次性流过;LangGraph 把应用建成有环有分支的状态图,支持循环、回退、并行、中断恢复。
- 控制权:Chain 里流程写死;LangGraph 里条件边按状态动态路由,且每个节点可插入人工审批,天然支持 human-in-the-loop。
- 状态管理:Chain 无内建状态持久化;LangGraph 的 Checkpoint 让长流程可暂停可恢复——这对跑几分钟甚至跨天的业务流程(工单处理、审批流)是决定性能力。
- 定位:LangChain 适合 RAG 问答、文本处理管线这类确定性任务;LangGraph 适合 Agent、多步骤工作流、多 Agent 协作这类有循环和分支的任务。
业务决策建议:不是"二选一",而是"按流程复杂度分层"——简单固定的链路用 LCEL 一行搞定,别上图;一旦业务流程出现"重试、审批、升级转人工、多角色协作",直接 LangGraph。我的经验法则:凡是要画流程图给业务方确认的流程,就该用 Graph 实现;凡是三步以内的管道,Chain 足矣。技术复杂度要匹配业务复杂度,超前抽象是负资产。
🏗 系统架构师
一句话区分:LangChain 是组件库 + 线性管道(DAG),LangGraph 是带循环和状态的状态机编排(有环图)。前者回答"怎么把组件串起来",后者回答"怎么把流程控制起来"。
四个维度对比:
- 控制流:Chain 无环、固定顺序;Graph 支持循环、条件分支、跳转——Agent 的"试错-观察-再决策"只有图能自然表达;
- 状态管理:Chain 状态在管道内隐式传递;Graph 有显式共享 State + reducer 合并策略 + checkpoint 持久化,状态可恢复、可回放;
- 可靠性机制:Graph 内置中断恢复、human-in-the-loop(interrupt 挂起等人输入再继续)、时间旅行调试——这些是生产级长任务的刚需,Chain 没有;
- 适用边界:RAG 问答、摘要、固定流程 → Chain/LCEL 足够;ReAct Agent、多 Agent 协作、需要重试循环和人工审批的流程 → Graph。
我的架构决策规则很简单:流程是开发者可预定义的(哪怕有分支)用 Chain;流程需要模型在运行时决定走几步、走哪条路、要不要重来,就必须 Graph。两者不是替代关系——LangGraph 里的节点内部照样用 LangChain 组件,是"框架分层"而不是"技术二选一"。
💻 全栈开发专家
本质区别一句话:LangChain(LCEL)是 DAG 流水线,路径写死;LangGraph 是带循环的状态机,路径运行时决定。
- 表达能力:LCEL
a | b | c无环、无分支循环语义;LangGraph 支持条件边、循环、并行 fan-out、人工中断恢复,能表达「Agent 反复试错」这种拓扑。 - 状态管理:Chain 每次调用无状态(记忆靠外挂);LangGraph 的 State 贯穿全程 + Checkpointer 每步持久化,断点恢复是内建的。
- 可靠性控制:LangGraph 有 recursion_limit、retry 策略、超时、time-travel 调试,为生产 Agent 设计。
怎么选(我的实际决策线):
- 固定流程 RAG(检索→生成)、单步工具调用 → LCEL 就够,别杀鸡用牛刀;
- Agent loop(工具循环)、多 Agent 协作、需要人工审批中断(human-in-the-loop)、长任务要断点续跑 → LangGraph;
- 两者是互补关系:LangGraph 节点内部照样可以用 LCEL 组件,官方定位就是「Chain 做组件,Graph 做编排」。
迁移提示:老 AgentExecutor 那套已被官方标记淘汰,新项目直接 create_react_agent(LangGraph 版)。