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']}
相关推荐
4SAPI3 分钟前
企业级文档智能处理大模型 API 架构选型指南:4SAPI、硅基流动与 OpenRouter 的工程权衡
人工智能·gateway·agent·1024程序员节·rag
昨日之日200612 分钟前
MiniMax-H3 V7(FastH3 Omni):8步生成带声视频,比原版快近10倍。参考图、视频、声音全都能用!
人工智能·计算机视觉·音视频·1024程序员节
临床数据科学和人工智能兴趣组19 分钟前
提取匹配模式的第一个值
人工智能·r语言·1024程序员节·r语言-4.2.1·临床试验·临床科研·科学问题
todoitbo31 分钟前
Q1 MuJoCo 模型里的 49 项传感器定义与 60 维数据:一次关节和 IMU 输出核验
人工智能·ai·机器人·1024程序员节·启元机器人
RFID科技的魅力36 分钟前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
再__努力1点38 分钟前
RK3576/RV1126B多路视频 AI 开源引擎 CosmoEdge:从模型到交付,轻松搞定!
人工智能·opencv·计算机视觉·架构·课程设计
IT_陈寒1 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
墨抒颖 msy.plus1 小时前
矩阵、注意力与 GPU:拆解 DeepGEMM 与 FlashMLA
人工智能·llm·gpu·源码解析·1024程序员节·deepseek
甲维斯1 小时前
K3.1pro你这“机灵鬼”,3D建模无敌了!
人工智能