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

posted @ 2026-06-26 17:55  asphyxiasea  阅读(33)  评论(0)    收藏  举报