当前位置: 首页 > 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.jsqmd.com/news/1098536/

相关文章:

  • 农业无人机:航拍图像分析与作物健康评估
  • 从XML实体到XXE漏洞:原理、实战攻防与多语言安全实践
  • NVIDIA显卡用户终极色彩校准指南:5分钟实现专业级sRGB色彩还原
  • 基于HarmonyOS 7.0 跨端开发的篆刻印章设计页面实战
  • 如何彻底解决Zotero Style插件兼容性问题:终极修复指南与优化方案
  • Sunshine游戏串流服务器:打造你的终极跨平台游戏串流系统
  • 数字电路模拟程序系列题目实践总结与分析
  • YOLOv10模型改进-卷积层改进-第19篇:YOLOv10改进策略【卷积层】| Swin Transformer卷积改进方案
  • RAG失败根因与修复:语义对齐、知识切分与动态上下文蒸馏
  • Redis 慢查询问题诊断方法
  • 在Windows电脑上运行Android应用:WSABuilds一站式解决方案
  • 从Vgs到VCO:用拉扎维《模拟CMOS》的核心概念,手把手拆解一个PLL设计流程
  • 筑城世纪模型燃机电站沙盘动态灯光控制系统:基于STM32与Modbus RTU的实战方案
  • ClaudeCode 安装加切换 DeepSeek 大模型
  • 阿尔卡特手机照片导出到电脑:6 种简单实用方法
  • 程序员写技术博客的正确姿势|从零写出高质量 CSDN 爆款文章(排版+结构+流量技巧)
  • 抖音视频批量下载终极指南:douyin-downloader让你的内容收藏变得简单高效
  • TMSpeech:Windows本地实时语音转文字终极解决方案,5分钟实现高效会议记录
  • 在Windows上使用DS4Windows:将PS4/PS5手柄无缝转换为Xbox控制器
  • 从浏览器报错到容器编排:Gemini 镜像站一站式解决前端与 DevOps 难题
  • 如何快速使用d2s-editor:暗黑破坏神2存档编辑的完整指南
  • 模型强化学习中的乐观探索原理与实践
  • 告别电梯断网焦虑:手把手教你用QNET模拟真实弱网环境(附王者荣耀测试案例)
  • Python的__complex__方法支持复数类型扩展与自定义数值系统的实现
  • MySQL 临时表性能优化
  • 模型基强化学习中的探索困境与乐观算法实践
  • 机器人安全交互的被动扭矩控制技术解析
  • 零基础Linux运维实战:从Linux基础到Zabbix、Docker、MySQL、Nginx企业级部署
  • VR-Reversal:让3D全景视频在普通屏幕上自由探索
  • RedisDesktopManager-Windows:解决Redis可视化管理的技术痛点