LangGraph入门教程:构建循环状态管理的LLM应用

决策与循环:LangGraph构建条件执行和带循环的图 本文深入探讨LangGraph中的两种流程控制方法:条件边和循环图,以增强AI Agent的决策与迭代能力。条件边通过路由函数实现动态路径选择,模拟if-else逻辑;循环图则通过条件边形成回路,支持迭代优化。文章通过加法/减法选择器和随机数生成器两个实例,分别展示了条件判断和循环执行的实现方式,包括状态定义、节点构建和路由逻辑。这些技术赋予AI Agent自主决策和持续优化的能力,使其能够灵活应对复杂任务。文末提供完整代码示例供读者参考实践。 阅读详情

LangGraph入门教程:构建循环状态管理的LLM应用

在大型语言模型(LLM)应用开发中,我们常常需要处理复杂的工作流程,而不仅仅是简单的线性执行。LangGraph作为LangChain的高级库,为我们提供了构建具有循环能力的LLM应用的强大工具。本文将通过一个简单的天气查询示例,带你入门LangGraph的核心概念和基本使用方法。

LangGraph核心概念

LangGraph是LangChain的一个高级库,它最大的特点是为LLM应用带来了循环能力,而不仅仅是传统LangChain的线性工作流。这使得我们可以构建更复杂、更智能的应用程序。LangGraph的核心组件包括:

  • 状态:维护过程上下文,实现累计数据的动态决策
  • 节点:带边计算步骤,制定特定的任务,适应不同的工作流
  • 边:连接节点,定义工作流的执行路径,实现复杂的工作流程控制

构建一个天气查询应用

下面,我们将通过构建一个简单的天气查询应用来展示LangGraph的基本用法。

1. 环境准备和导入依赖

首先,我们需要导入必要的库和设置环境:

import os
from typing import Literal

from dotenv import load_dotenv
from langchain_core.messages import HumanMessage
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI

# 导入检查点,用于持久化保存
from langgraph.checkpoint.memory import Checkpoint, MemorySaver

# 导入图以及状态
from langgraph.graph import END, StateGraph, MessagesState
# 导入工具节点
from langgraph.prebuilt import ToolNode
load_dotenv()

2. 定义工具

接下来,我们定义一个用于获取天气的简单工具:

@tool
def get_weather(region: str):
    """
    获取指定地区的天气
    :param region: 地区
    :return:
    """
    return f"{region}晴天,25度"


# 将工具放入工具列表中
tools = [get_weather]

# 创建工具节点
tool_node = ToolNode(tools)

3. 初始化模型并绑定工具

我们使用ChatOpenAI模型,并将工具绑定到模型上:

model = ChatOpenAI(
    base_url="https://openrouter.ai/api/v1", 
    api_key=os.getenv("OPENAI_KEY"),
    model="google/gemini-2.0-flash-001", 
    temperature=0
).bind_tools(tools)

4. 定义决策函数和模型调用函数

这是LangGraph的关键部分,我们需要定义一个决策函数来控制工作流的流向,以及一个用于调用模型的函数:

def should_continue(state: MessagesState) -> Literal["tools", END]:
    print("messages:", state['messages'])
    messages = state['messages']

    last_message = messages[-1]
    # 如果llm调用了工具,则转到"tools"节点
    if last_message.tool_calls:
        return "tools"
    # 否则,停止
    return END


def call_model(state: MessagesState):
    messages = state['messages']
    # 调用模型
    ai_msg = model.invoke(messages)
    # 返回列表并将最新生成的消息添加到列表中
    return {"messages": [ai_msg]}

5. 构建状态图

现在,我们可以开始构建状态图了:

# 初始化图。定义新的状态图
workflow = StateGraph(MessagesState)
# 定义图节点
workflow.add_node("agent", call_model)
workflow.add_node("tools", tool_node)

# 定义入口和图边
# 第一个被调用的节点是agent
workflow.set_entry_point('agent')

# 添加条件边
workflow.add_conditional_edges(
    # 起始节点,使用agent
    "agent",
    # 传递下一个调用节点的数据
    should_continue)

