LangGraph
LangGraph文档总结
LangChain仅支持有向无环图(DAG)形式的工作流,然而在较为复杂的LLM应用里,常见的模式是在执行流程中引入循环。
在循环过程中,由LLM推理下一步的行动。从本质上讲,这就好比在for循环中运行大语言模型(LLM)。这类系统通常被称为代理(agent)。
eg: 在简易的检索增强生成(RAG)应用程序中,会调用检索器来获取一些文档,随后这些文档会被传递给大语言模型(LLM),以生成最终答案。通常来说,这种方式是有效的。不过,一旦第一个检索步骤没能返回任何有用结果,整个流程就会出现问题。在这种情况下,如果大语言模型能够判断检索器返回的结果不佳,进而向检索器发出第二个(更精准的)查询请求,并使用新的查询结果,那就再好不过了。从本质上讲,在循环中运行大语言模型有助于开发出更灵活的应用程序,使其能够处理那些可能未预先设定的、更模糊的应用场景。
虽然这个模式简单,但却前景很大。基本形式为有两个步骤的循环:
- 调用LLM以确定(a)要采取什么操作,或(b)给用户什么响应
- 采取给定的行动,并返回步骤1
重复这两个步骤,直到生成最终响应。(ReAct模式)
由图构建的状态机具有循环的能力,允许处理比简单链更模糊的输入。

graph TD;
开始 --> 初始化StateGraph传入状态定义;
初始化StateGraph传入状态定义 --> 添加节点;
添加节点 --> 添加边;
添加边 --> 编译;
编译 --> 得到可运行对象;
添加节点 --> 特殊END节点表示图结束;
subgraph 节点详情
添加节点 --> 节点name为引用字符串;
添加节点 --> 节点value为函数或LCEL可运行对象;
节点value为函数或LCEL可运行对象 --> 接受State对象形式字典输入;
接受State对象形式字典输入 --> 输出包含要更新的State对象键的字典;
end
subgraph 边详情
添加边 --> 起点边;
添加边 --> 法向边缘;
添加边 --> 条件边;
条件边 --> 传入上游节点;
条件边 --> 传入判断函数返回字符串;
条件边 --> 传入映射;
end
subgraph 状态定义与更新
初始化StateGraph传入状态定义 --> 状态定义表示中心状态对象;
状态定义表示中心状态对象 --> 状态由节点更新以键值存储形式;
状态由节点更新以键值存储形式 --> 属性更新方式1完全覆盖;
状态由节点更新以键值存储形式 --> 属性更新方式2添加值;
end
subgraph 代理执行者
得到可运行对象 --> 重新创建LangChainAgentExecutor;
重新创建LangChainAgentExecutor --> 可修改内部结构;
可修改内部结构 --> 默认状态包含input等概念;
end
起点边 --> 示例graphset_entry_pointmodel;
法向边缘 --> 示例graphadd_edgetools_model;
条件边 --> 示例graphadd_conditional_edgemodel_should_continue_end_END_continue_tools;
属性更新方式1完全覆盖 --> 用于希望节点返回属性新值的情况;
属性更新方式2添加值 --> 用于属性为操作列表且希望添加新操作的情况;
1. 什么是LangGraph?
LangGraph是由LangChain公司开发的一个库,用于构建基于大型语言模型(LLM)的有状态多主体应用程序,特别适用于创建智能体(Agent)和多智能体工作流。LangGraph的设计灵感来自于Pregel和Apache Beam,其公共接口借鉴了NetworkX。
LangGraph能够让开发者构建具有循环功能的计算图,这在传统的链式结构(Chain)或有向无环图(DAG)中是无法实现的。通过LangGraph,开发者可以创建更加灵活、动态的智能体系统,能够处理更复杂的任务流程。
2. 核心概念
2.1 状态图(StateGraph)
LangGraph的核心是StateGraph类,用于表示整个图结构。初始化时需要定义一个状态对象,这个状态对象会随着图的执行而更新。
2.2 节点(Nodes)
节点是图中的处理单元,可以是函数或LangChain的可运行组件。节点接收状态对象作为输入,并返回要更新的状态属性。
2.3 边(Edges)
边定义了节点之间的执行流程和数据流向。有两种类型的边:
- 普通边:固定的流向
- 条件边:基于节点输出的条件决定下一步去向
2.4 状态(State)
状态是在图执行过程中维护的中央数据对象。状态的属性可以通过两种方式更新:
- 完全覆盖:节点返回一个新值来替换原属性
- 添加:节点返回值会被添加到现有属性(适用于列表等)
2.5 循环(Cycles)
LangGraph的一个重要特性是能够创建循环流程,允许LLM在循环中进行推理决策,这对于构建智能体系统至关重要。
3. LangGraph与传统工作流的区别
传统的工作流通常是有向无环图(DAG),数据只能向前流动,不能回到之前的节点。而LangGraph支持循环,允许在需要时返回到之前的节点,这对于构建需要反复推理和决策的智能体至关重要。
4. 智能体架构
LangGraph支持多种智能体架构:
- 单一智能体
- 多智能体系统
- 分层智能体
- 顺序智能体
这些架构可以根据任务需求进行组合和定制。
5. LangGraph Platform
LangGraph Platform是一个商业解决方案,用于将LangGraph应用部署到生产环境。它包含以下组件:
- LangGraph Server(API)
- LangGraph SDK(客户端)
- LangGraph CLI(命令行工具)
- LangGraph Studio(UI/调试器)
LangGraph Platform解决了复杂部署中的常见问题,如流式传输支持、后台运行、长时间运行的智能体支持等。
6. 使用流程图示
以下是使用Mermaid语法描述的LangGraph主要工作流程:
7. 智能体状态机示例
以下是使用Mermaid描述的智能体状态机流程:
8. RAG增强智能体流程
以下是使用Mermaid描述的检索增强生成(RAG)智能体流程:
9. LangGraph关键优势
- 内存管理:LangGraph持久化应用程序状态的任意方面,支持对话和更新的记忆
- 人机协作:状态检查点允许执行中断和恢复,可在关键阶段通过人工输入进行决策和修正
- 可控流程:开发者可以精确控制智能体的流程和状态
- 流式传输支持:支持从图节点进行流式更新和LLM调用的流式输出
- 可扩展性:支持复杂的多智能体系统和分层决策架构
10. 应用场景
- 复杂对话系统
- 多步骤任务自动化
- 需要反复推理的问题解决
- 需要工具使用的智能体
- 多智能体协作系统
通过LangGraph,开发者可以构建更加灵活、可控的智能体系统,处理复杂的任务流程,并将其部署到生产环境中。

浙公网安备 33010602011771号