LangChain 中文课
返回体系图 文章库
第 03 课,共 7 课:短期记忆

第 03 课,共 7 课

让 Agent 记住对话

使用 checkpointer 保存同一会话的消息,让 Agent 在下一轮记得用户提供的信息。

入门 20 分钟 Python
完成本课后

你应该能做到

  • 理解 thread_id 的作用
  • 给 Agent 加上开发环境记忆
  • 知道内存存储和生产数据库的区别
01

记忆属于会话状态

官方短期记忆文档把同一段连续对话称为 thread。每个 thread 使用独立的 thread_id,消息不会串到其他用户或会话。

checkpointer 在每一步后保存状态,并在下一次调用前恢复状态。

02

在内存中保存一段对话

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)
03

换一个 thread_id 会怎样

把 demo-user-1 改成 demo-user-2 再问同样的问题,新会话不会知道小林的信息。这证明短期记忆按 thread 隔离。

长期用户资料不应该无限塞进消息历史。需要跨会话保存时,应使用官方 Long-term memory 能力或业务数据库。

不要凭感觉结束

本课完成标准

  • 第二轮回答能说出小林和 LangChain
  • 换一个 thread_id 后不会读取原会话信息
  • 理解 InMemorySaver 不能直接用于生产持久化
遇到问题先看这里

常见错误

第二轮忘记了第一轮

确认两次 invoke 都传入相同的 thread 配置。

程序重启后记忆消失

这是 InMemorySaver 的正常行为,生产环境改用数据库 checkpointer。

内容来源

依据官方文档中文整理

代码和概念来自 LangChain 官方固定提交。中文解释用于降低学习门槛,英文原文只作为核对入口。

固定提交 08ae2610bd712a4a340d59f27122bea97a0a598d