LangChain 和 LangGraph 到底有什么区别?实际项目中应该怎么选

在做大模型应用时,很多开发者都会同时看到 LangChainLangGraph

两者名字相似,又属于同一个技术生态,很容易让人产生疑问:

  • 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进行更细粒度的编排。

相关推荐
kiss strong1 小时前
AI学习-langchain
学习·langchain
李燚1 小时前
ToolsNode 源码:LLM 返回 tool_calls 之后发生了什么(第53篇-E39)
agent·tool·multi-agent·eino·toolsnode
掉鱼的猫2 小时前
用 Solon ReActAgent 落地发票识别与智能报销
java·llm·agent
jvmind_dev3 小时前
第一章:AI Agent 如何重新定义 Java 性能分析
java·agent
Qiye3 小时前
【Hermes Agent】多Profile实战 + 机制深度解析
agent
又抓住你了3 小时前
LangChain概述与环境准备:从框架定位到第一个应用
langchain
小小放舟、4 小时前
PaiCLI-Demo:从零实现 ReAct Agent + Tool Call
java·后端·intellij-idea·springboot·agent·react·tool call
阿里云云原生4 小时前
WAIC 2026 阿里云主题论坛倒计时!
agent
阿里云云原生4 小时前
阿里云 AgentTeams 7月第一周产品动态
agent