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

发布于 2025-10-9 06:52
浏览
0收藏

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

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

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

langgraph中的数据传递

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

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

关于langgraph中的数据传递——使用State和config传递数据-AI.x社区

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

关于langgraph中的数据传递——使用State和config传递数据-AI.x社区

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

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

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

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

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

关于langgraph中的数据传递——使用State和config传递数据-AI.x社区

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

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

如下所示:

关于langgraph中的数据传递——使用State和config传递数据-AI.x社区

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

关于langgraph中的数据传递——使用State和config传递数据-AI.x社区

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

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

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

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

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


本文转载自​​AI探索时代​​ 作者:DFires

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