# 添加从tools到agent的普通边
# 这就意味着调用tools节点后,返回到agent节点继续处理
workflow.add_edge("tools", "agent")

6. 设置检查点和编译图

# 初始化内存,在图运行之间的持久化状态
checkpointer = MemorySaver()  # 也可在redis、MongoDB中存

# 编译图
# 这将其编译成一个LangChain可运行的对象
app = workflow.compile(checkpointer)

7. 执行图并获取结果

最后,我们可以执行这个图并获取结果:

final_state = app.invoke(
    {
        "messages": [
            HumanMessage(content="今天上海天气如何?")
        ]
    },
    config={"configurable": {"thread_id": 42}},  # 使用检查点来保存状态
)

# 从final_state获取最后一条消息的内容
result = final_state['messages'][-1].content
print(result)

8. 测试会话状态保持

LangGraph一个重要的特性是可以保持会话状态。我们可以继续提问,系统会记住之前的上下文:

final_state = app.invoke(
    {
        "messages": [
            HumanMessage(content="我问的是哪个城市?")
        ]
    },
    config={"configurable": {"thread_id": 42}},  # 使用检查点来保存状态
)

# 从final_state获取最后一条消息的内容
result = final_state['messages'][-1].content
print(result)

当我们运行这段代码时,第二次调用会记住之前我们问的是上海的天气,这说明LangGraph成功地维护了会话状态。

LangGraph工作原理解析

让我们来分析一下这个天气查询应用是如何工作的:

  1. 状态管理:使用MessagesState来保存所有的消息历史,实现上下文记忆。
  2. 节点定义:定义了两个主要节点 - agent和tools,分别负责调用LLM和执行工具。
  3. 路径决策:通过should_continue函数动态决定工作流的执行路径。
  4. 循环流程:当LLM需要调用工具时,工作流会从agent节点转到tools节点,执行完工具后再返回agent节点,形成一个循环。
  5. 状态持久化:通过checkpointer实现会话状态的持久化,使得多次调用之间可以保持上下文连贯性。

LangGraph的优势

相比传统的LangChain线性工作流,LangGraph具有以下优势:

  1. 循环能力:能够表达复杂的循环和分支逻辑,支持更复杂的任务处理。
  2. 状态管理:内置状态管理机制,使得维护上下文变得简单。
  3. 动态决策:可以基于当前状态动态决定下一步的执行路径。
  4. 模块化设计:节点和边的抽象使得工作流的定义更加清晰和模块化。
  5. 持久化支持:支持状态的持久化存储,便于构建长会话应用。

总结

本文通过一个简单的天气查询示例,展示了如何使用LangGraph构建具有循环能力的LLM应用。我们学习了LangGraph的核心概念,包括状态、节点和边,并了解了如何定义条件流程和持久化状态。这些基础知识将帮助你构建更复杂、更智能的LLM应用。

LangGraph的出现,大大拓展了LangChain的能力边界,使得构建复杂的交互式LLM应用变得更加容易。随着你对LangGraph的深入理解,你将能够构建更加复杂和智能的应用程序,如多轮对话、递归思考、自我批评和改进等高级功能。

希望这个教程能够帮助你快速入门LangGraph,开始构建自己的循环状态管理LLM应用!

AI Agent开发学习系列 - LangGraph(9): 带有循环的Looping Graph 本文演示了使用LangGraph实现循环结构的两种方式:常规条件边和循环条件边。循环条件边的核心是使用add_conditional_edges方法,通过条件判断函数(如should_continue)控制循环次数,并将"loop"条件指向同一节点来建立循环。与普通条件边指向不同节点不同,循环条件边通过状态管理实现重复执行,直到满足退出条件。示例中当计数器达到5时循环结束,展示了循环结构在状态跟踪和重复任务处理中的应用。 阅读详情

相关推荐

LangGraph构建多智能体

LangGraph 是一个专为构建复杂、多智能体(Multi-Agent)语言模型应用而设计的开源框架。它由 LangChain Inc. 开发,灵感来源于 Pregel 和 Apache Beam,接口设计借鉴了 NetworkX。LangGraph 允许开发者以图结构的方式定义和编排代理的行为流程,提供了高度的可控性和灵活性。

沐雪架构师 2417

