LangChain与LangGrap

结论:完全不互斥,二者是配套互补关系,绝大多数场景搭配使用

1. 二者定位区分

  • LangChain:组件库
    提供模型封装、Prompt、RAG、工具、文档加载、向量库等各类基础积木;
  • LangGraph:流程编排运行引擎
    负责复杂流程的状态、分支、循环、断点、人机交互,没有内置LLM、RAG等能力

2. 三种使用模式

  1. 只用 LangChain(简单线性流程)
    单纯链式问答、基础RAG,无循环、无分支,只用 prompt | llm 即可,不需要LangGraph。
  2. LangChain + LangGraph(主流生产用法)
    LangGraph 的节点里直接调用 LangChain 的模型、检索、工具组件,用LangGraph管控流程走向。
    # 示例逻辑
    def llm_node(state):
        # 这里的chat_chain就是langchain组装好的链
        resp = chat_chain.invoke(state)
        return {"answer": resp.content}
    
  3. 仅理论上纯LangGraph(几乎没人这么用)
    完全不用LangChain封装,自己裸写模型请求、手动实现RAG,代码冗余,无实际价值。

3. 为什么不会互斥

LangGraph 是同公司配套工具,设计初衷就是弥补 LangChain 原生 Chain 无法做循环、分支的短板;
LangGraph 官方文档、示例全部默认搭配 LangChain 组件开发,不存在冲突、抢占、二选一限制。

简单一句话总结

简单任务单用LangChain;复杂多步骤、带循环分支的Agent,LangChain提供能力,LangGraph负责调度

LangChain 与 LangGraph 互斥吗?

不互斥,反而是互补关系。

可以把它们理解成不同层级:

  • LangChain:负责"一个步骤怎么做"(调用 LLM、RAG、Tool、Prompt、Memory 等)。
  • LangGraph:负责"多个步骤如何组织"(状态机、工作流、多 Agent、循环、人工介入等)。

实际上,LangGraph 就是在 LangChain 生态基础之上构建的,大量 LangChain 的组件都可以直接在 LangGraph 中使用。


一个比喻

假设你要建一家餐厅:

  • LangChain = 厨房里的各种工具(炉子、刀具、菜谱)
  • LangGraph = 整个餐厅运营流程(点餐 → 做菜 → 上菜 → 退款 → 重做)

因此:

LangGraph
├── 节点 A(LangChain Chain)
├── 节点 B(RAG)
├── 节点 C(Tool Calling)
├── 节点 D(Agent)
└── 节点 E(Human Review)

LangChain 擅长什么?

例如一个普通的 RAG 流程:

用户
  │
Prompt
  │
Retriever
  │
LLM
  │
Output Parser

使用 LCEL(LangChain Expression Language)可以非常简洁地实现:

chain = prompt | retriever | llm | parser

这种属于线性流程(Pipeline)


LangGraph 擅长什么?

如果流程变成这样:

用户
  │
  ▼
Planner
  │
  ├── 搜索?
  ├── SQL?
  ├── 调工具?
  └── 不满意继续循环
          │
          ▼
      Reflection
          │
          ▼
     是否结束?
      │      │
      否      是
      │
      └────────►继续

这种流程具有:

  • 循环(Loop)
  • 分支(Branch)
  • 状态管理(State)
  • 人工审批(Human in the Loop)
  • 多 Agent 协作

对于这类复杂工作流,LangGraph 更加适合。


它们通常一起使用

例如:

from langgraph.graph import StateGraph

def search_node(state):
    return rag_chain.invoke(state)

def summarize_node(state):
    return summary_chain.invoke(state)

其中:

  • rag_chain 是 LangChain 构建的能力
  • summary_chain 是 LangChain 构建的能力
  • StateGraph 是 LangGraph 提供的工作流编排能力

也就是说,LangGraph 负责调度,LangChain 负责完成具体任务。


官方推荐如何使用?

目前官方推荐的大致思路如下:

使用 LangChain

适用于:

  • 简单聊天机器人
  • RAG
  • Prompt 编排
  • Tool Calling
  • 文档处理
  • 单次推理任务

使用 LangGraph

适用于:

  • 多 Agent
  • 长时间运行(Long-running Agent)
  • Human in the Loop
  • Reflection
  • ReAct Agent
  • 有状态工作流
  • 企业级 Agent

很多生产环境中的 Agent 都采用:

LangGraph
    │
 ├── LangChain
 ├── Tools
 ├── RAG
 ├── Memory
 └── LLM

如何选择?

场景 推荐
简单聊天机器人 LangChain
RAG LangChain(必要时配合 LangGraph)
Tool Calling LangChain
Prompt 编排 LangChain
多 Agent LangGraph
Human in the Loop LangGraph
长时间运行 Agent LangGraph
有循环、重试、状态管理 LangGraph
企业级 Agent 工作流 LangGraph + LangChain

总结

LangChain 与 LangGraph 并不是互斥关系,而是互补关系。

可以简单理解为:

  • LangChain:负责实现单个能力(调用 LLM、RAG、Tool、Memory 等)。
  • LangGraph:负责将多个能力组织成复杂、有状态、可循环的工作流。

实际开发中,最常见也是官方推荐的方式是:

使用 LangChain 构建节点能力,使用 LangGraph 编排整个 Agent 或工作流。

posted @ 2026-06-26 17:19  jerry-mengjie  阅读(75)  评论(0)    收藏  举报