第 03 课,共 7 课
让 Agent 记住对话
使用 checkpointer 保存同一会话的消息,让 Agent 在下一轮记得用户提供的信息。
完成本课后
你应该能做到
- 理解 thread_id 的作用
- 给 Agent 加上开发环境记忆
- 知道内存存储和生产数据库的区别
记忆属于会话状态
官方短期记忆文档把同一段连续对话称为 thread。每个 thread 使用独立的 thread_id,消息不会串到其他用户或会话。
checkpointer 在每一步后保存状态,并在下一次调用前恢复状态。
在内存中保存一段对话
InMemorySaver 适合本地学习和测试,程序退出后数据会消失。生产环境应该换成 Postgres 等数据库后端。
memory_agent.py
from langchain.agents import create_agent
from langchain_deepseek import ChatDeepSeek
from langgraph.checkpoint.memory import InMemorySaver
agent = create_agent(
model=ChatDeepSeek(model="deepseek-chat", temperature=0),
tools=[],
checkpointer=InMemorySaver(),
)
thread = {"configurable": {"thread_id": "demo-user-1"}}
agent.invoke(
{"messages": [{"role": "user", "content": "我叫小林,正在学习 LangChain。"}]},
thread,
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "我叫什么,正在学什么?"}]},
thread,
)
print(result["messages"][-1].content)
换一个 thread_id 会怎样
把 demo-user-1 改成 demo-user-2 再问同样的问题,新会话不会知道小林的信息。这证明短期记忆按 thread 隔离。
长期用户资料不应该无限塞进消息历史。需要跨会话保存时,应使用官方 Long-term memory 能力或业务数据库。
本课完成标准
- 第二轮回答能说出小林和 LangChain
- 换一个 thread_id 后不会读取原会话信息
- 理解 InMemorySaver 不能直接用于生产持久化
常见错误
确认两次 invoke 都传入相同的 thread 配置。
这是 InMemorySaver 的正常行为,生产环境改用数据库 checkpointer。
内容来源
依据官方文档中文整理
代码和概念来自 LangChain 官方固定提交。中文解释用于降低学习门槛,英文原文只作为核对入口。
Short-term memory
src/oss/langchain/short-term-memory.mdx
Official memory code sample
src/snippets/code-samples/short-term-memory-usage-py.mdx
固定提交 08ae2610bd712a4a340d59f27122bea97a0a598d