Sunday 的面试指南

Agent 短期记忆与会话恢复:Thread 和 Checkpointer

《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday

你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。

上一小节,咱们留下了一个问题:“用户第一次告诉 Agent 的信息,下一次提问时怎样才能继续使用?”

很多同学会觉得,只要使用同一个 agent 对象连续调用两次就可以了。

比如:

await agent.invoke({
  messages: [{ role: 'user', content: '订单 A1024 的退款金额是 3000 元。' }]
})

await agent.invoke({
	messages: [{ role: 'user', content: '刚才说的是哪个订单?' }]
})

但是,这两次 invoke() 默认是两次独立调用。第二次只提交了“刚才说的是哪个订单”,第一轮的内容并没有再次传入。

也就是说:两次调用使用的虽然是同一个 agent ,模型也并不会因此自动拥有上一轮记忆。

那么怎么办呢?

最简单的办法就是,由 Agent 应用直接读取历史消息,再把整段历史消息重新拼到 messages 里面。

但是,第五章已经学过,LangChain 的 Agent 内部其实是一张 LangGraph。除了 messages,Graph State 中还可能包含任务状态、摘要、上传文件和其他运行数据。

如果每个项目都手动加载、拼接和保存这些 State,代码就会很乱了。

那么,如果想要解决这个问题,就得用到一个东西了,那就是 短期记忆

短期记忆到底是什么

LangChain 把同一个会话中的记忆称为 Short-term Memory,也就是短期记忆。

Agent 短期记忆与会话恢复:Thread 和 Checkpointer 配图 1

咱们先用一句话来理解:

短期记忆就是 Agent 在同一个会话中保存并继续使用之前 State 的能力。

比如,用户在售后会话 A 中告诉 Agent:“订单 A1024 的退款金额是 3000 元。”

随后继续追问:“这个金额需要人工审核吗?”

第二句话中没有再次出现订单号和退款金额。

Agent 想要理解“这个金额”指的是什么,就必须继续使用会话 A 前面保存的 State。

但是,如果同一个用户新建了会话 B,再问一遍“这个金额需要人工审核吗”,Agent 默认不应该把会话 A 的订单信息带进来。

所以,所谓的 “短期” 并不是说 “保存的时间短”,而是说 这份记忆的使用范围只在当前会话中

Agent 短期记忆与会话恢复:Thread 和 Checkpointer 配图 2

当前会话的状态完全可以在 PostgreSQL(一个数据库) 中保存几个月。只要这份状态仍然只属于当前会话,没有自动共享给其他会话,它依然属于短期记忆。

那么,短期记忆中保存的到底是什么?

最常见的是历史消息,比如:

  • HumanMe

本节试读已结束

继续学习,解锁完整课程

购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。

扫码添加作者微信,备注「Agent 课程」

添加作者微信 · 购买完整课程

解锁完整课程 ¥499

《Agent 大模型 0 到 1 系统课》
扫码添加微信,备注「Agent 课程」,购买后由 Sunday 提供完整内容的学习方式。

扫码添加作者微信 LGD_Sunday,购买 499 元 Agent 课程

微信昵称:LGD_Sunday
手机上可长按保存二维码,再用微信扫一扫识别。

保存微信二维码