LangGraph 消息更新的两种模式有何不同
使用 LangGraph 编排多个节点时,状态字段采用哪种归并函数,会直接影响后续节点拿到的数据结构。add_messages 和 operator.add 看似都能把新元素追加到列表中,但它们对输入值的处理并不一致。下面用相同的 StateGraph 流程分别运行两种配置,观察结果并说明各自适合的使用场景。
add_messages和operator.add 产生的数据格式完全不一样,这一点要注意
add_messages
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)
{
'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
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)
{'list': ['start', '11111', '22222']}
相关资讯
-
10.07
SpaceAssistant:AI Agent 工具实践指南
-
10.07
NinFenz:AI Agent 工具实践指南
-
10.07
ai-methodology:AI Agent 工具实践指南
-
10.07
docparse:实践指南
-
10.07
immune-brain:AI Agent 工具实践指南
-
10.07
human-centric-deepfake-detection:AI Agent 工具实践指南
游戏推荐
推荐专题
热门阅读
推荐下载
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