LangGraph 系列之 5——循环

该代码展示了使用LangGraph构建状态机的工作流:定义State类型存储数据流,包含姓名、随机数列表和计数器。通过greeting_node初始化问候语并重置状态,random_node生成随机数并计数,decide_loop函数根据计数器值决定是否继续循环。状态图从START开始,经初始化节点后进入循环生成5个随机数后结束。代码演示了如何管理状态流转、节点协作和条件循环控制,最终输出问候语和随机数列表,并支持可视化流程展示。

yubo0509的博客 515

用 LangGraph 构建 Agent 逐步指南

LangGraph是一个构建于LangChain之上的高级库,旨在通过引入循环计算能力来增强您的大型语言模型(LLM)应用。虽然LangChain允许创建用于线性工作流的有向无环图(DAG),但LangGraph更进一步,支持添加循环,这对于开发复杂的、类似智能体的行为至关重要。这些行为使得LLM能够持续循环执行某个过程,根据不断变化的条件动态决定下一步要采取的行动。LangGraph:结点、状态和边LangGraph的核心概念是状态图状态:表示在计算过程中维护和更新的上下文或记忆。

计算机科学、人工智能、数据分析和大数据方向的研发和教学。 2422

【AI大模型】LangGraph-循环访问多代理LLM应用程序

LangGraph 是构建在 LangChain 之上的库,与 LangChain 生态完全兼容。LangChain for Context 是一个开源 Python 和 JavaScript 框架,可抽象并促进 LLM 与外部数据源之间的交互,以创建强大的 LLM 支持的应用程序。LangChain 中的架构围绕组件和链展开,其中组件执行特定任务,而链允许您以逻辑方式组合多个组件。

xxue345678的博客 1723

LangGraph:基于图算法的LLM应用开发框架解析

图算法是处理复杂关系数据的核心方法,通过节点和边的拓扑结构实现非线性逻辑建模。在LLM应用开发领域,传统链式结构难以应对多轮对话等动态场景,而基于图结构的编程框架能天然支持条件路由和并行处理。LangGraph作为专为LLM优化的图执行引擎,其可视化调试和状态管理机制显著提升了开发效率,特别适合客服系统、智能决策等需要动态流程调整的场景。相比LangChain的线性架构,LangGraph在复杂工作流中展现出更好的并发性能和可维护性,成为大语言模型应用开发的新范式。

weixin_30407613的博客 662

开源模型应用落地-LangGraph101-探索 LangGraph 的多分支并行处理(三)

LangGraph 的多分支处理能力通过将任务分解为并行执行的子任务,显著提升了计算速度,增强了应用程序对复杂业务逻辑和用户需求的适应性。

以微薄之力,予他人些许温暖. 1万+

LangGraph中使用Reflection机制填坑

我在LangGraph框架搭建的智能体中引入了Reflection机制,程序运行报错:Recursion Error 原因是图中的某些节点之间循环次数过多超过了图计算步数的限制,例如审查一直达不到标准,不断地审查-修改-审查。下面将简单介绍一下LangGraph的递归限制和如何控制图执行过程中节点之间的循环次数,避免陷入太多的循环。

weixin_44907479的博客 962

开源模型应用落地-LangGraph101-探索 LangGraph 的多图协作处理(五)

多图协作凭借提高模块化与可维护性,让复杂任务拆分清晰、代码复用便捷

以微薄之力,予他人些许温暖. 1万+

开源模型应用落地-LangGraph101-探索 LangGraph 的无限可能(一)

使用LangGraph应对大语言模型在复杂任务和动态交互中的更高要求。

以微薄之力,予他人些许温暖. 1万+

开源模型应用落地-LangGraph101-探索 LangGraph 的链式处理(四)

LangGraph 的链式处理通过定义节点和边,以逻辑顺序连接多个执行单元,实现数据流转和状态更新的动态管控。

以微薄之力,予他人些许温暖. 9656

Vivado时序约束实战:input_delay在高速接口设计中的关键作用

