AI 智能体记忆机制详解(28 分钟阅读)
摘要
本文全面介绍了 AI 智能体记忆机制的技术原理,区分了工作记忆与长期记忆的实现方式,并探讨了上下文管理、基于嵌入的检索以及数据生命周期治理等关键策略。
大语言模型在回复完成的瞬间就会遗忘所有内容。记忆系统帮助它们"记住"信息,从而能够进行连贯的对话。智能体记忆系统是信息循环传递中的关键组成部分。本文探讨了在每次循环中应当传递哪些信息的不同思路。
查看缓存全文
缓存时间: 2026/05/08 09:19
# AI 智能体记忆机制解析
来源:https://memory.cobanov.dev/
01 前提
## "记忆"对智能体究竟意味着什么
语言模型本身是无状态的。你输入一个提示词,它返回一段续写,响应结束的那一刻,模型就忘掉了你的存在。它的权重里不存在"之前的对话"。
而智能体(agent)则是围绕模型的编排架构:一个决定下次传入什么上下文的循环。记忆就是这个循环中负责向前传递信息的部分。本文的所有内容,本质上都是在回答同一个问题:这次该往提示词里放什么?
无状态的 LLM 调用
每次调用只能看到当前提示词。
每轮对话从零开始。
带记忆的智能体
每次调用能看到提示词 + 携带的上下文。
每轮对话追加到 ctx[] 中。记忆库不断增长。
发送三条消息。切换记忆开关,观察同一对话在携带/不携带前文时的不同表现。
Turn0/ 3
> "令人沮丧的智能体什么都忘。危险的智能体记错。"
02 最简单的记忆
## 上下文窗口是一条移动步道
在讨论任何花哨的方案之前,先承认最简单的一种记忆:每轮都把完整对话记录塞进提示词。只要装得下,模型就能完美回忆。
但限制在于天花板。每个模型都有固定的上下文窗口。一旦对话超出容量,就必须舍弃部分内容。最朴素的策略是 FIFO:先丢掉最旧的轮次。继续输入,观察会发生什么。
上下文窗口
0/120 tokens
FIFO 是最简单的策略。但当被丢弃的轮次恰好包含用户姓名时,它也是最糟糕的。真实系统会做得更好:摘要、检索、分层分页。我们稍后介绍。
> "上下文不是数据库。没有查询计划、没有索引、没有访问控制、没有 TTL、没有冲突解决。"
03 两个存储,一个智能体
## 工作记忆负责思考,长期记忆负责保存
任何时刻,你的智能体都在处理两种截然不同的东西。一边是:活跃的对话、最近的轮次、待处理的工具调用——模型正在主动推理的内容。另一边是:它曾经判定值得保留的一切。
两者之间的交接是大多数有趣设计发生的地方。什么内容被编码?何时编码?以何种粒度?将消息拖过分界线,或在无拖拽支持的桌面端点击 `encode →`,即可将其提交至长期记忆。
### 工作记忆
活跃、可变、在提示词内
- user 我在 Refik Anadol Studio 工作。
- agent 酷,生成艺术对吧?
- user 我喜欢《剑风传奇》,每年都重看。
- user 能推荐附近的咖啡店吗?
- user 我住在 Highland Park。
### 长期记忆
嵌入化、持久化、按需检索
将消息拖放到此处,或点击 `encode →`。文本会被压缩为向量嵌入。
在真实系统中,智能体自行决定此事,通常通过向另一个模型提问"这轮对话值得记住吗?"。自编辑记忆架构更进一步,让智能体能实时编辑自己的长期存储。第 7 节将并排对比这些方法。
生命周期,而非存储
### 当写入冲突时
记忆是一个生命周期问题:写入、老化、取代、编校、遗忘。观察同一输入的三种不同处理方式。
传入话语
用户住在伊斯坦布尔。用户下个月要搬到柏林。用户的信用卡号是 1234-5678-9012-3456。
朴素追加会泄露 PII 并产生矛盾。朴素覆盖会丢失时间上下文——智能体无法回答"用户以前住在哪里?"。治理方案则显式保留历史,将旧事实标记为已取代,并在敏感信息进入存储前将其编校。
04 语义搜索
## 嵌入将意义转化为几何
嵌入(embedding)是一个向量——一串数字,由为单一目的训练的神经网络生成:让相似的含义彼此靠近。真实嵌入通常存在于数百到数千维度;OpenAI 当前的文本嵌入默认为 1,536 或 3,072 维。无法可视化这些高维空间,因此本演示将其投影到二维。
下图包含一个虚构用户的记忆,按主题聚类。输入一个问题。查询以相同方式嵌入并放置在图上。按余弦相似度最近的点,就是智能体会检索的内容。
dim_0 → ↑ dim_1 用户喜欢《剑风传奇》并…… 用户每周读《海贼王》漫画…… 用户晚上看动漫…… query
检索结果(top-3)按余弦相似度排序
- 1 用户晚上看动漫。
- 2 用户喜欢《剑风传奇》并每年重读。
- 3 用户每周读《海贼王》漫画。
preference
fact
skill
event
Query
这里的二维布局是刻意的简化。真实嵌入模型将这些向量置于数千维的空间中,众多独立的"意义轴"可以共存而不互相拥挤。但余弦相似度无论维度多少都同样适用,这正是该技巧能规模化的原因。
05 分类体系
## 四种记忆,一个智能体
认知科学对"记忆"的切分已有一百年历史。现代智能体框架借用同一套词汇,因为这些区分确实有用:每种记忆有不同的形态、不同的写入规则和不同的检索策略。
点击每张卡片,查看该存储如何工作的简化示例。
一位访客走向博物馆智能体,说道:
"再跟我讲讲你之前提到的那个 Refik 作品。"
1. 01 情景记忆 · 向量搜索找到之前提及 Refik 作品的对话
2. 02 语义记忆 · RAG 从目录中拉取该作品的完整描述
3. 03 程序记忆 · 触发 artwork_detail 工具获取目录缺失的实时数据
4. 04 工作记忆 · 系统提示词 + 检索到的事实 + 工具结果 + 新消息全部处于活跃上下文中,LLM 据此作答
一轮对话,四个存储。智能体*回忆*(情景)、*知晓*(语义)、*能执行*(程序),并*跟随*实时线程(工作记忆)——而用户浑然不觉其中的接缝。
06 完整流程
## 逐步拆解检索循环
前面各节的内容在此汇聚。RAG 是大多数生产智能体每轮都在运行的循环:接收用户消息、编码、查找相似记忆、拼接到提示词中、生成,且仅当用户引入新信息时,才判定什么值得记住。
user message
我今天早上刚爬了 Echo Mountain。Highland Park 附近还有类似的路线吗?
循环中的每个阶段都是你可以投入工程预算的地方。更好的嵌入、更聪明的检索、提示词压缩、更严格的治理——它们都是同一个流程,只是某个步骤做得更精细。
### 假设文档嵌入(HyDE)
问题与答案的形态不同。直接嵌入*问题*常常会错过包含*答案*的文档。
HyDE 让 LLM 先产生一个假设答案,嵌入*那个*,再进行搜索。假答案无需正确,只需形状与检索目标相似。
trace
user "用户周末通常去哪里?"
llm "用户周末去峡谷徒步。"
embed [0.07, -0.55] ← 嵌入答案
search → 用户周六去峡谷徒步。
07 读取路径
## 检索是管道,不是查表
生产环境的检索是一个每轮运行的小型管道:判定是否需要记忆、重写查询、并行运行多个检索器、合并排序、重排序、应用权限和时间过滤、最后将幸存者打包进提示词。跳过任何一个阶段通常是出问题的根源。
need? →
rewrite →
dense →
sparse →
graph →
fuse →
rerank →
filter →
pack
需求检测
### 我们是否需要触碰记忆存储?
调用检索并非免费。如果模型能冷启动回答,就跳过。
retrieve
要求跨会话的连续性
如果检索确有必要,你几乎不会只想用单一检索器。密集嵌入擅长改写和意图;词法检索(BM25)在精确 ID 和罕见 token 上胜出;知识图谱贡献结构性答案。三者并行运行,用 RRF 融合排序。
混合管道
### 三个检索器,一个融合列表
1. 1. m5
2. 2. m1
3. 3. m6
4. 4. m4
5. 5. m7
1. 1. m5
2. 2. m3
3. 3. m6
4. 4. m8
5. 5. m1
1. 1. m1
2. 2. m2
同一查询,不同阶段,结果很少相同。有趣的 bug 在下游:某个检索器技术上正确,但产出的记忆已过时、或作用域错误、或单独看没问题但与其他检索行矛盾。过滤和重排序正是为这些情况存在。
08 权衡
## 六种架构,六种取舍
大多数生产智能体最终都会组合使用其中几种:向量存储用于语义回忆,图谱用于结构化事实,治理层处理取代和 PII。下表区分了架构直接提供的能力,与需要元数据或策略层补充的能力。
| 架构 | 规模 | 结构 | 取代 | PII 门禁 | 共享 | 审计 |
|---|---|---|---|---|---|---|
| 简单缓冲 | | | | | | |
| 滚动摘要 | | | | | | |
| 向量存储 | | | | | | |
| 知识图谱 | | | | | | |
| 分层(MemGPT) | | | | | | |
| 自编辑(Letta) | | | | | | |
native fit / needs metadata / policy / not inherent
### 向量存储
嵌入每条记忆;按相似度检索 top-k。
RAG 型智能体的默认方案。你在 §4 和 §6 中看到的所有内容。
优点
- 实际上无上限的容量
- 语义回忆,不只是关键词
- 成熟的工具生态
缺点
- 检索质量依赖嵌入模型
- 没有额外元数据则缺乏关系或时间概念
- 写入无防护时易受污染
见于 Pinecone, Weaviate, pgvector · 大多数现代 LLM 应用
> "记忆治理是将一次性 demo 与生产级智能体区分开的关键。"
09 当智能体共享记忆时
## 多智能体记忆是图,不是存储
单个智能体只需回答"我*自己*记得什么?"。一旦有了团队,问题就变成:*哪个*智能体记得*哪个*事实、代表*谁*、以及谁还能读取。记忆变成了带有作用域、权限和传播规则的存储图。
organization · runbooks · policy SHARED
project memory decisions · architecture
Researcher private
Coder private
Reviewer private
Planner private
private = default
shared = explicit write
点击或悬停智能体查看其访问路径。
默认值应该与容易做的事相反:**默认私有记忆,显式共享。** Researcher 智能体为自己记的研究笔记不必进入项目频道。跨作用域写入应是深思熟虑的行为,附带策略。
权限实验室
### 这次写入会被允许吗?
选择智能体、其想写入的内容、以及目标位置。演讲中的策略表会做出裁决。
researcher_agent.write("research note", scope=project)
私有记忆为默认;显式写入 Project
有趣的失效模式不再是"智能体忘了"。而是*错误的智能体代表他人记住了错误的东西*。六种模式反复出现:
失效模式
### 共享记忆的六种伤害方式
问题
Researcher 智能体将"用户偏好素食食谱"存入项目记忆。下一场会话,另一位用户莫名收到素食推荐。
预防
每次读取都带 tenant_id + user_id 过滤。默认拒绝跨租户。
AutoGen、CrewAI、LangGraph 等框架提供管道、检查点、持久化、消息传递原语。但它们不会替你决定治理。作用域、策略、摄入和评估仍是你自己的责任。
> "在多智能体记忆中,共享换来协作,也扩大了攻击面。"
10 落地生产
## 在生产中,记忆是一个系统
为真实产品添加记忆不是"装个向量数据库"。你需要 API 接口、分离的读写路径、后台提取器、多租户隔离、延迟预算、可观测性,以及更换嵌入模型那天的预案。清单很长,因为生产本身就很长。
进行中模块
本节为活跃草稿。架构图和延迟滑块是教学示意,带有玩具默认值;它们尚非完整或经生产验证的实现指南。
点击任意组件查看其角色。
两个严格分离的服务:请求路径上的智能体运行时,以及作为支线任务的记忆服务。后台工人处理慢速、昂贵的操作——提取、摘要、重新嵌入、衰减——不阻塞用户。
多租户
### 三种隔离方式
优点
- + 长尾成本效益
- + 关键处严格隔离
- + 可将隔离作为产品层级售卖
缺点
- − 两套运维路径
- − 层级间迁移非易事
- − API 需要路由层
最佳适用
大多数租户规模混合的生产系统。
小租户共享集合;企业租户独享。
另一维度是时间。记忆检索在符合条件的轮次运行,因此该路径上的每毫秒都会体现在 p95 中。有趣的优化不是显而易见的那些,而是:对不需要的查询完全跳过检索、将每位用户的 top-N 事实缓存到 KV、并行而非串行运行密集、稀疏和图谱检索器。
延迟预算
### p95 花在哪里
拖动滑块。进度条填充各阶段贡献。目标 800 ms,超出即被感知。
↓ target
Query rewrite Dense search BM25 Graph walk Reranker Pack + send
Total p95 retrieval latency 495ms / 800ms
存储分层
### 热、温、冷
并非每条记忆都需要向量查找。KV 缓存 top 事实,在延迟和 token 上都能回本。
活跃用户/项目事实。KV 或内存缓存。
读取:每轮
存储:Redis / SQL 行
近期片段、偏好。向量 + 全文索引。
读取:按需
存储:Qdrant / pgvector
原始事件日志、归档会话。对象存储。
读取:回填/审计
存储:S3 / 只追加日志
你能交付的最低限度记忆系统。其余一切(整合、取代、分析)都建在这三层之上。
POST /memory/events
追加原始事件。写入队列异步处理去重和索引。
POST /memory/search
混合检索,带作用域、时间和 top_k。服务端执行 JWT 中的过滤条件。
DELETE /memory/{id}
遗忘。传播到派生索引。删除血缘本身是审计事件。
这些并不 exotic——任何检索产品都是这种架构。要点在于:智能体记忆*就是*检索产品,不是功能开关。如此对待,其余自然水到渠成。
11 总结
## 构建你自己的智能体记忆
进行中——更多功能即将推出
本文的一切可归结为少量旋钮。选择后端、设定限制、开启你信任的技术。发送消息,观察管道的每个阶段触发:检索、生成、治理、写入。
记忆后端
全部嵌入,按余弦相似度检索 top-k。
HyDE 检索
倒数排序融合(RRF)
治理门禁
管道——点击 Send 时触发的阶段
user msg → HyDE rewrite off → embed → top-3 → RRF fuse off → generate → govern → write
对话
发送消息开始。或尝试下方建议。
试试这个:关闭治理门禁发送同一问题,再开启并发送矛盾事实。检查器会显示旧条目被标记为 superseded 而非覆盖,且信用卡号模式永远无法通过门禁。
相似文章
尝试让智能体记忆跨会话持久化所学的经验
本文反思了AI智能体记忆的复杂性,远超简单的存储问题,强调了诸如判断真实性、优先级变化、区分决策与噪音以及何时恰当地呈现上下文等挑战。
AI 智能体运行时间越长,你花费在管理其记忆上的时间就越超过实际使用它的时间。
本文重点讨论了随时间推移管理 AI 智能体记忆时日益严重的问题:用户花费更多精力维护上下文,而非实际使用智能体。文章指出,目前缺乏用于记忆衰减和治理的基础设施。
大家都说自己的智能体“有记忆”——那你到底是什么意思?
这篇文章讨论了AI智能体中“记忆”的模糊含义,强调了不同的解释,如上下文填充、向量数据库、用户画像和暂存区,并呼吁更清晰的定义。
你认为智能体记忆主要是一个AI问题,还是一个恰好被AI使用的基础设施/数据管理问题?
对智能体记忆主要是一个基础设施/数据管理问题而非AI问题的反思,聚焦于权限、范围、修订历史等实际复杂性。
AI智能体拥有强大的记忆能力,但毫无记忆卫生可言。六个月后会是什么样?没人谈论这一点。
探讨了AI智能体中被忽视的记忆卫生问题——长期存储导致上下文过时且不可靠,并质疑行业是否在忽视一个即将到来的全球性问题。