在做大模型应用时,很多开发者都会同时看到 LangChain 和 LangGraph
两者名字相似,又属于同一个技术生态,很容易让人产生疑问:
-
LangGraph 是不是要替代 LangChain?
-
做 Agent 应该使用哪个?
-
已经用了 LangChain,还有没有必要学习 LangGraph?
-
两个框架能不能一起使用?
其实,LangChain 和 LangGraph 并不是二选一的关系。
简单来说:
LangChain 负责提供构建大模型应用需要的常用组件,LangGraph负责把这些组件编排成可控制、可恢复的复杂流程。
一、LangChain 是什么
LangChain 是一个面向大模型应用的开发框架。
它封装了很多开发过程中经常使用的能力,例如:
-
大模型调用;
-
Prompt 管理;
-
Tool 工具调用;
-
文档加载与切分;
-
向量数据库和 Retriever;
-
结构化输出;
-
Agent;
-
多模型适配。
如果只是想快速做一个可以调用搜索、数据库或业务接口的 Agent,LangChain 通常已经够用了。
例如,使用 LangChain 创建一个简单 Agent:
from langchain.agents import create_agent
def query_project(project_name: str) -> str:
"""查询项目当前进度"""
return f"{project_name}当前进度为80%"
agent = create_agent(
model="openai:gpt-5",
tools=[query_project],
system_prompt="你是一个项目管理助手",
)
result = agent.invoke({
"messages": [
{
"role": "user",
"content": "帮我查询输水隧洞项目的进度"
}
]
})
print(result)
开发者只需要提供模型、工具和提示词,框架就可以处理常见的 Agent 执行循环。
这种开发方式的优点很明显:代码少、上手快,适合快速完成原型或者 MVP。
在 LangChain 1.0 中,create_agent 已经成为创建 Agent 的标准接口,并且其底层运行机制建立在 LangGraph 之上。
二、LangGraph 是什么
LangGraph 是一个面向 Agent 的流程编排框架。
它把整个 Agent 任务表示成一张图,图中主要包含三个部分:
-
State:流程运行过程中共享的数据;
-
Node:具体执行某项任务的节点;
-
Edge:节点之间的跳转关系。
LangGraph 官方将其定位为一个低层级的 Agent 编排框架和运行时,重点解决长时间运行、有状态、流程复杂的 Agent 应用。
例如,一个工程项目审核流程可能是:
接收施工方案
↓
解析方案内容
↓
检查关键参数
┌──┴──┐
符合要求 不符合要求
↓ ↓
生成报告 人工复核
↓
修改后重审
这种流程不再是简单的"模型调用工具,然后生成答案",而是包含:
-
固定执行步骤;
-
条件判断;
-
循环;
-
人工审批;
-
状态保存;
-
失败恢复。
这正是 LangGraph 更擅长处理的场景。
一个简化的 LangGraph 示例:
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
class ReviewState(TypedDict):
content: str
passed: bool
result: str
def check_content(state: ReviewState):
passed = "安全措施" in state["content"]
return {"passed": passed}
def generate_report(state: ReviewState):
return {"result": "审核通过,生成审核报告"}
def manual_review(state: ReviewState):
return {"result": "缺少安全措施,需要人工复核"}
def route_after_check(state: ReviewState):
return "generate_report" if state["passed"] else "manual_review"
builder = StateGraph(ReviewState)
builder.add_node("check_content", check_content)
builder.add_node("generate_report", generate_report)
builder.add_node("manual_review", manual_review)
builder.add_edge(START, "check_content")
builder.add_conditional_edges(
"check_content",
route_after_check,
{
"generate_report": "generate_report",
"manual_review": "manual_review",
},
)
builder.add_edge("generate_report", END)
builder.add_edge("manual_review", END)
graph = builder.compile()
从代码中可以看出,LangGraph 更像是在编写一个状态机。
开发者需要明确告诉框架:
-
当前有哪些状态;
-
每个节点负责什么;
-
节点执行完后去哪里;
-
什么条件下进入下一条分支。
LangGraph 的核心 Graph API 也是围绕 State、Node 和 Edge 设计的。
三、LangChain 和 LangGraph 的核心区别
| 对比项 | LangChain | LangGraph |
|---|---|---|
| 定位 | 大模型应用开发框架 | Agent 流程编排框架 |
| 抽象层级 | 较高 | 较低 |
| 上手难度 | 相对简单 | 相对较高 |
| 核心概念 | Model、Prompt、Tool、Retriever、Agent | State、Node、Edge、Graph |
| 流程控制 | 使用框架提供的标准 Agent 循环 | 开发者显式定义执行流程 |
| 条件分支 | 可以实现,但不适合过于复杂的流程 | 原生适合条件路由 |
| 循环执行 | 通常由 Agent 内部控制 | 可以明确设计循环路径 |
| 状态管理 | 多数情况由框架封装 | 状态是核心概念 |
| 断点恢复 | 通过底层机制实现 | 原生支持 Checkpoint |
| 人工审批 | 简单场景可以实现 | 更适合复杂的人机协同 |
| 多 Agent | 支持常见模式 | 更适合自定义多 Agent 流程 |
| 适用场景 | 快速开发、普通 RAG、工具调用 Agent | 长任务、复杂流程、生产级 Agent |
两者最大的区别,不在于能不能实现某个功能,而在于开发者能够控制到什么程度。
使用 LangChain 时,更多是在配置一个 Agent:
给模型配置哪些工具?
使用什么提示词?
返回什么格式?
使用 LangGraph 时,更多是在设计一套执行系统:
任务从哪个节点开始?
什么情况下进入人工审批?
执行失败后从哪里恢复?
多个节点能否并行执行?
中间结果保存在哪里?
四、一个容易理解的比喻
可以把 LangChain 理解成一套已经封装好的汽车组件:
-
模型相当于发动机;
-
Tool 相当于车辆可以使用的功能;
-
Prompt 相当于驾驶规则;
-
Agent 相当于驾驶员。
而 LangGraph 更像道路交通和调度系统:
-
从哪里出发;
-
经过哪些路口;
-
什么情况下改变路线;
-
哪里需要停车等待;
-
发生故障后从哪个位置继续。
只想快速把车开起来,LangChain 更方便。
需要管理复杂路线、多个车辆和中途调度,LangGraph 更合适。
五、LangChain 和 LangGraph 并不是二选一
实际项目中,更常见的方式是两个框架一起使用。
例如:
LangChain
├── 调用大模型
├── 定义工具
├── 连接知识库
├── 处理结构化输出
└── 构建标准 Agent
LangGraph
├── 编排任务步骤
├── 管理共享状态
├── 设置条件分支
├── 控制循环和并行
├── 加入人工审批
└── 保存与恢复任务
可以在 LangGraph 的节点中调用 LangChain 提供的模型、Tool、Retriever 或 Agent。
反过来,LangChain 的标准 Agent 本身也建立在 LangGraph 的运行机制之上。
官方文档给出的思路也比较明确:普通场景可以先从 LangChain 的高层接口入手,需要精细控制时,再下沉到 LangGraph。
六、什么情况下使用 LangChain
下面这些项目,建议优先使用 LangChain:
1. 普通知识库问答
流程通常是:
用户提问
↓
检索知识库
↓
拼接上下文
↓
模型生成答案
这种流程步骤少、分支不复杂,没有必要一开始就引入图编排。
2. 简单工具调用 Agent
例如让 Agent 根据问题选择:
-
天气查询;
-
数据库查询;
-
文件搜索;
-
计算器;
-
企业业务接口。
只要流程主要由模型自行选择工具,使用 create_agent 会更直接。
3. 快速验证业务想法
在需求还没有完全确定时,重点通常是验证:
-
模型能不能理解业务问题;
-
工具调用是否准确;
-
知识库效果是否满足要求;
-
整体方案有没有落地价值。
这个阶段使用 LangChain 能减少前期开发工作。
七、什么情况下使用 LangGraph
遇到下面这些情况,可以考虑直接使用 LangGraph。
1. 流程中存在大量条件分支
例如:
识别问题类型
├── 技术问题 → 查询技术知识库
├── 合同问题 → 查询合同数据库
├── 财务问题 → 调用财务系统
└── 高风险问题 → 转人工处理
当分支越来越多时,使用图来表达比在代码里不断添加 if...else 更容易维护。
2. 需要人工审批
例如:
-
Agent 生成合同后,需要法务审批;
-
Agent 准备发送邮件前,需要用户确认;
-
Agent 修改生产数据前,需要管理员授权;
-
Agent 生成施工方案后,需要工程师复核。
LangGraph 可以在指定节点中断流程,等待人工处理后再继续运行。
3. 任务执行时间较长
部分 Agent 任务可能持续几分钟、几小时,甚至更长时间。
如果执行过程中出现网络错误、服务重启或人工暂停,就需要保存中间状态,避免整个任务从头执行。
LangGraph 的持久化层可以通过 Checkpoint 保存图状态,为人工介入、故障恢复和历史状态调试提供基础。
4. 同时包含固定流程和模型决策
实际业务很少完全依赖模型自由发挥。
更常见的情况是:
固定步骤
↓
模型判断
↓
调用工具
↓
固定校验
↓
人工审批
↓
执行操作
LangGraph 可以把确定性 Workflow 和动态 Agent 放在同一张图中。
官方文档中也对两者进行了区分:Workflow 一般采用预先确定的执行路径,Agent 则会动态决定执行步骤和工具使用方式。
八、实际项目中的选择建议
不建议一开始就为了"架构完整"而使用 LangGraph。
如果整个项目只有:
-
一个模型;
-
几个工具;
-
一个知识库;
-
简单的对话记忆;
直接使用 LangChain 通常更省事。
当项目逐渐出现下面的问题时,再考虑引入 LangGraph:
-
Agent 经常走错执行路径;
-
业务分支越来越多;
-
中间过程难以调试;
-
需要保存任务状态;
-
需要人工确认后继续执行;
-
多个 Agent 之间需要协作;
-
某些步骤必须严格按照顺序执行。
可以使用下面这套判断方式:
只是调用模型和工具?
└── 使用 LangChain
需要明确控制执行步骤?
└── 使用 LangGraph
流程简单,但未来可能变复杂?
└── 先使用 LangChain,复杂后再引入 LangGraph
已经确定存在审批、循环、恢复和多 Agent?
└── 直接使用 LangGraph
九、总结
LangChain 和 LangGraph 解决的是不同层面的问题。
LangChain 关注的是如何快速构建大模型应用。
它提供模型、Prompt、Tool、Retriever、Agent 等常用组件,适合普通 RAG、工具调用和快速原型开发。
LangGraph 关注的是如何控制 Agent 的执行过程。
它通过 State、Node 和 Edge 描述流程,适合复杂分支、循环执行、人工审批、多 Agent 协作以及长时间运行的任务。
两者的关系可以概括为:
LangChain 提供能力,LangGraph 负责组织这些能力。
对于大多数项目,比较合理的做法是从 LangChain 开始。业务流程简单时,不必过早增加架构复杂度;等到默认 Agent 模式无法满足流程控制要求时,再使用 LangGraph进行更细粒度的编排。