当前位置: 首页 > news >正文

LangGraph 中的 add_messages

有两种导入方式:

  • from operator import add as add_messages
  • from langgraph.graph.message import add_messages

from operator import add as add_messages

这是 Python 标准库operator模块中的add函数,它只是一个通用的加法运算

from operator import add # 普通加法 result = add(3, 5) # 结果是 8 # 列表拼接 list1 = [1, 2] list2 = [3, 4] result = add(list1, list2) # 结果是 [1, 2, 3, 4] # 字符串拼接 result = add("Hello ", "World!") # 结果是 "Hello World!"

在 LangGraph 中的使用场景:

  • 通常用于简单状态更新,比如在State中定义 reducer
from typing import List, TypedDict from operator import add as add_messages class State(TypedDict): messages: List[str] # 使用 operator.add 来合并列表 # 当多个节点返回 {"messages": ["新消息"]} 时,它们会被简单地拼接在一起

from langgraph.graph.message import add_messages

这是 LangGraph 专门为消息管理设计的reducer 函数,它处理的是BaseMessage对象(如HumanMessage,AIMessage等)。

补充:什么是 reducer 函数?简单来说就是状态合并规则

  • 在 LangGraph 里,多个不同的节点(node)都可能会修改同一个状态字段(比如往messages列表里加新消息)。当这些修改同时发生时,reducer 函数的作用就是决定以什么方式把这些修改合并到一起,形成最终的新状态
  • LangGraph 的状态是跨节点共享的。节点 A 返回{"messages": [msg1]},节点 B 返回{"messages": [msg2]}。如果没有 reducer,后返回的msg2会把msg1覆盖,导致消息丢失
  • 通过Annotated为状态字段指定一个 reducer,告诉 LangGraph:当多个节点都返回这个字段的新值时,用这个指定的函数来合并它们
from langgraph.graph.message import add_messages from langchain_core.messages import HumanMessage, AIMessage # 专门处理消息列表 msg1 = HumanMessage(content="Hello") msg2 = AIMessage(content="Hi there!") # 智能合并消息 result = add_messages([msg1], [msg2]) # 结果是一个包含两个消息对象的列表

在 LangGraph 中的使用场景:

  • 用于消息状态管理,能智能处理消息的添加、更新和去重
from typing import Annotated, Sequence, TypedDict from langgraph.graph.message import add_messages from langchain_core.messages import BaseMessage class State(TypedDict): messages: Annotated[Sequence[BaseMessage], add_messages] # 使用 add_messages 作为 reducer

对比

一个简单的示例:

  • 使用operator.add(简单拼接)
from operator import add as add_messages from typing import List, TypedDict class State(TypedDict): messages: List[str] # 简单字符串列表 # 节点1 返回 node1_output = {"messages": ["用户说: 你好"]} # 节点2 返回 node2_output = {"messages": ["助手说: 你好!有什么可以帮助你?"]} # 状态合并后: # messages = ["用户说: 你好", "助手说: 你好!有什么可以帮助你?"] # 只是简单拼接
  • 使用langgraph.graph.message.add_messages(智能合并)
from langgraph.graph.message import add_messages from typing import Annotated, Sequence, TypedDict from langchain_core.messages import BaseMessage, HumanMessage, AIMessage class State(TypedDict): messages: Annotated[Sequence[BaseMessage], add_messages] # 节点1 返回 node1_output = { "messages": [ HumanMessage(content="你好", id="msg1"), AIMessage(content="你好!", id="msg2") ] } # 节点2 尝试更新 msg2 node2_output = { "messages": [ AIMessage(content="你好!有什么可以帮助你?", id="msg2") # 相同 ID ] } # 合并后,msg2 会被替换为新的内容,而不是追加 # 最终 messages = [HumanMessage("你好", id="msg1"), # AIMessage("你好!有什么可以帮助你?", id="msg2")]
http://www.gsyq.cn/news/1610500.html

相关文章:

  • 如何彻底解决Zotero Style插件兼容性问题:终极修复指南与优化方案
  • Sunshine游戏串流服务器:打造你的终极跨平台游戏串流系统
  • 数字电路模拟程序系列题目实践总结与分析
  • 程序员写技术博客的正确姿势|从零写出高质量 CSDN 爆款文章(排版+结构+流量技巧)
  • 从Vgs到VCO:用拉扎维《模拟CMOS》的核心概念,手把手拆解一个PLL设计流程
  • 在Windows上使用DS4Windows:将PS4/PS5手柄无缝转换为Xbox控制器
  • VR-Reversal:让3D全景视频在普通屏幕上自由探索
  • 2026年6月,长春市优质机动车鉴定评估机构揭秘
  • 别再死磕理论了!手把手带你用CANoe实测Autosar网络管理状态机(附报文分析)
  • SpringBoot+Vue 公益服务平台管理平台源码【适合毕设/课设/学习】Java+MySQL
  • AWS EBS 磁盘扩容与挂载实验手册
  • YOLOv8一站式本地部署:图像分类、检测与分割实战指南
  • Beyond Compare 5终极激活指南:三步实现永久专业版
  • 告别臃肿控制软件:G-Helper如何用50MB重塑华硕笔记本性能管理体验
  • Sora接入国内企业私有云的完整链路:从模型蒸馏、视频缓存优化到GPU资源调度(含华为昇腾适配代码)
  • 扩散模型能耗预测:计算复杂度与能源效率的关系
  • 008、SRGAN感知损失:对抗生成网络在超分中的视觉质量革命
  • 计算机专业就业:工程实践里的常见坑
  • CADC技术:基于树突卷积的内存计算优化方案
  • 量子立方体编码:理论与实践的突破性进展
  • 扩散模型能耗预测:计算复杂度与优化策略
  • 树莓派5上从源码编译Mosquitto 1.6.8保姆级教程(含libssl-dev依赖安装避坑)
  • 量子启发神经算子压缩:边缘计算中的模型优化实践
  • 量子化学计算中的UCJ与LUCJ参数优化方法解析
  • Go 基础:结构体与切片
  • AI Agent 工具调用中间件:Go 实现截断、超时与熔断
  • Transformer 理解
  • Speck2f神经形态芯片与低功耗瞳孔追踪系统解析
  • Arm CCA与CAEC:机密计算中的高效内存共享技术
  • NCM音乐文件解锁神器:3分钟极速转换的终极指南