LangGraph 两种消息变更模式的差异

add_messages和operator.add 产生的数据格式完全不一样,这一点要注意

add_messages

python 复制代码
from typing import TypedDict, Annotated
from langgraph.graph.message import add_messages
from langgraph.graph import MessagesState, StateGraph,START,END
from prompt_toolkit.contrib.regular_languages.regex_parser import AnyNode
from rich import print as rprint
from IPython import display
import operator

class State(TypedDict):
  list: Annotated[list[str],add_messages]
  # list: Annotated[list[str],operator.add]

def node1(state: State) -> dict:
  return {
    "list": ["11111"],
  }
def node2(state: State) -> dict:
  return {
    "list": ["22222"],
  }
graph=(
  StateGraph(State)
  .add_node(node1)
  .add_node(node2)
  .add_edge(START, "node1")
  .add_edge("node1", "node2")
  .add_edge("node2", END)
  .compile()
)
display.display(graph)
res=graph.invoke({"list":["start"]})
rprint(res)
bash 复制代码
{
    'list': [
        HumanMessage(
            content='start',
            additional_kwargs={},
            response_metadata={},
            id='8631c142-2fbc-494b-ad06-f501263bea35'
        ),
        HumanMessage(
            content='11111',
            additional_kwargs={},
            response_metadata={},
            id='e54a1bf7-ae21-49bf-93d4-0bfdee0de247'
        ),
        HumanMessage(
            content='22222',
            additional_kwargs={},
            response_metadata={},
            id='df900c16-adfd-42f7-9c98-ad1384394d7f'
        )
    ]
}

二 operator.add

python 复制代码
from typing import TypedDict, Annotated
from langgraph.graph.message import add_messages
from langgraph.graph import MessagesState, StateGraph,START,END
from prompt_toolkit.contrib.regular_languages.regex_parser import AnyNode
from rich import print as rprint
from IPython import display
import operator

class State(TypedDict):
  # list: Annotated[list[str],add_messages]
  list: Annotated[list[str],operator.add]

def node1(state: State) -> dict:
  return {
    "list": ["11111"],
  }
def node2(state: State) -> dict:
  return {
    "list": ["22222"],
  }
graph=(
  StateGraph(State)
  .add_node(node1)
  .add_node(node2)
  .add_edge(START, "node1")
  .add_edge("node1", "node2")
  .add_edge("node2", END)
  .compile()
)
display.display(graph)
res=graph.invoke({"list":["start"]})
rprint(res)
arduino 复制代码
{'list': ['start', '11111', '22222']}
相关推荐
Awei爱emo19 小时前
一个有嘴没手的学霸,和一个会干活的项目经理——我终于搞懂 Agent 是啥了
人工智能
海带紫菜菠萝汤19 小时前
欧洲也开源了「78B 只激活 3.46B」:主权叙事变了,技术选型没变
人工智能·深度学习·ai·开源·大模型
进击的雷神20 小时前
OpenClaw 太重、启动太慢?我试了试这个 Rust 重写的轻量版 AI 助手网关
开发语言·人工智能·rust·zeroclaw
微软技术分享20 小时前
BinSentry 1.0 二进制哨兵测试版发布
人工智能
蒲公英eric20 小时前
Python工具链与LaTeX排版:把兵器配齐
人工智能·python·算法·数学建模·数学建模工具
海盗123420 小时前
AI 新闻日报 2026-10-03:编排写进代码、领域知识打包成技能、具身智能回到班次与价格
人工智能·机器人·人工智能aigc
沐言人生20 小时前
牛逼!Github上有人开源了,让AI帮你生成数学物理解题视频
人工智能
liulilittle20 小时前
短期内不存在通用 AI 工作流魔法
大数据·开发语言·c++·人工智能·llm·agent·tools
别动我齐刘海20 小时前
简历技术栈全面复习总结
c++·人工智能·深度学习·学习·tcp/ip·算法·rpc
AIUCE20 小时前
都说Muse开源了,其实开源的是 gadget SDK,不是 Muse
人工智能