LangGraph中的Reducer是什么

发布时间:2026/9/23 17:32:16

LangGraph中的Reducer是什么
Reducer归约器是一个函数它定义了“当多个节点都想修改同一个 State 字段时如何把这些修改合并成一个最终结果”。或者说Reducer 决定了 State 中某个字段的更新策略——是覆盖是追加是累加还是其他自定义规则从问题出发理解 Reducer核心矛盾多个节点都要写同一个字段在 LangGraph 中多个节点会依次执行每个节点都可能修改 State。这就产生了一个问题如果节点 A 把counter设为 1节点 B 又把counter设为 2那最终counter应该是多少有两个答案2后一个覆盖前一个—— 这是默认行为31 2 累加起来—— 这是 Reducer 改变后的行为Reducer 就是用来回答这个问题的工具。默认行为 vs Reducer 行为默认行为覆盖Override如果不指定 ReducerLangGraph 的默认行为是覆盖class MyState(TypedDict): counter: int # 没有 Reducer name: str # 没有 Reducer执行流程初始状态counter 0 节点 A 返回{counter: 1} → 状态变为counter 1 节点 B 返回{counter: 2} → 状态变为counter 2 覆盖了节点 A 的 1 最终结果counter 2适用于只需要最终值的场景比如用户名、当前状态标志等。Reducer 行为合并Merge指定 Reducer 后行为变为合并class MyState(TypedDict): counter: Annotated[int, operator.add] # 使用加法 Reducer执行流程初始状态counter 0 节点 A 返回{counter: 1} → 状态变为counter 1 节点 B 返回{counter: 2} → 状态变为counter 3 1 2 3累加了 最终结果counter 3适用于需要累积的场景比如计数器、总分、消息列表等。Reducer 的本质一个普通函数Reducer 并没有什么魔法它就是一个普通的 Python 函数接收两个参数def reducer_func(current_value, new_value) - final_value: current_value当前 State 中该字段的值 new_value节点返回的该字段的新值 return合并后的最终值 # 在这里定义你的合并逻辑 return merged_resultLangGraph 内置了几个常用的 ReducerReducer 函数效果等价于operator.add数值相加lambda a, b: a boperator.set集合合并lambda a, b: a | badd_messages消息列表追加特殊处理含 ID 去重不指定覆盖lambda a, b: b用生活例子彻底搞懂场景记账本你和室友共用一本账本记录每天的开销。没有 Reducer覆盖模式周一小明记了吃饭 50元 → 账本[吃饭 50元] 周二小红记了打车 30元 → 账本[打车 30元] ← 周一的内容被覆盖了 周三你们吵架了因为周一的账找不到了有 Reducer追加模式周一小明记了吃饭 50元 → 账本[吃饭 50元] 周二小红记了打车 30元 → 账本[吃饭 50元, 打车 30元] ← 追加在后面 周三月底算账清清楚楚在这个例子里add就是一个 Reducer它的规则是新来的记录追加到旧记录的后面而不是替换它。为什么 LangGraph 需要 Reducer原因一图不是线性执行的在 LangGraph 中图可能有分支和循环┌→ 节点 B ─→┐ START ─→┤ ├→ 节点 D └→ 节点 C ─→┘节点 B 和节点 C 都可能修改同一个字段。如果没有 Reducer后执行的节点会抹掉前一个节点的修改。有了 Reducer两者的贡献可以共存。原因二循环需要累积节点 A → 条件判断 → 未满足 → 回到节点 A循环在循环中每次经过节点 A 都可能产生新数据。Reducer 确保这些数据是累积的而不是每次循环都重置。原因三可预测的状态变化Reducer 让状态变化变得透明和可预测。你知道每个字段的更新规则是什么不会出现“咦这个值怎么不见了”的困惑。实战自定义 Reducer内置 Reducer 不能满足需求时可以自己写示例1限制列表长度def last_n_reducer(n: int): 只保留最近 n 条记录 def reducer(old: list, new: list) - list: combined old new return combined[-n:] return reducer class MyState(TypedDict): recent_logs: Annotated[List, last_n_reducer(10)] # 只保留最近10条示例2字典合并def dict_merge(old: dict, new: dict) - dict: 合并两个字典新值覆盖旧值 merged old.copy() merged.update(new) return merged class MyState(TypedDict): metadata: Annotated[Dict, dict_merge] # 字典合并Reducer 的完整工作流程为了让你彻底明白这里是 LangGraph 内部处理 Reducer 的完整流程1. 节点执行完毕返回一个字典比如 {counter: 5} 2. LangGraph 遍历这个字典的每个键值对 3. 对于每个键比如 counter a. 查找 State 定义中这个键有没有 Reducer b. 如果有 Reducer - 获取当前 State 中 counter 的旧值比如 3 - 调用 Reducer 函数reducer(旧值3, 新值5) - 把 Reducer 的返回值比如 8写入 State c. 如果没有 Reducer - 直接用新值5覆盖旧值3 4. 更新后的 State 传递给下一个节点面试级总结问题答案Reducer 是什么一个定义 State 字段更新规则的函数默认行为是什么覆盖新值替换旧值Reducer 改变什么从覆盖变成合并/累加/自定义Reducer 的参数(current_value, new_value) → merged_value为什么需要它因为图有分支和循环需要累积而非覆盖内置的有哪些operator.add、operator.set、add_messages能自己写吗能任何符合签名的函数都可以一句话记住没有 Reducer 的 State 字段后浪直接把前浪拍死在沙滩上有 Reducer 的字段后浪和前浪汇合在一起变成更大的浪。现在你应该能理解为什么messages: Annotated[List, add_messages]这么重要了吧没有它你的聊天 Agent 永远只能记住最后一句话。学习资源推荐如果你想更深入地学习大模型以下是一些非常有价值的学习资源这些资源将帮助你从不同角度学习大模型提升你的实践能力。一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取四、AI大模型商业化落地方案作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。

相关新闻

终极碧蓝航线自动化工具:3步配置解放你的游戏时间

终极碧蓝航线自动化工具:3步配置解放你的游戏时间

2026/8/23 12:57:17

终极碧蓝航线自动化工具:3步配置解放你的游戏时间 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript AzurLaneAutoS…

AI驱动制造业质量管理的技术架构与实践

AI驱动制造业质量管理的技术架构与实践

2026/8/23 12:57:17

1. 项目背景与核心价值在制造业数字化转型浪潮中,质量管理一直是企业核心竞争力的关键环节。过去三年间,我作为AI解决方案架构师深度参与了12家大型制造企业的质量管理系统改造,发现传统质量管控存在三个致命痛点:第一是问题发现滞…

京东抢购神器:3分钟快速部署的自动化秒杀工具

京东抢购神器:3分钟快速部署的自动化秒杀工具

2026/8/23 12:57:17

京东抢购神器:3分钟快速部署的自动化秒杀工具 【免费下载链接】JDspyder 京东预约&抢购脚本,可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 还在为抢购热门商品而手忙脚乱吗?JDspyder京东抢购脚本为你…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/21 18:38:46

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/23 14:32:22

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/21 18:36:40

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/23 14:31:31

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/21 18:40:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/23 14:34:03

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/22 0:19:28

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/21 23:38:13

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/22 0:48:53

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…