乐于分享
好东西不私藏

AI Agent的"记忆"是怎么工作的?

AI Agent的"记忆"是怎么工作的?

一个健忘的Agent让人沮丧,一个记错事的Agent才真正危险。


开篇

大语言模型(LLM)其实是失忆症患者

你给它一段提示词(prompt),它回复完的那一刻,就忘了你曾经存在过。模型权重里没有"上次对话"的痕迹,每次响应都是从零开始。

那为什么现在的AI助手能"记住"我们的对话?

答案不在模型本身,而在围绕它的系统设计(Harness)

这就是今天要聊的核心问题:AI Agent的记忆系统是如何工作的

一、记忆的本质:不是存储,是生命周期管理

很多人以为记忆就是"把对话存起来"。错了。

真正理解了记忆的工程师会说:记忆是一个生命周期问题——写入、老化、覆盖、删除、遗忘。

想象一个场景:

用户说:"我住在伊斯坦布尔,下个月搬去柏林。"

naive追加的结果:

  • 用户住在柏林
  • 用户住在伊斯坦布尔(被覆盖)

问题来了:当用户问"我以前住哪?"时,Agent答不上来。

带治理的方案

  • 用户住在柏林(current,有效)
  • 用户曾住在伊斯坦布尔(superseded,保留用于时序推理)

同时,一个PII过滤器会捕获信用卡号这类敏感信息,直接拒绝写入。

这就是记忆管理的精髓:不是简单的增删改查,而是维护一个可审计、可溯源、有时序语义的信息网络。

二、上下文窗口:最短的那块木板

最原始的记忆方式?直接把整段对话塞进Prompt。

只要上下文窗口够大,模型就有完美记忆。但问题就在这里:

每个模型都有固定的上下文窗口上限。

一旦对话超出限制,你必须丢弃点什么。最简单的策略是FIFO(先进先出)——丢弃最早的对话。

但FIFO是灾难性的:如果恰好是用户自我介绍的那条消息被丢弃,Agent就会陷入"你是谁?"的死循环。

真实系统会用更聪明的策略:

  • 摘要(Summarization):定期把对话压缩成摘要
  • 检索(Retrieval):只召回相关内容
  • 分层(Hiearchical):热数据放内存,冷数据放磁盘

三、两种记忆:工作记忆与长期记忆

你的Agent在同一时刻处理着两件截然不同的事

类型
工作记忆
长期记忆
状态
活跃、可变
持久化、需检索
内容
当前对话、待处理工具调用
所有"值得保留"的信息
位置
直接在Prompt里
向量数据库

工作记忆是Agent的"桌面"——它正在处理的所有东西都在这儿。

长期记忆是Agent的"档案室"——那些"也许以后会用到"的信息存在这里。

两者之间的流转才是真正考验工程能力的地方:

  • 什么时候把信息从工作记忆写入长期记忆?
  • 按什么粒度写?整条消息还是提取的实体?
  • 如何处理冲突和矛盾?

四、向量的魔法:如何让机器理解"意思"

如果说记忆是图书馆,向量就是让书籍自己找到读者的索引系统

什么是向量嵌入?

向量嵌入是把文本通过神经网络转换成一组数字(通常1536维或3072维)。它的核心特性是:

语义相近的内容,在向量空间中距离更近。

"我喜欢在周末去徒步"和"周末我通常去爬山"——这两句话向量距离很近,即使没有共享词汇。

语义搜索的原理

当用户问"用户周末一般做什么?"时:

  1. 问题被转换成向量
  2. 在向量空间中找最近的N个记忆
  3. 返回"最相关"的历史信息

这就是RAG(检索增强生成) 的技术基础。

五、四种记忆类型:认知科学给我们的启发

AI Agent的记忆系统设计,其实大量借鉴了认知科学的研究成果:

1. 情景记忆

  • 定义:发生了什么,什么时候发生的
  • 例子:"周二用户问过《剑风传奇》"
  • 检索方式:按时间、最近邻
  • 典型应用:ChatGPT的跨会话记忆

2. 语义记忆

  • 定义:事实和概念
  • 例子:"用户住在洛杉矶 Highland Park"
  • 检索方式:向量相似度
  • 典型应用:知识库问答

