langgraph在节点中访问State
文章目录节点中访问State图节点中读取State图节点更新StateOverwrite绕过Reducer总结节点中访问State图节点中读取State在 LangGraph 中节点本质上是一个可调用对象通常定义为普通 Python 函数。节点函数被执行时LangGraph 会自动将当前图运行到该节点时的State传入节点函数。节点函数的第一个参数通常是当前运行图的状态对象也就是State。def node(state: StateSchema): ...其中state表示当前节点执行时可以访问到的全局状态快照。节点可以通过读取state中的字段获取上游节点写入的数据并基于这些数据完成当前节点的业务逻辑。示例代码如下fromlanggraph.graphimportStateGraph,START,ENDfromtypingimportTypedDict,AnnotatedfromoperatorimportaddclassOverAllState(TypedDict):logs:Annotated[list[str],add]id:strdefnode_a(state:OverAllState):fork,vinstate.items():print(fk:{k}, v:{v})builderStateGraph(state_schemaOverAllState)builder.add_node(node_a,node_a)builder.add_edge(START,node_a)builder.add_edge(node_a,END)graphbuilder.compile()resultgraph.invoke({logs:[START],id:start})输出如下k: logs, v: [START] k: id, v: start图节点更新State在 LangGraph 中节点函数通常不需要返回更新后的完整状态只需要返回本节点对状态的局部更新。也就是说节点的返回值可以只包含需要修改的状态字段。对于节点没有返回的字段LangGraph 会保留其原有状态值对于节点返回的字段LangGraph 会根据该字段是否配置了Reducer来决定如何合并更新值。如果字段配置了Reducer则使用对应的Reducer函数将旧值和新值合并如果字段没有配置Reducer则按照默认规则使用节点返回的新值覆盖原值。LangGraph运行时会按照状态字段的Reducer函数将其与当前的最新状态合并。示例代码如下fromlanggraph.graphimportStateGraph,START,ENDfromtypingimportTypedDict,AnnotatedfromoperatorimportaddclassOverAllState(TypedDict):logs:Annotated[list[str],add]id:strdefnode_a(state:OverAllState):fork,vinstate.items():print(fk:{k}, v:{v})return{logs:[node_a 更新状态]}builderStateGraph(state_schemaOverAllState)builder.add_node(node_a,node_a)builder.add_edge(START,node_a)builder.add_edge(node_a,END)graphbuilder.compile()resultgraph.invoke({logs:[START],id:start})print(*30,- result -,*30)print(result)输出如下k: logs, v: [START] k: id, v: start - result - {logs: [START, node_a 更新状态], id: start}在上述示例中logs字段通过Annotated[list[str], add]绑定了 Reducer 函数operator.add因此 LangGraph 会将原有的logs值和node_a返回的新logs值进行列表拼接[START] [node_a 更新状态]最终得到[START, node_a 更新状态]id字段没有出现在node_a的返回值中因此该字段不会被更新。图运行结束后输出状态中的id仍然保持输入时的值id: start因此LangGraph 节点更新 State 的核心规则可以概括为节点只返回需要更新的字段未返回的字段保持不变返回的字段根据是否配置 Reducer 决定是合并还是覆盖。Overwrite绕过Reducer在前面的示例中如果某个状态字段定义了Reducer那么节点返回该字段的更新值时LangGraph 默认会通过对应的Reducer将新值与已有状态值进行合并。在某些场景下我们可能并不希望继续执行Reducer的聚合逻辑而是希望本次更新直接覆盖旧值。这时可以使用Overwrite。Overwrite的作用是告诉 LangGraph 本次状态更新不走该字段原本定义的Reducer而是直接用新值覆盖状态中的旧值。需要注意的是Overwrite只影响当前这一次更新并不会修改状态字段本身的Reducer定义。后续节点如果继续正常返回该字段的更新值仍然会按照原来的Reducer逻辑进行合并。示例代码如下fromlanggraph.graphimportStateGraph,START,ENDfromlanggraph.typesimportOverwritefromtypingimportTypedDict,AnnotatedfromoperatorimportaddclassOverAllState(TypedDict):logs:Annotated[list[str],add]id:strdefnode_a(state:OverAllState):return{logs:[node_a],id:node_a}defnode_b(state:OverAllState):return{logs:Overwrite([node_b]),id:node_b}defnode_c(state:OverAllState):return{logs:[node_c],id:node_c}builderStateGraph(state_schemaOverAllState)builder.add_node(node_a,node_a)builder.add_node(node_b,node_b)builder.add_node(node_c,node_c)builder.add_edge(START,node_a)builder.add_edge(node_a,node_b)builder.add_edge(node_b,node_c)builder.add_edge(node_c,END)graphbuilder.compile()resultgraph.invoke({logs:[START],id:start})print(*30,- result -,*30)print(result)输出如下 - result - {logs: [node_b, node_c], id: node_c}上述代码中logs字段绑定了operator.add()函数如果没有Overwrite则最终输出的logs的值应为[START, node_a, node_b, node_c]node_b返回更新时用Overwrite包裹了logs字段的值那么当前状态的logs会被[node_b]覆盖因此最终输出的logs字段值变成了[node_b, node_c]id字段按照默认行为保留最后一次更新的值。总结注意 from langgraph.types import Overwrite 的使用

