LangGraph vs LangChain

1.LangChain 是什么

LangChain 是 LLM 应用开发领域最早期、最广泛使用的框架之一,定位为通用 LLM 应用框架。它提供了丰富的组件来简化与大语言模型的交互:

  • Prompt 管理:模板化提示词构建与复用
  • Chain(链):将多个步骤(LLM 调用、工具调用、记忆等)串联成管道
  • Agent 抽象:让 LLM 决定是否调用工具
  • Tool(工具):标准化的外部能力扩展接口
  • Memory(记忆):对话历史的存储与检索
  • RAG 支持:检索增强生成的完整实现

LangChain 的核心抽象是 LCEL(LangChain Expression Language),一种链式组合语法,让开发者可以通过管道操作符 | 将多个组件串联起来:

prompt | model | output_parser

设计哲学:提供”乐高积木”式的组件,开发者按需拼接。


2.LangGraph 是什么

LangGraph 是 LangChain 生态的扩展,专门用于构建有状态、多步骤、带循环的智能体应用。它的核心理念是将工作流建模为有向图(Directed Graph),其中:

  • 节点(Node):每个计算步骤,如 LLM 调用、工具执行、状态判断
  • 边(Edge):节点之间的跳转逻辑
  • 状态(State):贯穿整个图执行过程的共享上下文对象
  • 条件边(Conditional Edge):根据当前状态动态决定下一步路由

关键特性:原生支持循环(Cycles),这是 LangGraph 与 LangChain 链式结构最本质的区别。

设计哲学:把智能体的工作流当作状态机来精确控制。


3.核心区别对比

维度 LangChain LangGraph
核心抽象 链(Chain):线性管道 图(Graph):节点 + 边 + 状态机
执行模式 线性顺序,有始有终 支持循环、分支、并行
状态管理 通过 Memory 组件管理对话历史 全局 State 对象在所有节点间共享
循环支持 ❌ 不支持循环 ✅ 原生支持
条件路由 有限(Chain 内部分支) ✅ 强大的条件边机制
多智能体 可以,但需要自行设计协调逻辑 可以,天然支持协作图结构
流程可控性 中等,依赖 Chain 配置 高,完全显式定义每一步
适用场景 简单 RAG、Prompt 链式组合 复杂智能体工作流、需要反思/修正的流程
学习曲线 较平缓,组件丰富易上手 较陡,需要理解图模型概念

4.为什么 LangGraph 是 LangChain 的”升级”

(1)链式结构的局限

LangChain 的 Chain 本质上是单向链表

输入 → Step 1 → Step 2 → Step 3 → 输出

这意味着:

  • 信息只能向前流动
  • 无法回头修正之前的输出
  • 难以实现”反思-修正”这类迭代行为

(2)图结构的优势

LangGraph 的图允许任意方向的连接,包括回边(back edge),从而天然支持:

  • 自我反思:Agent 生成回答后,评判节点认为质量不足,跳回重新生成
  • 工具调用循环:LLM 决定是否继续调用工具
  • 人机协作:在流程中间插入人工审核节点
  • 多智能体协作:多个 Agent 节点互相调用,形成协作网络

你的 notebook 中实现的搜索助手就是一个典型例子——虽然目前是线性流程(理解 → 搜索 → 回答),但如果需要加入”反思”节点判断答案质量,不足则重新搜索,LangGraph 的条件边可以轻松实现这个循环:

理解 → 搜索 → 回答 → 反思判断
↓ 质量不足
重新搜索
↓ 质量OK
结束

(3)Checkpointing 与状态持久化

LangGraph 内置了 checkpoint 机制(你的代码中 InMemorySaver()),支持:

  • 多轮对话状态恢复:即使进程重启也能恢复之前的执行状态
  • 分叉与回溯:可以从某个历史节点重新执行,探索不同路径
  • Human-in-the-loop:在任意节点暂停,等待人工输入后再继续

5.实战代码对比

LangChain 风格(链式)

from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain

llm = ChatOpenAI(model="gpt-4o-mini")

prompt = ChatPromptTemplate.from_messages([
("user", "回答用户问题:{question}")
])

chain = LLMChain(llm=llm, prompt=prompt)
result = chain.invoke({"question": "明天北京天气如何?"})

特点:线性、一次性、无法回头。

LangGraph 风格(图式)

from typing import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages

class SearchState(TypedDict):
messages: Annotated[list, add_messages]
user_query: str
search_query: str
search_results: str
final_answer: str
step: str

# 定义节点函数
def understand_node(state: SearchState) -> dict:
# ... LLM 调用 ...
return {"user_query": "...", "search_query": "...", "step": "understood"}

def search_node(state: SearchState) -> dict:
# ... Tavily 搜索 ...
return {"search_results": "...", "step": "searched"}

def answer_node(state: SearchState) -> dict:
# ... 生成最终答案 ...
return {"final_answer": "...", "step": "completed"}

# 构建图
workflow = StateGraph(SearchState)
workflow.add_node("understand", understand_node)
workflow.add_node("search", search_node)
workflow.add_node("answer", answer_node)

workflow.add_edge(START, "understand")
workflow.add_edge("understand", "search")
workflow.add_edge("search", "answer")
workflow.add_edge("answer", END)

app = workflow.compile()

特点:每一步都有状态、可循环、可分支、高度可控。


6.LangGraph 独有能力:条件边

条件边是 LangGraph 最强大的功能之一,让图的执行不再是固定路线,而是”智能调度”:

from langgraph.graph import END

def should_continue(state: SearchState) -> str:
"""根据状态决定下一步路由"""
if len(state["messages"]) < 3:
return "understand" # 循环回理解阶段
else:
return END # 结束流程

workflow.add_conditional_edges(
"answer", # 从 answer 节点出发
should_continue, # 判断函数
{
"understand": "understand", # 路由映射
END: END
}
)

这种能力在 LangChain 的 Chain 中几乎无法优雅地实现。


7.如何选择

场景 推荐
简单问答、Prompt 组合、RAG 管道 LangChain
需要工具调用的 Agent,且流程固定 LangChainLangGraph
需要自我反思、循环修正的工作流 LangGraph
多智能体协作系统 LangGraph
需要精确控制每一步的执行顺序和分支 LangGraph
快速原型、一次性脚本 LangChain
生产级、需要高可控性和可审计性 LangGraph

8.总结

LangChain 和 LangGraph 是互补关系,而非替代关系:

  • LangChain 是通用的 LLM 应用开发框架,提供组件库,简化单次调用和简单链式组合
  • LangGraph 是 LangChain 的超集,专门解决复杂智能体的状态管理、循环控制和协作编排问题

如果把 LLM 应用开发比作盖房子:

  • LangChain 提供了砖块、水泥、窗户——丰富的建筑材料
  • LangGraph 提供了脚手架、蓝图、施工计划——精确的施工控制

从你 notebook 中的搜索助手案例可以看到,LangGraph 让原本只能写死在代码里的”判断-搜索-回答”流程,变成了一个可视化、可调试、可扩展的图结构。当需求变得更加复杂(比如加入反思循环、并行搜索、人工审核等),LangGraph 的优势会愈发明显。

参考资料:DataWhale Hello-Agents 第六章 框架开发实践