[langgraph 02]

toolName: manage_core_memory

status: success

你的观察非常敏锐!这正是 LangGraph 和传统 LangChain Agent(如 AgentExecutor)最大的区别之一。

核心区别:自定义 vs 预定义

  1. 以前 (AgentExecutor)

    • 输出是固定的、黑盒的。
    • 不管你做什么,它通常返回一个包含 input, output, intermediate_steps 等固定字段的字典。你没法轻易改变这个结构。
  2. 现在 (LangGraph)

    • 输出完全等于你定义的 State
    • 如果你定义的 State{'foo': str, 'bar': list},那么 graph.invoke() 返回的就是这个字典。
    • 如果你定义的 State{'messages': list},那么它返回的就是包含消息列表的字典。

为什么这么做?

LangGraph 把控制权交还给了开发者。你可以根据业务需要,自由定义返回什么:

  • 不仅是消息:你可以让它返回结构化的数据、中间变量、甚至文件的二进制流。
  • 透明可控:不再有“魔法”字段,所有的输出字段都是你在 State 类里显式写下的。

所以,你在 persistence01.ipynb 里看到那个简单的字典结构,是因为你在那个 Notebook 里只定义了那样简单的 State。如果你用 MessagesState(像之前的例子那样),它就会变回你熟悉的样子(包含 messages 列表)。

posted @ 2026-01-23 00:52  十三山入秋  阅读(3)  评论(0)    收藏  举报