LangChain vs LangGraph
两个框架的定位、能力边界和选型建议。这是面试中经常被问到的话题。
一句话总结
LangChain 是构建 LLM 应用的框架,LangGraph 是编排有状态 Agent 的运行时。
LangChain = 积木 + 设计模式 LangGraph = 用来拼积木的工作台 + 状态机
定位对比
| LangChain | LangGraph | |
|---|---|---|
| 定位 | 应用开发框架 | 编排运行时 |
| 核心抽象 | Chain(链)、Agent(智能体) | StateGraph(状态图) |
| 状态管理 | 简单 Memory | Checkpoint 持久化 |
| 控制流 | 线性 Chain + 简单 Router | 图结构 + 条件边 |
| 人机协同 | 不支持 | Interrupt 原生支持 |
| 流式 | Chain 级别 | Token/State/Event 多模式 |
| 时间旅行 | 不支持 | 基于 Checkpoint 原生支持 |
| 可替代性 | 可用其他框架替代 | 底层能力不可替代 |
能力边界
LangChain 擅长什么
python
# 简单链式调用
chain = prompt | model | output_parser
# 内置 Agent(快速上手)
agent = create_react_agent(model, tools)LangGraph 擅长什么
python
# 自定义状态和路由
class State(TypedDict):
messages: Annotated[list, add_messages]
need_approval: bool
def router(state) -> Literal["tool", "human", END]:
...
# 图结构编排
builder.add_conditional_edges("agent", router, ...)如何协作
在实际应用中,两者通常是配合使用而不是二选一:
python
from langchain.chat_models import init_chat_model # LangChain
from langchain.tools import tool # LangChain
from langgraph.graph import StateGraph, START, END # LangGraph
# LangChain 提供组件
model = init_chat_model("claude-sonnet-4-6")
@tool
def search(query: str):
"""搜索"""
return vectorstore.similarity_search(query)
# LangGraph 提供编排
builder = StateGraph(State)
builder.add_node("llm", lambda s: {"messages": [model.invoke(s["messages"])]})
builder.add_node("search", lambda s: {"messages": [search(s["messages"][-1].content)]})选型建议
选 LangChain
- 刚接触 LLM 开发
- 需求是简单问答、基础 RAG
- 快速上线原型
- 团队规模小、迭代快
选 LangGraph
- 需要多步骤有状态工作流
- 需要人工审批流程
- 需要持久化/容错
- Agent 逻辑复杂、分支多
- 生产化部署
两者都用
- 需要 LangChain 的模型/工具生态
- 需要 LangGraph 的编排能力
- 标准的组合方式
Deep Agents 的定位
Deep Agents 是基于 LangGraph 构建的 Agent Harness(智能体框架),提供:
- 子 Agent 管理
- 文件系统工具
- 上下文管理
- 沙箱执行
它比 LangGraph 更高层,但比 LangChain Agent 更灵活。
LangChain(框架)→ Deep Agents(Harness)→ LangGraph(运行时)常见误区
❌ LangGraph 是 LangChain 的升级版
- 它们是互补关系,不是替代关系
❌ 用 LangGraph 就不能用 LangChain
- 大部分 LangGraph 项目都配合 LangChain 使用
❌ 简单场景用 LangGraph 太重了
- 如果只是简单的 LLM 调用,确实 Chain 就够了