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']}
相关推荐
lucas_AI38 分钟前
RAG 给你的答案,其实先「筛」过了你的证据——这个工具把黑箱拆开给你看
人工智能
江湖有缘1 小时前
基于Ubuntu部署SoduWork:企业级 AI 原生协同平台实战全流程
linux·人工智能·ubuntu·ai·soduwork
lucas_AI1 小时前
Claude Code 的「项目经理」上班了:协调器主动汇报,并行 AI 工人不等你催
人工智能
zhaoshuzhaoshu1 小时前
NPU(神经网络处理单元)详细解析
人工智能
在所不辞兄1 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
Flynn Liang2 小时前
LLM 应用安全:Prompt 注入、越权与输入输出护栏
java·人工智能·大模型·langchain4j·llm 安全·prompt 注入·guardrail
吴佳浩5 小时前
《拆解全球最火 AI 开源项目》第一季 · REA
人工智能
AllData公司负责人9 小时前
AI大模型数据开发底座系列说明书,AllData集成Chat2DB开源项目建设AI 数据库分析底座,涵盖AI 洞察/对话SQL/智能视图!
数据库·人工智能·sql·开源·ai 洞察·对话sql
泯泷11 小时前
让 Agent 分清“马上办、等一等、顺手办”
人工智能·llm·agent
鲜于言悠90511 小时前
Claude Fable 5.2 登场,专治复杂推理与长任务
人工智能