本文深入探讨了在Vivado时序约束中,input_delay对于高速接口设计的关键作用。通过一个RGMII以太网接口调试的实际案例,解释了为何仅靠仿真正确而实际数据采集会失败,并揭示了set_input_delay约束的本质是告知时序分析工具外部芯片的时序关系,而非添加物理延迟。文章详细讲解了如何根据数据手册计算约束值、针对不同采样时钟方案(如移相时钟)进行约束,并指导如何通过时序报告验证约束效果,是解决FPGA高速接口时序问题的实战指南。

ee345的博客 252

开源模型应用落地-LangGraph101-探索 LangGraph 的多分支处理(二)

使用LangGraph的分支处理能力,使得更好地适应各种复杂的业务逻辑和用户需求

以微薄之力,予他人些许温暖. 1万+

安卓-折叠屏平行视界适配(多厂商兼容与优先级实战)

本文详细解析了安卓折叠屏平行视界适配的现状与挑战,重点探讨了多厂商兼容性策略和优先级冲突的实战解决方案。通过对比Google的Embedding方案和国内厂商的EasyGo标准,提供了检测设备支持方案、处理优先级冲突及双方案共存的最佳实践,帮助开发者高效完成折叠屏适配。

weixin_29190169的博客 162

LangGraph:构建复杂智能体应用的全面指南

图(Graph)是一种数据结构,由节点(Node)和边(Edge)组成。节点表示实体或对象,边表示节点之间的关系。图可以用于表示复杂的关系和流程,广泛应用于计算机科学和人工智能领域。在LangGraph中,图被用于表示和构建复杂的智能体应用。每个节点代表一个操作或步骤,边表示节点之间的依赖关系。通过定义节点和边,开发者可以构建复杂的流程和逻辑。# 定义一个图# 添加节点# 添加边# 运行图在这个例子中,我们定义了一个简单的图,它包含三个节点和两条边。

全世界的博客 7048

YOLOv8实战:如何用Focaler-IoU提升小目标检测精度(附代码)

本文详细介绍了如何通过Focaler-IoU提升YOLOv8在小目标检测中的精度,包括核心机制解析、代码实现及调优策略。Focaler-IoU通过动态聚焦机制有效解决传统IoU对小目标检测的不足,显著提升模型性能。附有完整的代码示例和实战指南,适合计算机视觉开发者参考。

weixin_29044157的博客 362

Quartus II 13.1 出现 ‘‘can‘t find design entity <Filename>‘‘ 问题的解决方法

Quartus II 13.1 出现 ''can't find design entity '' 问题的解决方法

qq_62076686的博客 1万+

从 Langchain 到 Langgraph:构建更智能的 LLM 应用架构

Langchain 是一个用于构建 LLM 应用的 Python 框架,它提供了对 LLM、Prompt 模板、Memory、Tool、Chain 等概念的封装,旨在让开发者更容易地把语言模型接入到实际应用中。prompt = PromptTemplate.from_template("你是谁?")这个例子非常简单,但实际项目通常涉及多个子任务(例如:信息抽取、查询改写、多轮交互、调用工具等),这种线性链式结构会很快遇到瓶颈。

m0_65555479的博客 1304

Visual Studio 2022调试Godot 4 C#项目全攻略:从环境配置到断点调试

本文详细介绍了如何配置Visual Studio 2022以高效调试Godot 4 C#项目。从环境搭建、外部编辑器设置到两种核心调试模式(附加到进程与启动配置)的实战指南,帮助开发者构建无缝的工业级工作流,解决编码乱码、断点失效等常见问题,大幅提升开发与问题排查效率。

bush的博客 391

【LangGraph】智能体工作流的新基石

非线性流程、循环、分支、动态决策全部支持✅ 使用 LangGraph 的最佳时机:你构建的是对话智能体、多步骤流程、多智能体系统你需要状态追踪、循环逻辑、条件判断你希望高可控、高扩展性你具备一定 Python 编程能力,能理解工作流抽象结构❌ 你可能不适合用 LangGraph 的场景:只需要一个简单的问答接口或线性调用链项目极度敏捷快速(原型阶段)团队对状态逻辑和图结构建模掌握不熟练📌推荐组合使用:LangGraph + LangChain。

qq_62223405的博客 2023

Windows 11 安装、使用 Git:下载、安装、概念、命令、分支模型

