LangGraph:构建具有状态与循环的 AI Agent
1. 概述
LangGraph 是一个用于构建具有状态、多参与者应用程序的大语言模型(LLM)库,专门用于创建智能体(Agent)和多智能体的工作流程。与其他 LLM 框架相比,它提供以下核心优势:
- 循环:允许定义涉及循环的流程,这对于大多数智能体架构至关重要,使其与基于有向无环图(DAG)的解决方案区别开来。
- 可控性:作为一个非常底层的框架,它提供了对应用程序流程和状态的细粒度控制,这对于创建可靠的智能体至关重要。
- 持久性:包含内置的持久性功能,支持高级的'人类在环'(human-in-the-loop)和记忆功能。
LangGraph 的公共接口借鉴了 LangChain 的设计。它由 LangChain Inc. 创建,但它可以独立于 LangChain 使用。
1.1 关键特性
- 循环和分支:在应用程序中实现循环和条件判断。
- 持久性:在图中的每一步之后自动保存状态。你可以在任意时间点暂停和恢复图的执行,以支持错误恢复、'人类在环'工作流、时间回溯等功能。
- 人类在环:在图执行过程中打断执行,以批准或编辑智能体计划的下一个动作。
- 流式支持:在每个节点生成输出时进行流式传输(包括 token 流式传输)。
- 与 LangChain 集成:LangGraph 可以与 LangChain 组件无缝集成(但不要求使用它们)。
2. 安装
首先,确保你的 Python 环境已配置好。通过 pip 安装 LangGraph:
pip install -U langgraph
如果你需要使用特定的大模型提供商(如 Anthropic),还需要安装相应的适配器:
pip install langchain-anthropic
export ANTHROPIC_API_KEY=sk-...
可选地,我们可以设置 LangSmith 以获得最佳的可观测性:
export LANGSMITH_TRACING=true
export LANGSMITH_API_KEY=lsv2_sk_...
3. 核心概念解析
LangGraph 的核心概念之一是状态(State)。每次图执行都会创建一个状态对象,该状态在图中各节点执行时在它们之间传递,并且每个节点在执行后会用其返回值更新该内部状态。图更新其内部状态的方式由所选择的图类型或自定义函数定义。
3.1 节点(Nodes)
节点是图中的基本计算单元。它们接收当前状态作为输入,执行特定逻辑(例如调用 LLM、运行工具、处理数据),并返回更新后的状态片段。
3.2 边(Edges)
边定义了节点之间的连接关系。LangGraph 支持两种类型的边:
- 普通边:从一个节点直接指向另一个节点。
- 条件边:根据当前状态的内容动态决定下一个节点。这通常用于实现循环逻辑,例如判断是否需要调用工具,或者是否应该结束对话。
3.3 检查点器(Checkpointer)
为了支持持久性和会话记忆,LangGraph 使用检查点器来保存状态快照。MemorySaver 是最常用的内存检查点器,适用于开发和测试场景。在生产环境中,可以使用数据库后端(如 PostgreSQL)来实现更持久的存储。
4. 示例:使用搜索工具的简单智能体
下面是一个完整的示例,展示如何构建一个具备工具调用能力的智能体。这个智能体可以根据用户的问题调用搜索工具,并根据搜索结果回答问题。


