前言

LangChain和LangGraph的核心区别在于LangChain是面向线性任务流的组件化框架,而LangGraph是面向复杂状态管理的图结构工作流引擎。两者并非替代关系,而是LangChain提供基础组件能力,LangGraph负责复杂流程编排

  • LangChain:全栈 LLM 应用开发的 "基础底盘",提供连接大模型与外部世界的标准化组件库
  • LangGraph:聚焦 "非线性、循环、多角色协作" 的 "智能工作流引擎",专门解决 LangChain 在复杂 Agent 场景下的局限性
  • LangSmith:全生命周期可观测性与调试平台
  • LangServe:API 部署与服务化框架

形象类比:如果把构建 AI 应用比作造车,LangChain 是轮胎、发动机、方向盘等零部件供应商;LangGraph 是整车的底盘和控制系统,负责将这些零部件组装成能自主决策、灵活应对复杂路况的智能汽车;LangSmith 是 4S 店的诊断和维护系统

一.核心架构

1.1 设计范式

  • LangChain 采用链式(Chain)架构
    数据按固定顺序单向流动(A → B → C),适合输入→处理→输出的线性流程。其核心是模块化组件(如提示词模板、工具调用)的串联,通过LCEL(LangChain Expression Language)声明式组合,开发效率高但缺乏动态路径调整能力。

  • LangGraph 采用图结构(Graph)架构
    将工作流定义为节点(Node)和边(Edge)的有向图,支持条件分支、循环回溯和并行执行。其本质是状态驱动的状态机,能处理“思考→行动→观察→再思考”的闭环逻辑,例如代码生成失败后自动跳回修正节点

1.2 状态管理机

  • LangChain 的状态传递依赖上下文或Memory模块
    仅支持短期对话历史管理(如ConversationBufferMemory),状态随函数调用传递,难以跨多步骤持久化。适合单轮任务或简单多轮对话,但无法可靠处理长周期任务中的状态回溯。

  • LangGraph 显式维护中央状态对象(State)
    所有节点共享同一份状态数据,支持状态快照、故障恢复和人工干预。例如在审批流程中,若某步骤被驳回,可直接回滚到上一状态重新处理,而无需从头开始。

二 关键能力对比

2.1  控制流支持

  • LangChain 仅支持有限条件分支
    通过ConditionalPromptSelector等工具可实现简单跳转,但循环逻辑需手动用while封装,代码易碎片化。例如实现“代码生成→测试→失败则重试”需外部循环控制。

  • LangGraph 原生支持复杂控制流
    • 条件边(Conditional Edge):根据状态动态选择下一节点(如置信度<75%时触发重新检索)。

    • 循环机制:允许节点跳回前置步骤(如论文评审中“检查不通过→反馈修改→重新检查”闭环)。

    • 人工介入(Human-in-the-loop):关键步骤可暂停等待人工确认,再恢复执行。

2.2  适用场景边界

适合 LangChain 的场景:

  • 标准化的一次性任务:文本翻译、摘要生成、基础RAG问答(检索→生成单向流程)。
  • 快速原型验证:利用丰富组件库(文档加载器、向量库接口)5分钟内搭建MVP
  • 无状态工具链:邮件自动回复、数据提取等无需跨步骤共享状态的轻量任务。

适合 LangGraph 的场景:

  • 自主Agent系统:需反复“感知→决策→行动”的闭环(如代码生成器自动修复报错)。
  • 多Agent协作:研究员Agent生成报告→编辑Agent润色→审核Agent终审的角色分工流程
  • 长周期任务管理:需人工审批的贷款流程、需多次迭代的科研实验设计,依赖状态持久化和回溯

2.3 二者对比

