LangGraph 是一个用于构建具有状态的、多角色的 LLM 应用程序的库,用于创建 Agent 和 Multi-Agent Workflow。
LangGraph 与 LangChain 的区别与联系
LangChain:是一个用于开发由 LLM 驱动的应用程序的框架。它通过一系列开源构建模块、组件和第三方集成,简化了 LLM 应用程序生命周期的每个阶段。LangChain 的核心是“链”(Chain),即将多个 LLM 调用和工具调用链接在一起,形成一个有序的任务序列。其架构遵循有向无环图(DAG)结构,任务按单一方向流动,不形成循环。
LangGraph:是 LangChain 生态系统中的一个专门库,专注于构建有状态的多智能体系统。它采用图(Graph)结构来表示任务和流程,其中节点代表操作或步骤,边表示节点之间的依赖关系。LangGraph 的架构更加灵活,支持循环、回溯以及处理多样化的用户输入。其核心优势在于强大的状态管理和 Multi-Agent 支持。
两者可以独立使用,也可以结合使用。你很快就能看到我可以在 LangGraph 的节点中调用 LangChain 的组件,以利用其丰富的功能。
选择指南:何时使用 LangChain 或 LangGraph?
使用 LangChain 的场景:
-
需要构建预定义的、顺序明确的工作流程,如数据检索、内容总结、简单问答等。
-
希望快速开发和部署 LLM 应用程序,利用 LangChain 提供的丰富组件和简洁的链式结构。
使用 LangGraph 的场景:
-
需要构建复杂的、Multi-Agent 协作的系统,如任务管理助手、虚拟助理等。
-
需要支持循环、条件判断、并行执行等复杂流程控制。
-
需要在工作流程中保持持久的上下文和状态。
同时使用 LangChain 和 LangGraph 的场景:
-
希望利用 LangChain 的组件优势,同时通过 LangGraph 实现复杂的流程控制和状态管理。
总结:
LangChain 和 LangGraph 各有优势,选择合适的框架取决于具体的需求。对于简单、线性的应用,LangChain 提供了快速开发的便利;而对于需要复杂流程控制和状态管理的应用,LangGraph 提供了更大的灵活性和控制力。在某些情况下,结合使用两者可以充分发挥各自的优势,构建更强大和灵活的 LLM 应用程序。
LangGraph中的关键元素
在本节中,我们来看看 Langraph 中的不同组成元素。
我们先从第一个也是最基础的元素开始——状态(State)。
那么,什么是状态呢?
它是一个共享的数据结构,记录了整个应用当前的信息或上下文。
换句话说,它就像是应用程序的“记忆”,用于跟踪变量和数据,供不同的节点(Node)访问和修改。
如果你还不清楚什么是“节点”,不用担心,我们接下来就会讲到。
但现在你可以想象一个会议室里的白板:
当与会者想记录新内容或更新信息时,他们会把它写在白板上。
这个白板就相当于状态,而与会者就相当于节点。
也就是说,状态展示的是整个应用的最新信息。
在介绍节点之前,我们要先理解最核心的概念:图(Graph)。
图是整个结构的框架,它定义了各个任务(即节点)之间的连接关系与执行顺序。
你可以把它想象成路线图,图上标出了连接不同城市的路线和路口选择。
图可视化了整个工作流程的执行逻辑和条件分支。
一个典型的图如下所示:

接着我们来看第二个基本元素:节点(Node)。
节点就是图中的一个个功能单元或操作步骤。
每个节点接收输入(通常是当前状态),进行处理,然后输出一个结果或更新的状态。
一个形象的类比是生产流水线:每个工人执行一个特定任务,比如安装零件、喷漆或检查质量等。每个工人都对应一个节点,它专注完成一个具体的任务。
接下来的概念是:边(Edge)。
边是节点之间的连接线,它们决定了任务的执行顺序。
通俗讲,它告诉应用程序当前节点执行完后,接下来该执行哪个节点。
一个类比是火车轨道:轨道就是边,连接两个“站点”——也就是两个节点。而在这条轨道上行驶的火车,就是状态,它在各个节点之间传递和更新。
还有一种特殊的边叫做条件边(Conditional Edge),它会根据状态中的特定条件来决定下一步执行哪个节点。
一个很直观的例子是交通信号灯:绿灯表示前进,红灯表示停止,黄灯表示减速。信号灯的颜色(条件)决定了下一步的行动路径。这也可以理解为一个 if-else 条件语句。
接下来是起点(Start Node)。
这是图的入口点。它本身不执行任何操作,但标志着流程的开始。
可以把它看作是一场比赛的起跑线。
既然有起点,那也一定有终点节点(End Node)。
当应用执行到终点节点时,整个图的流程就结束了。
它表示所有预定任务已经执行完毕。
你可以把它看作是比赛的终点线。
工具(Tool)是一些特殊的函数或功能模块,节点可以使用它们来完成特定任务,比如从 API 获取数据等。
它们增强了节点的功能。
那么工具和节点的区别是什么?
节点是图中的组成部分,而工具是节点中调用的功能。
类比为:节点是“工人”,而工具是“工人用的工具箱里的锤子、螺丝刀”等。
工具节点(Tool Node)是一种特殊的节点,专门用于调用某个工具。
比如,一个工具节点的任务可能就是从某个 API 获取数据,然后把结果写入状态中供后续节点使用。
流水线上操作机器的工人就是工具节点,控制机器(工具),然后把结果传回装配线。
状态图(StateGraph)是我们最先会接触到的部分之一,它的作用是构建和编译整个图结构。
它管理所有的节点、边以及整体的状态,确保数据在各组件之间正确流动。
你可以把它看成是建筑蓝图:蓝图定义了结构和连接方式,状态图则定义了你的工作流结构。
接着是一个在 LangChain 背景下你可能熟悉的概念:Runnable。
在 Langraph 中,Runnable 是一种可以执行的标准组件,用于执行图中的某个任务。
你可以将它理解为构建模块化系统的基础构件。
Runnable 和 Node 有什么区别?
Runnable 可以表示多种操作,而 Node 通常接收状态、处理状态并返回更新的状态。
等我们后面开始写代码时,你就会更明白这个区别了。
一个类比是乐高积木:就像你可以把乐高积木拼接在一起构建出复杂结构,runnable 也可以组合成复杂的 AI 工作流。
最后我们来看看消息类型(Message Types),尤其是如果你有 LangChain 背景,这部分应该很熟悉。
Langraph 中常见的五种消息类型包括:
-
Human Message:用户输入的信息
-
AI Message:AI 生成的回复
-
System Message:提供给模型的说明或上下文
-
Tool Message:表示工具的使用
-
Function Message:表示一次函数调用(与 Tool Message 类似)
本系列课程源代码位于:
https://github.com/realyinchen/AgenticRAG
课程的文字版将发布在我的知识星球:

如果你对提示工程感兴趣,可以进入微信公众号主页,进入【提示工程】专栏:

第四课可以在这里看:Agent101第四课:类型注解
(文:PyTorch研习社)