2.1.3 关键步骤说明

第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 关键步骤说明-大赛人网

thread_id 是记忆管理的核心开关:在会话2里询问会话1的会话信息,Agent 会表示不知道——因为双方记忆空间完全隔离。
生产环境中:
场景1:多用户聊天
不同 thread_id = 不同会话,Agent 能正确记住每个会话的内容。

图片[2]-2.1.3 关键步骤说明-大赛人网
图片[3]-2.1.3 关键步骤说明-大赛人网

场景2:同一用户的不同任务

图片[4]-2.1.3 关键步骤说明-大赛人网

2.1.4 工作原理
内存保存了什么?

图片[5]-2.1.3 关键步骤说明-大赛人网

自动追加历史

图片[6]-2.1.3 关键步骤说明-大赛人网

此时,checkpointer 自动:
① 读取之前的历史
② 追加新消息
③ 调用模型(传入完整历史)
④ 保存新的历史
说明:checkpointer 会自动管理历史

2.1.5 常见问题
1、为什么 Agent 不记得?
检查:

  • ✅ 是否添加了 checkpointer=InMemorySaver() ?
  • ✅ 是否传入了 config 参数?
  • ✅ 两次调用的 thread_id 是否相同?
图片[7]-2.1.3 关键步骤说明-大赛人网

2、InMemorySaver 会丢失数据吗?
会! InMemorySaver 只保存在内存中:

  • ✅ 同一进程内有效(不支持跨进程共享)
  • ❌ 程序重启后丢失(或进程重启后丢失)
  • ❌ 不同进程无法共享

解决方案:持久化(SQLite、PostgreSQL)

3、内存会无限增长吗?
会! 默认情况下,InMemorySaver 会保存所有消息。
问题:

  • 消息越来越多(无限增长,需要管理上下文)
  • token消耗增加,甚至会超过模型的 token 限制
  • 响应速度变慢、成本增加

解决方案:上下文管理(修剪、摘要)
4、如何清空某个会话的历史?
目前 InMemorySaver 没有提供删除 API。
临时方案:

  • 使用新的 thread_id
  • 或重新创建 Agent
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容