对比维度 LangChain 1.0 LangGraph 1.0 技术影响
执行模型 线性链与简单分支 有向图 (支持循环) LangGraph 能实现 "自我反思直到满足条件",这是智能的核心特征
状态管理 轻量 Memory 组件,独立维护 原生内置 StateGraph,全局共享状态 LangGraph 避免了长链路中的信息丢失,支持增量更新和 Reducer 合并
循环支持 需手动实现 (递归或外部 while) 原生支持,通过边指向自身或前序节点 LangGraph 天然适合 ReAct、Reflexion 等需要迭代的 Agent 模式
条件分支 通过 RunnableBranch 实现,嵌套后可读性差 原生支持,节点函数直接返回下一节点名 LangGraph 的分支逻辑更清晰,易于调试和维护
并发处理 有限,依赖外部 asyncio 机制 原生支持并行节点执行 官方压测显示 LangGraph 并发吞吐量比 LangChain 高 3 倍
持久化能力 基础支持,需手动实现 内置检查点 (Checkpoint) 机制 LangGraph 支持断点续跑、跨会话记忆和故障恢复
人机协作 有限支持 原生支持 Human-in-the-Loop LangGraph 可在执行中任意节点暂停,等待人类审批后继续
多智能体 需要手写大量协调逻辑 内置 Supervisor/Swarm 模式 LangGraph 大幅降低了多智能体协作系统的开发复杂度
可观测性 有限的日志输出 与 LangSmith 深度集成的图可视化 LangGraph 能清晰展示每一步的执行路径和状态变化

三 应用场景

3.1 LangChain 的黄金应用场景

LangChain 在以下场景中表现最佳,能够以最少的代码实现强大的功能:

3.1.1. 标准 RAG (检索增强生成) 应用

  • 文档问答系统
  • 企业知识库搜索
  • 产品手册智能助手
  • 法律合同查询

3.1.2. 单轮次文本处理任务

  • 文本摘要与翻译
  • 数据提取与结构化
  • 内容分类与情感分析
  • 文案生成与润色

3.1.3. 简单工具调用应用

  • 天气查询机器人
  • 计算器助手
  • 邮件发送与日程安排
  • 简单的 API 调用代理

3.1.4. 快速原型验证

  • 产品概念验证
  • 技术可行性研究
  • 演示系统开发

3.2 LangGraph 的不可替代场景

当你的应用遇到以下任何一种情况时,LangGraph 将成为必然选择:

3.2.1. 需要循环与反思的自主 Agent

  • 代码生成与调试 (生成 - 测试 - 修复循环)
  • 数学问题求解 (多步推理与验证)
  • 研究助手 (搜索 - 分析 - 再搜索)
  • 写作助手 (草稿 - 修改 - 润色迭代)

3.2.2. 多智能体协作系统

  • 软件开发团队 (产品经理 + 程序员 + 测试员)
  • 内容创作团队 (研究员 + 作者 + 编辑 + 设计师)
  • 金融分析团队 (数据分析师 + 风险评估师 + 投资顾问)
  • 客服团队 (自动客服 + 人工客服 + 专家支持)

3.2.3. 长时运行与复杂业务流程

  • 客户服务工单处理系统
  • IT 运维自动化 (故障检测 - 诊断 - 修复)
  • 供应链管理与优化
  • 医疗问诊与分诊系统

3.2.4. 生产级企业应用

  • 需要可审计性和可追溯性的系统
  • 需要高可靠性和故障恢复能力的系统
  • 需要人工介入审批的敏感操作
  • 需要长期记忆和用户个性化的系统

四 代码示例对比

4.1 LangChain 实现写代码

from deepseek_test import deep_llm as llm
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import subprocess


# 定义提示词模板
generate_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个Python专家,请根据用户需求生成代码。只返回代码,不要其他解释。"),
    ("human", "{query}")
])

verify_prompt = ChatPromptTemplate.from_messages([
    ("system", "请分析以下代码执行结果,判断是否正确。如果有错误,请指出问题并提供修正建议。"),
    ("human", "代码:{code}\n执行结果:{result}")
])

# 构建链
generate_chain = generate_prompt | llm | StrOutputParser()
verify_chain = verify_prompt | llm | StrOutputParser()


# 手动实现循环
def generate_and_verify(query, max_retries=3):
    code = generate_chain.invoke({"query": query})

    for i in range(max_retries):
        try:
            # 执行代码
            result = subprocess.run(
                ["python", "-c", code],
                capture_output=True,
                text=True,
                timeout=5
            )

            if result.returncode == 0:
                return f"代码执行成功!\n代码:\n{code}\n输出:\n{result.stdout}"

            # 验证并修正
            feedback = verify_chain.invoke({"code": code, "result": result.stderr})
            code = generate_chain.invoke({"query": f"{query}\n\n之前的代码有错误:{feedback}\n请重新生成正确的代码。"})

        except Exception as e:
            feedback = f"执行异常:{str(e)}"
            code = generate_chain.invoke({"query": f"{query}\n\n之前的代码有错误:{feedback}\n请重新生成正确的代码。"})

    return f"经过{max_retries}次尝试,未能生成正确的代码。\n最后一次尝试的代码:\n{code}"


