大数跨境

关于langgraph中的数据传递——使用State和config传递数据

关于langgraph中的数据传递——使用State和config传递数据 AI探索时代
2025-09-27
2
导读:数据通讯是系统开发中的重要环节,而Langgraph有其特有的设计哲学

 数据通讯是系统开发中的重要环节,而Langgraph有其特有的设计哲学。



在项目开发中,数据传递一直是一个很重要的环节,毕竟任何系统的开发逻辑最终的目的都是实现数据的有效操作,包括查询,修改,新增等。


而在大模型应用场景中,数据的传递又是什么样的呢?怎么解决?





langgraph中的数据传递




在Langgraph中State是贯穿整个生命周期的数据结构,其作用就是用来保存智能体执行过程中的数据;因此,在Langgraph中的几个重要组件中都会使用到State中的数据,除了边之外。


在Langgraph的节点中,可以接收一个State参数,其中保存有用户的输入,模型执行的结果,工具调用的结构等等多种数据。然后在节点中就可以通过state获取执行过程中的数据进行下一步处理。



然后节点执行完成之后,把执行结果再次保存到State中,之后传递到下一个节点。


当然,在节点中操作State是一个很正常的操作,那怎么在工具中获取到这些参数呢?


这里的工具指的不是工具节点,因为工具节点的本质还是节点,因此可以正常对State进行操作;但在@tool注解实现的具体工具方法里,能获取到Sta te中的参数吗?


举例来说,你的业务场景中需要在上一个节点先对请求参数进行处理,然后再工具节点中使用这个参数;那么怎么把上一个节点中的数据传入到具体的工具中?


这个就要用到Langgraph提供的,InjectedState参数,可以在具体的工具中通过InjectedState获取参数。

params: Annotated[list, InjectedState("params")


解决了节点和工具中的通讯问题,那么再把我们指定的值传入到智能体中呢?毕竟类似于user_id等参数我们希望的是能够根据不同的用户进行区分,而不是由模型来生成用户参数;所以,面对这种参数,怎么进行通讯?


在Langgraph中也提供了固定参数的传参,使用的是RunnableConfig,在调用智能体时,只需要传入config参数,即可在智能体中的任何地方获取此参数。


如下所示:


如下,在节点中通过config: RunnableConfig即可获取到用户传入的数据。



有了这些数据通讯之后,就可以根据不同的执行结果进行相应的处理。


但在Langgraph中使用State进行数据通讯还一个需要注意的点是,State有多种处理方式,比如说追加,覆盖等;这些不同的处理方式会获得不一样的结果。


如在messages中一般情况下会使用追加的方式,也就是把每个节点的执行结果追加到messages列表中,这样就可以保存整个智能体的整个生命周期的执行过程。


当然,可能存在一些公共参数,不同的节点执行过后需要覆盖掉之前的值,而这个就可以使用覆盖的方式进行处理;而在Langgraph中负责处理这部分功能的是Reducers函数。


Reducers 是理解节点更新如何应用于 State 的关键。State 中的每个键都有其自己的独立 reducer 函数。如果未明确指定 reducer 函数,则假定对该键的所有更新都应覆盖它。







【声明】内容源于网络
0
0
AI探索时代
专注AI工程化落地,让你的技术不再纸上谈兵
内容 367
粉丝 0
AI探索时代 专注AI工程化落地,让你的技术不再纸上谈兵
总阅读133
粉丝0
内容367