LangGraph中State更新messages原理;LangGraph 中的 State 为什么使用 `state["messages"]`
LangGraph中State更新messages原理;
State 定义
messages: Annotated[list[BaseMessage], add_messages]
Annotated[类型, reducer] 中的 reducer 用于定义 State 更新时的合并策略。
使用 messages 构造 Prompt
messages = [SystemMessage(content=prompt)] + state["messages"]
response = llm.invoke(messages)
这里仅仅是在构造发送给 LLM 的上下文,与 State 更新无关。也就是说SystemMessage里面的内容并不会更新到state里面
节点返回
return {
"messages": [response]
}
返回的是 State Delta(状态增量),而不是完整 State。
LangGraph 自动更新 State
当前 State:
{
"messages": [HumanMessage("你好")]
}
节点返回:
{
"messages": [AIMessage("你好")]
}
LangGraph 自动执行:
add_messages(
[HumanMessage("你好")],
[AIMessage("你好")]
)
得到新的 State:
{
"messages": [
HumanMessage("你好"),
AIMessage("你好")
]
}
注意
不要手动拼接历史消息:
错误👉 return
正确👉 return
因为 State 的合并工作由 LangGraph 根据 add_messages 自动完成。
LangGraph 中的 State 为什么使用`state["messages"]
State 定义
class State(TypedDict)这里的 State 继承自 TypedDict,表示:
State 本质上是一个字典(dict),只是增加了类型约束。
运行时实际结构
state = {
"messages": [...]
}
因此访问方式是:state["messages"] 而不是:state.messages
浙公网安备 33010602011771号