记忆与检查点

LangGraph 的 StateCheckpointer 让 Agent 具备跨轮次记忆与人机中断恢复能力。


State 与 messages

create_agent 的默认 State 包含 messages 序列(对话历史)。每次 invoke 传入新用户消息,Checkpointer 会把历史合并进 State。

from langchain.agents import create_agent
from langgraph.checkpoint.memory import InMemorySaver

agent = create_agent(
    "openai:gpt-4.1-mini",
    tools=[],
    checkpointer=InMemorySaver(),
)

无 checkpointer 时,每次 invoke 独立,无跨轮记忆


thread_id

config = {"configurable": {"thread_id": "user-42-session-1"}}

agent.invoke({"messages": [{"role": "user", "content": "Hi"}]}, config=config)
agent.invoke({"messages": [{"role": "user", "content": "Continue."}]}, config=config)

同一 thread_id 共享 checkpoint;不同用户/会话应使用不同 id。


Checkpointer 后端

后端场景
InMemorySaver本地开发、测试
SqliteSaver单机持久化
Postgres / Redis 等生产多实例
from langgraph.checkpoint.sqlite import SqliteSaver

with SqliteSaver.from_conn_string("checkpoints.db") as checkpointer:
    agent = create_agent(..., checkpointer=checkpointer)

生产环境需考虑 并发写入checkpoint 清理策略


自定义 State 字段

通过 state_schema 或 Middleware 扩展 State(如 user_idretrieved_docs):

from typing_extensions import TypedDict, Annotated
from langgraph.graph.message import add_messages

class CustomState(TypedDict):
    messages: Annotated[list, add_messages]
    user_id: str

# 见官方 Memory 文档:create_agent(..., state_schema=CustomState)

add_messages reducer 负责消息列表的追加合并。


短期 vs 长期记忆

类型实现
短期messages + checkpointer(同 thread)
长期Middleware 启动时从向量库/DB 加载用户画像写入 prompt
摘要Summarization Middleware 压缩旧 messages

LangChain 1.0 将「记忆」视为 Harness 责任,而非单一 Memory 类。


人机中断与恢复

LangGraph 支持 interrupt:工具执行前暂停,用户批准后 invoke 恢复。HITL Middleware 封装常见模式,checkpoint 保存中断点。


上下文窗口管理

messages 无限增长会撑爆 context。策略:

  1. Summarization Middleware — 旧对话压成摘要
  2. 滑动窗口 — 只保留最近 N 条
  3. RAG — 历史存外部,按需检索

下一步