第1步:初始化记忆引擎: checkpointer = InMemorySaver() ——创建一个内存级的记忆存储。
注意:InMemorySaver内存中保存,进程结束就丢失数据,适合测试。生产环境可换成数据库持久化的 SqliteSaver 、PostgresSaver 等
第2步:绑定 Agent:在 create_agent 时传入 checkpointer ,让 Agent 具备状态存储能力。
第3步:设定会话 ID:通过 config = {“configurable”: {“thread_id”: “1”}} 为每次调用指定线程标识。同一个 thread_id 共享记忆,不同 thread_id 完全隔离。
![图片[1]-2.1.3 关键步骤说明-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1128.png)
thread_id 是记忆管理的核心开关:在会话2里询问会话1的会话信息,Agent 会表示不知道——因为双方记忆空间完全隔离。
生产环境中:
场景1:多用户聊天
不同 thread_id = 不同会话,Agent 能正确记住每个会话的内容。
![图片[2]-2.1.3 关键步骤说明-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1129.png)
![图片[3]-2.1.3 关键步骤说明-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1130.png)
场景2:同一用户的不同任务
![图片[4]-2.1.3 关键步骤说明-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1131.png)
2.1.4 工作原理
内存保存了什么?
![图片[5]-2.1.3 关键步骤说明-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1132.png)
自动追加历史
![图片[6]-2.1.3 关键步骤说明-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1133.png)
此时,checkpointer 自动:
① 读取之前的历史
② 追加新消息
③ 调用模型(传入完整历史)
④ 保存新的历史
说明:checkpointer 会自动管理历史
2.1.5 常见问题
1、为什么 Agent 不记得?
检查:
- ✅ 是否添加了 checkpointer=InMemorySaver() ?
- ✅ 是否传入了 config 参数?
- ✅ 两次调用的 thread_id 是否相同?
![图片[7]-2.1.3 关键步骤说明-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1134.png)
2、InMemorySaver 会丢失数据吗?
会! InMemorySaver 只保存在内存中:
- ✅ 同一进程内有效(不支持跨进程共享)
- ❌ 程序重启后丢失(或进程重启后丢失)
- ❌ 不同进程无法共享
解决方案:持久化(SQLite、PostgreSQL)
3、内存会无限增长吗?
会! 默认情况下,InMemorySaver 会保存所有消息。
问题:
- 消息越来越多(无限增长,需要管理上下文)
- token消耗增加,甚至会超过模型的 token 限制
- 响应速度变慢、成本增加
解决方案:上下文管理(修剪、摘要)
4、如何清空某个会话的历史?
目前 InMemorySaver 没有提供删除 API。
临时方案:
- 使用新的 thread_id
- 或重新创建 Agent
















请登录后查看评论内容