本文详细介绍了在 Windows 11 系统上安装与使用 Git 的完整流程,涵盖从官方或国内镜像下载安装包、关键安装选项配置,到 Git 核心概念(如工作区、暂存区、分支、远程仓库等)的通俗解释。同时梳理了常用命令与五种主流 Git 分支模型(如 Git Flow、GitHub Flow 等),帮助开发者根据项目规模选择合适的工作流,是面向初学者与进阶用户的实用指南。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2387

AI绘画与医疗可视化:用AI生成医学插图的实践

医疗可视化是医学教育、临床沟通和学术研究的核心工具。传统医学插图依赖手工绘制或专业3D建模,存在制作周期长、成本高、更新迭代慢等问题。随着深度学习技术的发展,AI绘画工具(如Stable Diffusion、DALL-E)展现出强大的图像生成能力,但医疗领域对插图的解剖准确性、标注规范性和语义完整性有极高要求,通用AI模型难以直接应用。本文聚焦AI技术与医疗领域的交叉创新,系统阐述如何通过数据预处理、模型定制化训练和后处理校验,构建符合医疗标准的插图生成系统。

大模型应用工坊 1788

【LLM开发进阶】从LangChain到LangGraph:构建下一代智能Agent的完整指南

在过去的一年里,LangChain几乎成为了 LLM(大语言模型)应用开发的代名词。它通过“链(Chain)”的概念,成功地将 Prompt、模型和输出解析器串联起来,极大地降低了开发 RAG(检索增强生成)和基础应用的门槛。真实的业务逻辑往往不是线性的。我们需要循环、需要重试、需要根据上一步的结果动态决定下一步的操作——简而言之,我们需要构建Agent(智能体)。这时候,LangGraph应运而生。

m0_59598970的博客 1179

大模型LoRA微调调参的实战技巧(持续更新)

本文主要介绍了大模型LoRA微调调参的实战技巧,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 实战技巧

herosunly的博客 20万+

LangGraph构建你的第一个 Tool Agent:从零理解 ReAct 循环

从一个“多步工具调用”问题切入,讲解ReAct Agent核心机制:LLM如何在推理、行动、观察之间循环,直到任务完成。以LangGraph拆解create_react_agent背后的实现原理,说明为什么仅靠agent节点、tools节点和一条条件边,就能构建出可自主决策的Tool Agent。同时结合Demo展示工具定义、状态管理、ToolMessage回写、路由判断和最大迭代限制等关键细节,并总结无限循环、工具误选、消息链丢失等常见问题及工程化解决方案,帮助读者从原理到实践掌握ReAct循环。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 3万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LangChain 与 LangGraph双生框架协同构建AI应用

模块化集成与多轮对话管理。前者通过标准化接口简化工具链组合,后者通过图结构建模确保对话连贯性。二者的技术差异体现在架构设计(链式 vs. 图状)、状态管理方式(单次传递 vs. 全局维护)和适用场景(单任务流程 vs. 多轮交互)。实际开发中,开发者可根据需求单独使用或混合集成,例如用 LangChain 构建行程规划工具链,再通过 LangGraph 实现用户追问时的上下文延续。这一互补关系为构建下一代智能应用提供了灵活的技术基础。

neweastsun的专栏 2113

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【Langchain与Langgraph】全维度深度解析:从组件化到图化LLM应用开发

本文深入解析Langchain与Langgraph两大LLM应用开发框架。Langchain采用组件化设计,通过模块化分层(代理层、链层、工具层等)实现灵活组合;Langgraph则基于有向图抽象,支持状态管理、循环执行和多智能体协作。文章从核心定位、设计理念、技术架构到实战开发进行系统对比,指出Langgraph是对Langchain的补充升级,两者共同解决LLM应用开发中的组件碎片化、状态管理难等痛点。通过代码示例展示模型调用、缓存优化等关键技术,为开发者提供从理论到实践的完整指南。

独立思考,明辨是非 1386
上一篇: RAG技术解析:实现高精度大语言模型知识增强
下一篇: LangGraph高级教程:构建规划执行型智能体
AI航海家(Ethan)
博客等级 码龄7年 477粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值