首页 / 文章

LangChain与LangGraph:链式结构与有状态图结构的抉择

LangChain 提供线性流程链;LangGraph 则支持带状态的分支工作流。文中给出了两者的简单示例,以及帮助你判断应用所需类型的简易方法。

发布者:REACTAPP.TOP阅读约 5 分钟1088 词

来源: LangChain vs LangGraph: What’s the Difference?

如果你正在涉足人工智能开发,有两个名字随处可见:

LangChain 和 LangGraph。

乍看之下,它们似乎可以互换使用。它们是相同的工具吗?需要同时学习这两个吗?又该如何决定哪个更适合你的项目呢?

让我们通过一个简单的例子来分析。

什么是 LangChain?

可以把LangChain 想象成用于构建人工智能应用程序的工具箱。

它提供了现成的组件,帮助你使用大语言模型,并将它们与其他资源连接起来,比如:

  • 提示词
  • 大语言模型
  • 工具
  • API
  • 文档
  • 向量数据库
  • 检索工具

假设你想打造一个基础的人工智能辅导系统。

其工作流程可能如下所示:

Student Question
       ↓
     Prompt
       ↓
      LLM
       ↓
     Answer

LangChain 让构建这类流程变得相当简单。

简单的 LangChain 示例

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(model="gpt-4o-mini")prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful programming teacher."),
    ("human", "{question}")
])chain = prompt | llmresponse = chain.invoke({
    "question": "What is recursion?"
})print(response.content)

这里的逻辑简单且线性:

问题 → 提示词 → 大语言模型 → 答案

正是这类直线型流程,LangChain 才能表现出色。

什么是 LangGraph?

现在假设你的智能辅导系统需要处理多轮交互。

你不仅希望它给出答案,还希望它:

  1. 回答学生的提问。
  2. 评估该答案是否合格。
  3. 如果合格,则停止。
  4. 如果不合格,则进行修改。
  5. 重新检查修改后的答案。

现在的流程更像是这样:

Student Question
                    ↓
              Generate Answer
                    ↓
               Check Answer
                ↙        ↘
             Good          Bad
              ↓             ↓
            Finish       Improve
                            ↓
                       Check Again

这正是LangGraph被设计用来处理的场景。

LangGraph 允许你设计包含以下元素的工作流:

  • 多个步骤
  • 条件分支
  • 循环结构
  • 共享状态
  • 决策点
  • 人工介入审批流程
  • 更复杂的智能体行为

一个简单的 LangGraph 示例

首先,你需要定义应用程序需要跟踪的状态。

from typing import TypedDict
class State(TypedDict):
    question: str
    answer: str
    good: bool

该状态用于记录三类信息:

question
answer
good

之后,你可以在图中构建各个步骤,即所谓的节点。

生成答案

def generate_answer(state):
    response = llm.invoke(
        f"Answer this question simply:\n{state['question']}"
    )    return {
        "answer": response.content
    }

检查答案

def check_answer(state):
    response = llm.invoke(
        f"""
        Is this answer good?        Question:
        {state['question']}        Answer:
        {state['answer']}        Reply only YES or NO.
        """
    )    return {
        "good": response.content.strip().upper() == "YES"
    }

接着,你需要定义一个决策函数:

def decision(state):
    if state["good"]:
        return "finish"    return "improve"

关键在于,LangGraph 负责将这些节点连接起来,并决定下一个要运行的节点是哪个。

如果检查失败,流程可以回到优化节点并重新执行该检查。

那么主要区别是什么?

最简单的区分方式如下:

LangChain = 构建模块

LangChain提供了用于组装AI应用程序的各个组件。

例如:

LLM
Prompt
Retriever
Tool
Vector Database
     ↓
   LangChain

LangGraph = 工作流

LangGraph负责管理这些组件之间的交互方式及顺序。

Start
         ↓
      Generate
         ↓
       Check
      ↙     ↘
    Good     Bad
     ↓        ↓
   Finish   Improve
              ↓
            Check

LangChain和LangGraph是竞争对手吗?

并非如此。

它们被设计为可以并行使用。

例如:

LangGraph
                     ↓
          ┌──────────┴──────────┐
          ↓                     ↓
     LangChain              LangChain
     Retriever                 Tools
          ↓                     ↓
          └──────────┬──────────┘
                     ↓
                    LLM

LangChain提供构建模块和工具,而LangGraph则负责协调围绕这些模块的整个工作流。

何时应该使用LangChain?

当您的应用程序遵循相对线性的流程时,LangChain是理想的选择。

典型应用场景包括:

  • 基础聊天机器人
  • 基于RAG的应用程序
  • 回答PDF中的问题
  • 在文档中搜索内容
  • 由大语言模型驱动的简单应用
  • 调用简单工具的功能

此类应用的基本流程可能如下所示:

User
 ↓
Retrieve Information
 ↓
LLM
 ↓
Answer

对于这类架构,构建完整的图结构通常属于过度设计。

何时应该使用LangGraph?

当您的应用程序需要分支逻辑和决策能力,而不仅仅是固定的步骤序列时,LangGraph才显得十分有用。

具体应用场景包括:

  • 自主型AI智能体
  • 包含多个步骤的工作流
  • 由多个智能体协同工作的系统
  • 需要人类介入的流程
  • 需要循环执行的流程
  • 需要在多个步骤间保持状态的应用程序
  • 复杂的工具调用链
  • 举个例子,想象一个结构如下的AI辅导系统:

    Student asks question
            ↓
    Analyze level
            ↓
    Generate explanation
            ↓
    Give quiz
            ↓
    Check answer
            ↓
    Correct?
       ↙          ↘
     YES           NO
      ↓             ↓
    Next topic   Explain again
    

    正是这种分支处理和状态保持能力,让LangGraph展现出独特优势。

    最简单的类比

    想象在建造房屋。

    LangChain相当于你的工具箱。

    它会提供以下物品:

    砖块、工具、材料以及各种组件。

    LangGraph则相当于建筑蓝图。

    它规定了施工顺序:

    打地基 → 筑墙壁 → 安装屋顶 → 检查成果 → 若有问题则返回修正。

    简而言之:

    LangChain帮助你收集并组装各个部分。

    LangGraph 能帮助你管理这一流程。

    核心总结

    不应将 LangChain 和 LangGraph 视为互不相关的工具,而应将其视为同一技术框架中的两层结构。

    AI Application
                  ↓
              LangGraph
           (Workflow / Logic)
                  ↓
              LangChain
          (Tools / Components)
                  ↓
                 LLM
    

    如果你的使用场景较为简单,仅使用 LangChain 就很可能满足需求。

    一旦你的应用需要状态跟踪、条件逻辑、循环处理或复杂的智能体行为,LangGraph 才是更合适的选择。

    不过在许多实际生产系统中,这两者会被结合使用。

    需要记住的规则是:

    LangChain 负责构建各个组件,而 LangGraph 则负责连接这些组件并控制整体流程。