langchain 和 langgraph 和 react

先一句话分清三者不属于同一维度:

LangChain:LLM 应用开发工具框架(上层组件库)

LangGraph:Agent 工作流编排运行时(底层执行引擎)

ReAct:一种Agent 算法 / 范式(思考 + 行动循环逻辑)

通俗层级:

ReAct(一种智能体运行逻辑)

↓ 可以用两种方式实现

  • 简易实现:LangChain 内置 ReActAgent
  • 自定义可控实现:用 LangGraph 从零搭建 ReAct 循环

一、逐个定义

  1. LangChain

LangChain:一套模块化开发库,提供构建 LLM 应用的各类组件

核心组件:LLM 封装、Prompt 模板、Memory、Tools、Chains、内置 Agent、RAG 工具、LCEL 表达式语言。

  • 编程模型:链式(Chain),默认偏向线性流程
  • Agent:内置封装好的 ReActAgent、OpenAI ToolCalling Agent,开箱即用
  • 优点:上手快、组件丰富,适合简单 RAG、问答、固定流水线
  • 短板:原生 Chain 很难灵活实现复杂循环、分支、任务暂停、持久化断点
  1. LangGraph

LangGraph:LangChain 同公司推出的状态图编排引擎

核心抽象:StateGraph(状态 + 节点 + 条件边)

  • 支持:循环、分支、并行、中断(人工介入 HITL)、状态持久化 Checkpointer、任务断点续跑
  • 定位:底层运行时,可以独立使用,也可以直接复用 LangChain 的 LLM、Tool、Prompt
  • LangChain v1 新版内置 Agent 底层其实就是基于 LangGraph 实现

关系类比:

LangChain = 各类零件(电机、传感器)

LangGraph = 电路板 / 控制器,可以自由把零件连接成带循环、分支的复杂电路

Chain线性流程 vs Graph图流程

  1. ReAct(Reasoning + Acting)

ReAct 是论文提出的 Agent 范式(不是代码库!)

核心循环:

Thought(思考) → Action(调用工具) → Observation(工具返回结果) → 循环直至输出答案

Thought: 我需要搜索实时股价

Action: search("苹果公司当前股价")

Observation: 192.3 USD

Thought: 信息足够,可以整理答案

Final Answer: ...

特点:

  • 让模型显式写出思考过程,降低幻觉
  • 依靠外部工具获取实时信息,弥补 LLM 静态知识缺陷
  • 只是一套执行逻辑,不绑定任何框架

✅ 可以用 LangChain 一行调用内置 ReActAgent

✅ 也可以手动用 LangGraph 搭建节点,自己实现 ReAct 循环

二、三者关系图

【业务目标:实现一个能搜索资料的智能助手】

↓ 采用 ReAct 范式(决定智能体怎么思考行动)

├─快速方案:LangChain.create_react_agent()

│ 底层内部封装了简易循环

└─高度自定义方案:LangGraph 手动搭建

节点1:LLM生成Thought/Action

节点2:执行Tool

条件边:信息不足→回到LLM;信息充足→结束

三、关键对比表

四、如何选型(工程建议)

1.简单 RAG、问答、一次性工具调用

直接 LangChain LCEL / 内置 ReActAgent,开发最快。

2.需要:多轮反思、分支判断、中途人工审核、长时间任务、失败重试

LangGraph + LangChain 组件(LLM/Tools),自己搭建 ReAct 循环,获得完全控制权。

3.误区澄清

❌ 不是 "LangGraph 替代 LangChain";

✅ LangGraph 负责流程怎么跑,LangChain 提供各类 AI 基础组件;

✅ ReAct 只是你选择让智能体采用哪种思考模式。

五、极简代码示意(直观感受差异)

方式 1:LangChain 内置 ReAct(开箱即用)

from langchain.agents import create_react_agent

agent = create_react_agent(llm, tools, prompt)

agent.invoke({"input": "查询今天油价"})

方式 2:LangGraph 手写一套 ReAct 逻辑(完全可控)

from langgraph.graph import StateGraph, END

1.定义状态

2.添加节点:call_llm、run_tools

3.添加条件边:是否需要继续调用工具

4.编译graph,执行

相关推荐
触底反弹1 小时前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js
moMo2 小时前
状态管理第一步:React useState 核心行为完全拆解
react.js
会周易的程序员3 小时前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm
带娃的IT创业者3 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
新中地GIS开发老师5 小时前
零基础WebGIS开发入门 | GeoJSON数据持久化
前端·javascript·gis·webgis·三维gis开发
blns_yxl5 小时前
正则驱动实时表单验证(HTML+CSS+JS+正则)
javascript·css·html
Quz6 小时前
QML 与 JavaScript 交互方式:内联函数、外部文件、信号槽与工作线程
javascript·qt
吃饱了得干活6 小时前
LangChain Agent 高级玩法:命名、结构化输出与流式模式
langchain·llm·agent
拾年2756 小时前
React 组件通信完全指南 —— 从 Todo App 搞懂父子组件那点事
react.js