相关新闻

LangGraph 流式输出 Streaming 实战:四种 stream_mode 怎么选

LangGraph 流式输出 Streaming 实战:四种 stream_mode 怎么选

点外卖时,你最焦虑的不是等 30 分钟,而是不知道"外卖到哪了"。所以平台会显示:商家接单 → 骑手到店 → 已取餐 → 距你 500 米。等待时间没变,但焦虑没了——因为你看到了过程。 前六集写的图都是"黑盒执行":graph.invoke(input),…

2026/7/22 2:59:52 阅读更多 →
第一性原理与苏格拉底提问:深度思考的数字助手

第一性原理与苏格拉底提问:深度思考的数字助手

1. 项目概述:当第一性原理遇上苏格拉底式提问在解决复杂问题时,我们常常陷入思维定势的泥潭。这个名为"第一性原理思考教练"的项目,本质上是一个融合了两种顶级思维工具的数字助手——它用苏格拉底式提问作为手术刀,以第…

2026/7/22 2:58:52 阅读更多 →
Transformers.js:浏览器端AI模型部署与实践

Transformers.js:浏览器端AI模型部署与实践

1. Transformers.js 简介与核心优势Transformers.js 是一个革命性的 JavaScript 库,它让开发者能够在浏览器环境中直接运行各种 AI 模型,而无需依赖后端服务器。这个库的核心在于使用了 ONNX Runtime,使得预训练的 PyTorch、TensorFlow 或其他…

2026/7/22 2:58:52 阅读更多 →

最新新闻

SPI 知识点复习资料(结合 STM32F427 代码)

SPI 知识点复习资料(结合 STM32F427 代码)

本资料以 spi.c 代码为例,把 SPI 从基础到实战的知识点串起来。 你的项目里用了 4 个 SPI:SPI1/SPI3 做从机接收,SPI2/SPI4 做主机发送。 一、SPI 是什么 SPI(Serial Peripheral Interface,串行外设接口)是…

2026/7/22 7:08:27 阅读更多 →
环境准备:WSL2 安装

环境准备:WSL2 安装

启用 WSL2 管理员身份打开 PowerShell,执行 启用 WSL dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 启用虚拟机平台(WSL2 必需) dism.exe /online /enable-feature /featurename:Virtu…

2026/7/22 7:08:27 阅读更多 →
中文歌词创作用什么AI?实用AI作词工具、歌词创作助手真实使用分享

中文歌词创作用什么AI?实用AI作词工具、歌词创作助手真实使用分享

开篇:写词卡壳是常态,AI只是帮我们推开灵感的门写词这么多年,我最清楚创作者卡在半路的煎熬。有时候心里有完整主题,比如想写一首关于城市漂泊的抒情歌,主歌写了两段,副歌反复打磨三天,要么全是…

2026/7/22 7:08:27 阅读更多 →
Apple Silicon Mac通过VMware Fusion运行Windows 11 ARM版全攻略

Apple Silicon Mac通过VMware Fusion运行Windows 11 ARM版全攻略

1. 项目概述在Apple Silicon芯片(M1/M2)的Mac设备上运行Windows系统,一直是许多用户刚需但颇具挑战性的任务。VMware Fusion 13作为首个原生支持ARM架构的虚拟机解决方案,彻底改变了这个局面。我最近在自己的M1 Max MacBook Pro上…

2026/7/22 7:08:27 阅读更多 →
eNSP USG6000V防火墙Web管理8443端口访问失败全攻略

eNSP USG6000V防火墙Web管理8443端口访问失败全攻略

1. 项目概述:从一次典型的“8443之痛”说起如果你正在学习华为网络技术,或者在公司里负责搭建一个模拟实验环境,那么eNSP(Enterprise Network Simulation Platform)和里面的USG6000V防火墙镜像,大概率是你的…

2026/7/22 7:08:27 阅读更多 →
嵌入式C语言设计模式实战:结构体与函数指针应用

嵌入式C语言设计模式实战:结构体与函数指针应用

1. 为什么嵌入式C需要设计模式?在嵌入式开发领域,资源受限的环境常常让开发者陷入两难:既要保证代码的高效执行,又要维护良好的架构设计。传统面向对象语言(如Java/C)的设计模式实现方式在嵌入式C环境中往往…

2026/7/22 7:07:27 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