3. 程序记忆

  • 定义:学会的技能和工具使用
  • 例子:"用户偏好简洁回答,喜欢看代码示例"
  • 检索方式:上下文激活
  • 典型应用:个性化回复风格

4. 工作记忆

  • 定义:当前的"便签板"
  • 内容:系统提示词 + 检索到的记忆 + 当前消息
  • 特性:每次对话重置

一个实际的例子

用户走进博物馆导览Agent,说:"再给我讲讲你之前提到的那个Refik Anadol的作品。"

这一句话触发了四种记忆同时工作

  1. 情景记忆 → 找到上次聊Refik作品的对话
  2. 语义记忆 → 从展品目录RAG出作品的完整描述
  3. 程序记忆 → 调取实时数据(当前展览状态)
  4. 工作记忆 → 把所有信息拼进Prompt,生成回答

用户感知不到任何"记忆切换"的痕迹——这正是设计的目标。

六、RAG循环:Agent的记忆是如何运转的

生产环境中的Agent,每次对话都在跑这个循环:用户消息 → 编码Query → 向量搜索 → 召回Top-K → 拼入Prompt → LLM回答 → 治理新信息 → 更新记忆

图源:https://memory.cobanov.dev/?utm_source=tldrai#multi-agent

几个关键技术

1. HyDE(Hypothetical Document Embeddings)

问题:用户问"用户周末一般去哪?",直接搜可能漏掉答案。

HyDE的解法:先用LLM生成一个"假答案",然后把假答案向量化再去搜。

假答案不需要正确,只需要"像"真正的答案。

2. 混合检索(Hybrid Retrieval)

单一检索器不够。真实系统往往同时运行:

  • Dense检索(向量):擅长语义理解、同义改写
  • Sparse检索(BM25):擅长精确匹配、专业术语
  • Graph检索(图数据库):擅长关系推理

三种结果用RRF(互惠排名融合) 合并权重,输出统一排序。

3. 治理门控(Governance Gate)

每条新信息过"安检":

  • PII检测:信用卡号、手机号直接拒绝
  • 时序标注:标记"current"还是"superseded"
  • 权限检查:这条信息谁可以读?

七、多Agent记忆:当团队合作时

单个Agent问"我记得什么"。多Agent团队问:"哪个Agent记了什么?为谁记的?谁还能读?"

这时记忆从"存储"变成“权限图”

图源:https://memory.cobanov.dev/?utm_source=tldrai#multi-agent

核心原则:默认私有,显式共享。

研究员Agent随手记的研究笔记,不应该自动进入项目频道。跨范围写入必须是有意为之,并且附有权限策略。

六个高频踩坑场景

场景
问题
解法
跨用户泄漏
A用户的偏好出现在B用户会话中
tenant_id + user_id双重过滤
过度共享
所有Agent读写同一份记忆
严格的scope隔离
投毒传播
错误信息在Agent间扩散
写入审核 + 版本控制
决策冲突
不同Agent基于不同记忆给出矛盾建议
记忆一致性检查
知识陈旧
用过时信息回答新问题
时间戳 + TTL
归因丢失
不知道某条记忆是谁写的
完整的审计日志

十、行动指南

如果你是开发者,想要构建自己的Agent记忆系统:

1. 从向量存储开始

  • 成熟的向量存储生态:Pinecone / Weaviate / pgvector

2. 设置治理层

  • PII过滤必须第一优先级
  • 时序标记让系统"知道"信息是否过期

3. 监控这些指标

  • 检索召回率(相关记忆被召回的比例)
  • 上下文利用率(Prompt里多少是有效信息)
  • 幻觉率(基于错误记忆生成的回复比例)

4. 考虑混合架构

  • 向量库做语义召回
  • 图数据库做关系推理
  • KV做高频访问缓存

结语

"记忆治理决定了你的系统是昙花一现的Demo,还是能上生产的企业级Agent。"

大模型本身是失忆的,但通过精心设计的记忆系统,Agent可以:

  • 跨会话记住你的偏好
  • 理解你和你的关系网络
  • 在多Agent协作中正确共享信息
  • 在提供便利的同时保护隐私安全

记忆不是把对话存起来,而是一套信息的生命周期管理体系

理解了这一点,你就理解了现代AI Agent最核心的工程挑战。


参考资料:https://memory.cobanov.dev/