Part 2 · 核心能力

06 记忆系统:短期 + 长期

06.1 先给结论:记忆分两层

2026 年的 LangGraph,记忆是两套互补的机制:

机制 存什么 范围 用途
Checkpointer 图的状态快照 单个会话(thread) 续聊、人机协同、时光回溯
Store 应用自定义数据 跨会话 用户偏好、长期事实

很多人只知其一。两者一起用,Agent 才又"记得刚才聊啥",又"记得你是谁"。

06.2 短期记忆:Checkpointer

from langgraph.checkpoint.memory import InMemorySaver
checkpointer = InMemorySaver()

graph = g.compile(checkpointer=checkpointer)

cfg = {"configurable": {"thread_id": "user-001"}}
graph.invoke({"messages": "我叫小明"}, cfg)
graph.invoke({"messages": "我叫什么?"}, cfg)

生产换持久化的:

from langgraph.checkpoint.sqlite import SqliteSaver
cp = SqliteSaver.from_conn_string("sqlite:///state.db")

from langgraph.checkpoint.postgres import PostgresSaver
cp = PostgresSaver.from_conn_string("postgresql://user:pwd@host/db")
cp.setup()

重点看thread_id 必须稳定。 同一用户的每次对话用同一个 thread_id,记忆才连得上。用 UUID 最稳。

06.3 长期记忆:Store

短期记忆跟着会话走。长期记忆要跨会话保留:

from langgraph.store.memory import InMemoryStore
store = InMemoryStore()

graph = g.compile(checkpointer=cp, store=store)

节点里读写长期记忆:

def remember(state, *, store):
    # 按 user_id 存一条偏好
    store.put(("prefs",), state["user_id"], {"like": "足球"})
    return {}

跨会话、跨线程都能读到。这就是"它记得你是球迷"的来源。

06.4 更高级的记忆:langmem

如果你不想自己设计抽取逻辑,官方有 langmem 库:

  • 自动从对话里抽取重要信息
  • 维护长期记忆,和 Store 打通
  • 还能反哺优化 Agent 的提示词

核心建议:Store 管"存",langmem 管"学" 简单偏好用 Store 直接存。要"越用越懂用户",上 langmem。

▸ 向前桥接 记忆有了。可有些事不能全信 AI,下一章讲"人何时插手"。