对于LangGraph的底层图算法是利用消息传递机制来定义程序的运行这一结论,接下来,我们将详细探讨消息(Messages)是如何通过State进行传递的,其中包含了什么传递模式和内容。
State实际上是一个共享的数据结构。如上图所示,状态表现为一个简单的字典。通过对这个字典进行读写操作,可以实现自左而右的数据流动,从而构建一个可运行的图结构。那么根据前面学习的内容,我们可以利用这个流程来复现并理解图中的动态数据交换
LangGraph内部原理是:State中的每个key都有自己独立的Reducer函数,通过指定的reducer函数应用状态值的更新。
Reducer 函数用来根据当前的状态(state)和一个操作(action)来计算并返回新的状态。它是一种设计模式,用于将业务逻辑与状态变更解耦,使得状态的变更预测性更强并且容易追踪。这样的函数通常接收两个参数:当前的状态(state)和一个描述应用了什么操作的对象(action), 根据 action 类型来决定如何修改状态。比如,在一个购物车应用中,可能会有添加商品、删除商品、修改商品数量等操作。返回一个新的状态对象,而不是修改原始状态对象。简单理解,Reducer函数做的就是根据给定的输入(当前状态和操作)生成新的状态。
掌握State的定义模式和消息传递是LangGraph中的关键,也是构建应用最核心的部分,所有的高阶功能,如工具调用、上下文记忆,人机交互等依赖State的管理和使用,所以大家务必理解并掌握上述相关内容。
from langgraph.graph import StateGraph
from langgraph.graph import START, END
# 构建图
builder = StateGraph(dict)
def addition(state):
print(11, state)
return {"x": state["x"] + 1}
def subtraction(state):
print(22, state)
return {"y": state["x"] - 2}
# 向图中添加两个节点
builder.add_node("addition", addition)
builder.add_node("subtraction", subtraction)
# 构建节点之间的边
builder.add_edge(START, "addition")
builder.add_edge("addition", "subtraction")
builder.add_edge("subtraction", END)
# 图的编译
graph = builder.compile()
# 定义一个初始化的状态,执行
initial_state = {"x":10}
graph.invoke(initial_state)
RE: LangGraph开发实战