# 使用
print(generate_and_verify("写一个函数计算斐波那契数列的第n项"))

输出结果:

4.2 LangGraph 实现方式

from deepseek_test import deep_llm as llm
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
import subprocess


# 定义状态
class CodeState(TypedDict):
    query: str
    code: str
    result: str
    feedback: str
    retry_count: Annotated[int, operator.add]
    max_retries: int


# 定义节点函数
def generate_code(state: CodeState):
    """生成代码"""
    prompt = ChatPromptTemplate.from_messages([
        ("system", "你是一个Python专家,请根据用户需求生成代码。只返回代码,不要其他解释。"),
        ("human", "{query}\n\n{feedback}")
    ])

    chain = prompt | llm | StrOutputParser()
    code = chain.invoke({
        "query": state["query"],
        "feedback": f"之前的代码有错误:{state.get('feedback')}" if state.get('feedback') else ""
    })

    return {"code": code, "retry_count": 1}


def execute_code(state: CodeState):
    """执行代码"""
    try:
        result = subprocess.run(
            ["python", "-c", state["code"]],
            capture_output=True,
            text=True,
            timeout=5
        )

        if result.returncode == 0:
            return {"result": f"执行成功!输出:\n{result.stdout}"}
        else:
            return {"result": f"执行失败!错误:\n{result.stderr}"}

    except Exception as e:
        return {"result": f"执行异常:{str(e)}"}


def verify_code(state: CodeState):
    """验证代码执行结果"""
    if "执行成功" in state["result"]:
        return {"feedback": ""}

    prompt = ChatPromptTemplate.from_messages([
        ("system", "请分析以下代码执行结果,判断错误原因并提供修正建议。"),
        ("human", "代码:{code}\n执行结果:{result}")
    ])

    chain = prompt | llm | StrOutputParser()
    feedback = chain.invoke({"code": state["code"], "result": state["result"]})

    return {"feedback": feedback}


# 定义条件边
def should_continue(state: CodeState):
    """决定下一步操作"""
    if state["retry_count"] >= state["max_retries"]:
        return "end"
    elif state["feedback"] == "":
        return "end"
    else:
        return "generate"


# 构建图
workflow = StateGraph(CodeState)

# 添加节点
workflow.add_node("generate", generate_code)
workflow.add_node("execute", execute_code)
workflow.add_node("verify", verify_code)

# 添加边
workflow.set_entry_point("generate")
workflow.add_edge("generate", "execute")
workflow.add_edge("execute", "verify")

# 添加条件边
workflow.add_conditional_edges(
    "verify",
    should_continue,
    {
        "generate": "generate",
        "end": END
    }
)

# 编译图
app = workflow.compile()

# 使用
result = app.invoke({
    "query": "写一个函数计算斐波那契数列的第n项",
    "max_retries": 3,
    "retry_count": 0
})

print(f"最终结果:\n{result['result']}\n\n代码:\n{result['code']}\n\n尝试次数:{result['retry_count']}")

执行结果:

五 未来发展趋势

5.1 LangChain 的发展方向

  • 进一步简化 API,降低入门门槛
  • 增强 RAG 能力,提供更多开箱即用的检索策略
  • 优化性能,减少不必要的抽象开销
  • 加强对中文和多模态的支持

5.2 LangGraph 的发展方向

  • 成为 LangChain 生态中 Agent 开发的标准
  • 提供更多预构建的多智能体模式
  • 增强分布式执行能力
  • 提供更强大的状态管理和持久化选项
  • 与更多云平台和部署工具集成

六 总结

langChain 和 LangGraph 是互补而非竞争的关系。LangChain 提供了构建 LLM 应用的 "积木",而 LangGraph 提供了将这些积木组装成复杂智能系统的 "蓝图"

  • 对于简单任务和快速原型,LangChain 仍然是最佳选择,它能让你在几分钟内构建出可用的应用。
  • 对于复杂 Agent 和生产级应用,LangGraph 是不可替代的,它提供了构建可靠、可控、可观测的智能系统所需的所有核心能力。

随着 AI 应用从简单的问答机器人向复杂的自主智能体演进,LangGraph 正逐渐成为大模型工程的核心技术。掌握 LangGraph,将是你在 AI 时代保持竞争力的关键。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