Agent 长期记忆(Long-term Memory)保存可以跨任务、跨会话或跨运行线程复用的信息。它让 Agent 在新的上下文中重新取得过去形成的事实、经历或经验,而不要求原始对话始终留在模型的上下文窗口内。
长期记忆不是完整聊天记录的同义词,也不是把所有输入永久保存。它需要明确决定什么值得保留、属于谁、何时取回、如何处理冲突,以及何时更新或删除。
与短期记忆的边界
短期记忆主要服务于当前线程或任务;长期记忆则具有跨线程的持久作用范围。同一份数据存放在数据库中并不自动成为长期记忆,关键在于它是否会在未来其他任务中被选择、检索和使用。
长期记忆也不等于知识库。知识库通常保存可供多个用户或任务查询的资料;长期记忆还可能包含特定用户、Agent 或业务对象的经历和状态。两者可以使用相似的检索技术,但写入权限、时效和删除规则往往不同。
信息类型
长期记忆常按内容分为:
- 语义记忆:事实、概念和关系,例如已经确认的用户偏好或项目约束;
- 情景记忆:过去发生的具体事件、行动和结果;
- 程序性记忆:完成任务所依据的规则、指令或可复用技能。
这些分类可以并存,也可以映射为不同的数据结构。面向特定用户的长期记忆可进一步形成用户记忆。CoALA使用模块化记忆来组织语言 Agent,并区分工作记忆、情景记忆、语义记忆和程序性记忆;这是一种分析框架,不要求所有系统采用完全相同的分类。
写入流程
可靠的长期记忆写入通常包括:
- 从对话、运行轨迹或外部资料中识别候选信息;
- 判断信息是否稳定、可复用且有保存必要;
- 去除凭据、无关日志和未经验证的推测;
- 记录内容、来源、主体、时间、适用范围和置信信息;
- 与已有记忆比较,执行新增、合并、更新、失效或拒绝;
- 按用户和业务规则提供查看、更正、删除与到期清理能力。
写入可以发生在任务执行路径中,也可以由后台流程异步完成。前者能立即生效,但会增加延迟并干扰主任务;后者便于集中整理,却可能在新记忆形成前出现时差。
检索与装入上下文
长期记忆只有在被检索并装入当前上下文后才会影响模型。检索通常综合考虑:
- 当前任务与记忆内容的相关性;
- 信息的重要程度和置信度;
- 时间、有效期和最近更新时间;
- 用户、组织、项目或 Agent 的作用域;
- 来源是否仍然可访问和可信;
- 与其他记忆是否重复或冲突。
检索结果应保持少量、可追溯并与当前任务直接相关。向量相似度可以帮助召回候选内容,但不能单独判断事实是否正确或仍然有效。LangGraph 的记忆概览展示了使用自定义 Namespace 和 Store 管理跨线程记忆的一种实现方式。
冲突、更新与遗忘
长期存在不代表永久正确。偏好会改变,项目事实会过期,不同来源也可能互相矛盾。系统应避免直接覆盖而丢失历史依据,可以保存版本、有效时间和替代关系,并在使用高时效信息前重新查询权威来源。
遗忘是长期记忆治理的一部分。系统需要支持主动删除、到期清理、作用域结束后的回收,以及在删除后同步清除派生摘要和检索索引。对于与用户有关的数据,还应提供可理解的查看和更正入口。
评测
长期记忆评测应同时覆盖记忆、取回和正确使用:
- 该保存的信息是否被准确写入;
- 不该保存的敏感或短暂信息是否被拒绝;
- 跨会话能否找到相关记忆;
- 无关记忆是否会污染当前回答;
- 冲突和过期信息是否得到识别;
- 用户更正或删除后,旧信息是否停止生效;
- 不同用户和作用域之间是否严格隔离。