开启左侧

LangGraph学习笔记 — LangGraph中State状态模式

[复制链接]
创想小编 发表于 昨天 22:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CSDN博客
目录
1. LangGraph中State的定义模式
1.1 使用字典类型定义状态
1.2 Reducer函数的机制
1.3 在图状态中处理消息的思路
1.4 MessageGraph源码功能解析

       在LangGraph框架中,不论构建的代理简单或复杂,其本质都是通过节点(Node)和边(Edge)的有机组合来形成一个完整的图(Graph)。这种构建方式所形成的工作流逻辑十分清晰:每个节点在完成其任务后,都会通过边来指示下一个工作步骤,从而赋予整个应用系统更高的灵活性和可扩展性。
       在AI Agent应用程序的设计中,场景的复杂性直接决定了构建图的复杂度。例如,最简单的场景可能仅涉及一个大模型的问答流程,形式为:START -> Node -> END(其中大模型的交互逻辑被封装在Node中)。而更复杂的场景则可能涉及多个AI Agent的协同工作,包括多个分支和循环的构成。无论是简单还是复杂的图,LangGraph的价值永远不在于如何去定义节点,如何去定义边,而是在于如何有效管理各个节点的输入和输出,以保持图的持续运行状态。LangGraph的底层图算法采用消息传递机制来定义和执行这些图中的交互流程,其中状态(State)组件扮演着关键的载体角色,负责在图的各个节点之间传递信息。这也就意味着,LangGraph框架的核心在于State的有效使用和掌握。在复杂的应用中,State组件需要存储和管理的信息量会显著增加。核心功能如工具使用、记忆能力和人机交互等,都依赖State来实现和维护。所以,接下来我们对LangGragh框架的探索,都将紧密围绕State的实现和应用机制展开,这包括LangGraph内置封装好的工具/方法的使用,以及我们自定义构建功能时的实现方法。
1. LangGraph中State的定义模式

为了更清晰地说明这一过程,我们可以借助如下流程图来理解消息在图结构中的流转过程:
LangGraph学习笔记 — LangGraph中State状态模式-1.png


LangGraph构建的图中的每个节点都具备访问、读取和写入状态的权限。当某一个节点去修改状态时,它会将此信息广播到图中的所有其他节点。这种广播机制允许其他节点响应状态的变化并相应地调整其行为。如上图所示,从初始状态(Initial State)开始,其中包含了一条消息 { "x": "10" },随着消息在节点间通过边传递,每个节点根据其逻辑对状态进行更新。Node 1 和 Node 2 分别对状态进行了处理和变更,结果是在图的末端,我们得到了一个包含三条消息的最终状态 { "x": "10" }, { "x": "11" }, { "y": "9" }。从开发的角度来看,State实际上是一个共享的数据结构。如上图所示,状态表现为一个简单的字典。通过对这个字典进行读写操作,可以实现自左而右的数据流动,从而构建一个可运行的图结构。
LangGraph学习笔记 — LangGraph中State状态模式-2.png


1.1 使用字典类型定义状态

对于上图中的数据场景,我们来实际的进行代码复现。
       首先,我们将图的状态设计为一个字典,用于在不同节点间共享和修改数据,然后使用StateGraph类进行图的实例化。代码如下:
  1. from langgraph.graph import StateGraph
  2. # 构建图
  3. builder = StateGraph(dict)
  4. builder.schema
复制代码
dict
       接下来,定义两个节点。addition节点是一个加法逻辑,接收当前状态,将字典中x的值增加1,并返回新的状态。而subtraction节点是一个减法逻辑,接收从addition节点传来的状态,从字典中的x值减去2,创建并返回一个新的键y。
  1. def addition(state):
  2.     print(state)
  3.     return {"x": state["x"] + 1}
  4. def subtraction(state):
  5.     print(state)
  6.     return {"y": stat["x"] - 2}
复制代码
      然后,进行图结构的设计。具体来看,我们添加名为addition和subtraction的节点,并关联到上面定义的函数。设定图的起始节点为addition,并从addition到subtraction设置一条边,最后从subtraction到结束节点设置另一条边。代码如下:
  1. from langgraph.graph import START, END
复制代码
原文地址:https://blog.csdn.net/Lucky_mzc/article/details/149914049
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )