news 2026/10/23 2:54:18

MessagesState:消息列表怎么累加

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MessagesState:消息列表怎么累加
个人主页: > for_ever_love__ <(欢迎各位大佬莅临😊)
其他栏目: > 大模型开发从0到1 <
其他栏目: > iOS项目总结大全 <
其他栏目: > 我想学python了 <
其他栏目: > iOS UI <

文章目录

  • MessagesState:消息列表怎么累加
    • 一、MessagesState 是什么
    • 二、add_messages 的智能之处
    • 三、为什么不用普通 list + 自己 append
    • 四、自定义时还能加别的字段

MessagesState:消息列表怎么累加

做对话类 Agent,状态里几乎一定会有一个「消息列表」:用户说的、模型回的、工具返回的全堆在里面。前面讲过,这种「累积型字段」要用 reducer 来追加而不是覆盖。LangGraph 已经把这套逻辑封装好了一个开箱即用的状态:MessagesState。

一、MessagesState 是什么

MessagesState本质上就是一个只含messages字段的TypedDict,并且messages已经用add_messages这个 reducer 声明了「累加」语义:

fromlanggraph.graphimportMessagesState,START,ENDfromlangchain_core.messagesimportHumanMessage,AIMessagedefchat(state:MessagesState):# 返回一个 AIMessage,会被追加进 messages,而不是替换return{"messages":[AIMessage(content="你好,我是助手")]}graph=StateGraph(MessagesState)graph.add_node("chat",chat)graph.add_edge(START,"chat")graph.add_edge("chat",END)app=graph.compile()result=app.invoke({"messages":[HumanMessage(content="在吗?")]})forminresult["messages"]:print(type(m).__name__,":",m.content)# HumanMessage : 在吗?# AIMessage : 你好,我是助手

注意:输入里只有 1 条 HumanMessage,输出里变成 2 条——AI 的回复被追加进去了。add_messages就是背后的 reducer。

二、add_messages 的智能之处

add_messages不只是简单拼接,它还会:

  • 去重更新:如果新消息带id且已存在,会就地更新而不是重复添加;
  • 自动适配类型:你可以传HumanMessage/AIMessage/ToolMessage/SystemMessage,甚至传纯字典{"role":"user","content":"..."},它都会规整成标准消息对象;
  • 保留顺序:严格按时间先后累加,天然形成对话时间线。

三、为什么不用普通 list + 自己 append

手动state["messages"].append(...)虽然也能加,但有两个麻烦:一是节点函数里改的是「入参的副本」,不一定回写进状态;二是失去add_messages的更新/去重能力。用MessagesState让「消息怎么累积」这件事变成框架约定,省心且不易错。

四、自定义时还能加别的字段

MessagesState只有messages。如果你的图还需要别的累积字段,可以自己继承式声明:

fromtypingimportTypedDict,Annotatedfromlangchain_core.messagesimportAnyMessagefromlanggraph.graphimportadd_messagesclassMyState(TypedDict):messages:Annotated[list[AnyMessage],add_messages]scratch:Annotated[list,lambdaa,b:a+b]# 自己再加一个累积字段

对话 Agent 的「记忆」其实就是这份不断变长的messages。配合后面要讲的「检查点(Checkpointer)」,这份消息列表还能被按会话存下来,实现真正的多轮记忆。这就是下一篇的内容。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 2:54:07

5BC3 高真空直热式全波整流管安装与调试指南

摘要:本文以 5BC3 高真空直热式全波整流管为主线,面向电子管放大器制作与老式收音机修复爱好者,系统梳理从管脚识别、灯丝供电、高压连接,到滤波电路配置、负载匹配、散热处理与热冲击防护的全流程实操规范。内容不堆砌公式,聚焦可落地的装机经验与安规细节,帮助新手规避…

作者头像 李华
网站建设 2026/10/23 2:53:16

Spring Boot学生公寓管理系统|毕业设计源码、论文参考资料分享!

说实话&#xff0c;做毕业设计最纠结的事情之一&#xff0c;就是选题。 太简单的项目怕没什么技术含量&#xff0c;太复杂的又担心自己做不完。尤其是计算机专业的同学&#xff0c;选题时还得考虑功能好不好实现、论文有没有内容可写、最后答辩能不能讲清楚。 如果你最近正在找…

作者头像 李华
网站建设 2026/10/23 2:50:53

如何用零代码方式实现SOME/IP节点仿真?

定义 SOME/IP节点仿真是指在车载以太网SOA&#xff08;面向服务架构&#xff09;开发测试中&#xff0c;通过软件工具模拟SOME/IP服务节点或客户端节点的行为&#xff0c;实现SD&#xff08;服务发现&#xff09;过程、服务调用、事件通知等交互验证的技术。本实现方式符合AUTO…

作者头像 李华
网站建设 2026/10/23 2:50:04

Joybuy ERP 哪个好用?跨境电商卖家选型避坑指南

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

作者头像 李华
网站建设 2026/10/23 2:49:45

工业托盘为什么越做越“讲究”:一块塑料垫板背后的力学取舍

在很多人的直觉里&#xff0c;仓库地面上垫着的那块托盘&#xff0c;大概是现代工业供应链里最没有技术含量的物件之一。它既没有精密芯片&#xff0c;也不用插电联网&#xff0c;看起来不过就是一大块注塑成型的塑料网格或者平板。过去用人工叉车在地库里倒腾几箱普货&#xf…

作者头像 李华