← 返回首页
Agent作者 · Vic Agent

智能体的记忆系统:短期记忆、长期记忆与语义检索

Agent 为什么需要独立的记忆系统?从模型无状态和上下文有限出发,分析记忆的写入、组织、召回、遗忘与可信度问题。

很多产品把“把聊天记录存进数据库”称为 Agent Memory。但存储只回答了信息放在哪里,没有回答更困难的问题:什么值得记住、何时应该想起、不同记忆冲突时信谁,以及用户要求遗忘后如何保证它不再出现。

记忆系统的困难不在容量,而在选择。

What:模型的上下文不是记忆

大语言模型在一次推理中只能使用当前请求里的 Token。调用结束后,模型不会自动保留状态。应用把历史消息再次发送给模型,产生了“它还记得”的体验,但这只是上下文重放。

可以区分三层:模型参数保存训练形成的通用模式;上下文窗口保存当前调用可见的工作状态;外部记忆系统跨调用持久化信息,并在需要时重新注入上下文。

因此 Agent Memory 更准确的定义是:围绕未来决策,对经验执行编码、持久化、组织、召回、修正和删除的一套控制系统。 数据库只是它的介质之一。

Why:为什么扩大上下文窗口仍不够

最直接的方案是把全部历史放进更大的上下文。但信息越多并不必然越好。

首先,长上下文增加推理成本和延迟。其次,模型的注意力不是平均分配,重要证据可能被大量无关细节淹没。相关研究观察到过位置偏差;新模型虽然在简单检索上有所改善,复杂任务中的信息污染和冲突仍然存在。

更根本的是,历史日志与决策所需信息不是一回事。一次工具调用的完整输出适合审计,但下一次决策可能只需要错误码和失败原因。记忆系统需要把“发生过什么”转换成“未来什么时候有用”。

写入:哪些经验值得留下

无限写入会制造记忆垃圾。一个合理的写入策略至少检查四件事:信息是否稳定、是否具有未来价值、是否已存在、是否允许长期保存。

用户的语言偏好通常稳定;一次临时网络超时通常不值得进入长期画像。架构决策需要保留理由和适用范围;模型对失败的猜测不能直接升级为事实。

写入还应发生在正确的事务边界。任务尚未成功时就记录“已经迁移完成”,会让失败运行污染未来判断。更稳妥的做法是保存原始事件,在成功或人工确认后再提炼长期事实,并附带来源、时间和置信度。

组织:短期、情景、语义与程序性记忆

工作记忆服务当前 Run,包括目标、计划、最近观察和未解决问题,生命周期短但优先级最高。

情景记忆记录某次任务的过程与结果,回答“上次发生了什么”。它适合失败复盘和相似案例召回。

语义记忆保存相对稳定的事实,如用户偏好、项目约定和系统拓扑,回答“我们知道什么”。

程序性记忆保存如何完成一类任务,例如 Skill、操作手册和验证流程,回答“应该怎么做”。

这些分类不是为了模仿心理学术语,而是因为它们的写入条件、更新频率和召回方式不同。把所有文本扔进同一个向量库,会丢失这种治理差异。

召回:相似并不等于有用

向量检索根据语义相似度寻找片段,但“与问题相似”不代表“对当前决策有效”。旧版本文档可能非常相似却已经失效;另一个用户的记录可能相关却没有访问权限;一条错误总结可能比原始事实更容易命中。

可靠召回通常是多阶段的:

当前意图
→ 身份与作用域过滤
→ 关键词/向量/结构化查询
→ 时间与可信度重排
→ 去重和冲突检测
→ 按 Token 预算注入

用户画像等规模小、必须完整的事实,不应依赖 Top-K 碰运气;海量历史则不应全部注入。不同记忆需要不同读取契约。

修正与遗忘比召回更难

记忆不是只增不减的日志。用户换了工作,旧公司信息应被新事实替代;项目接口重构后,旧约定要失效;两条来源冲突时,系统要保留版本和证据,而不是让后写入的文本悄悄覆盖前者。

删除更复杂。信息可能存在于原始记录、摘要、向量索引、缓存和由它推导出的画像中。只删除主表会留下“幽灵记忆”。真正的遗忘需要可追踪的数据血缘和跨存储失效机制。

此外,模型生成的摘要是有损压缩。细节一旦被错误概括,后续 Agent 会把摘要当作历史事实。摘要必须保留指向原始证据的引用,并允许重新展开。

缺点与研究边界

记忆提高连续性,也引入隐私、偏见和自我强化风险。错误记忆被频繁召回后,会影响更多决策,又生成更多支持它的记录,形成反馈回路。

目前仍缺少成熟的记忆评估。静态问答只能测试“能否找回”,却不能测试“是否在正确时机使用”“是否避免使用过期信息”以及“删除后是否真正消失”。2026 年的记忆研究综述把可信反思、因果召回、学习型遗忘和长期整合列为开放问题,说明这远不是向量数据库已经解决的领域。

一个记忆冲突的具体例子

假设用户三个月前说“所有服务统一使用 PostgreSQL”,今天的新项目明确选择 ClickHouse。只按相似度召回,旧偏好可能覆盖当前项目事实;只按时间取最新,又可能把局部选择误写成全局偏好。

系统需要保存事实的作用域:这是用户级原则、组织级约定,还是单个项目的决定?还要保存有效时间和证据。装配上下文时,当前项目的显式配置应优先于全局偏好;如果冲突无法自动判断,应把两条证据展示给用户,而不是让模型静默选择。

这类冲突说明,记忆更接近带版本与作用域的知识图谱,而不是按相似度排列的便签。向量检索可以找到候选,却不能独立决定真相。

怎样评价一个记忆系统

除了召回率,还应测试错误写入率、过期信息使用率、冲突识别率、删除传播时间和对最终任务成功率的真实贡献。更严格的评估会安排跨会话任务:先建立偏好,再修改偏好,随后要求系统在新旧场景中分别做出正确选择。

如果加入记忆后回答更个性化,却更容易泄露跨项目信息或坚持旧事实,这个系统不能称为更智能,只是更有黏性的错误源。

我的判断

在系统设计上,我更倾向于先建立小而可信的记忆:明确的用户偏好、经过确认的项目事实、可追溯的任务结论。等写入、冲突和删除机制稳定后,再扩大自动提炼范围。记得少但可信,比什么都记却无法纠错更有价值。

Agent Memory 的目标不是让系统记住更多,而是让它对信息的生命周期负责。好的记忆有出处、有作用域、有时间、有更新规则,也有被删除的路径。

这也要求团队把“记住”当作一种需要授权、能够解释且可以撤销的系统行为,而不是模型默认拥有的无限权利。

如果说 Context 是模型此刻看到的桌面,Memory 就是桌面背后的档案系统。档案越多,越需要目录、权限、版本与销毁制度。没有这些制度,所谓长期记忆只是在长期积累错误。

延伸阅读:MemGPT、A Survey on the Memory Mechanism of LLM-based Agents、Memory for Autonomous LLM Agents。