AI Agent 记忆管理是决定 agent 好不好用的关键。长期跑 agent 的人多半会踩到「记忆」的坑:agent 完全忘记它是谁、在帮谁做事、之前做过什么。每次新对话开始,它就像刚入职的新人,需要从头介绍一切。
下面整理的是踩坑三个月后沉淀出来的记忆架构,重点不在技术名词,而在设计原则。
TL;DR:记忆管理的核心是「让每份文件保持短小」和「让位置本身就是索引」。不要先冲向量搜索,先把文件结构理清楚。
为什么 AI Agent 会失忆
语言模型没有真正的记忆。
Claude 也好、ChatGPT 也好,每次对话开始时都是一张白纸。会「记得用户」,是因为有东西在对话开始前把信息塞进了 prompt。
这个「塞进去的东西」就是 agent 的记忆系统。
问题出在 context window。这是语言模型一次能处理的文字量上限。Claude Opus 原生开放到 1M token,听起来很多,但 system prompt、工具定义、对话历史、记忆文件全加起来,很容易就冲到数万 K。
超过之后会怎样?模型开始忽略早期的内容。精心写的安全规则、行为准则,可能在长对话中被「挤出去」。Agent 的行为就开始飘。
惨痛经验:把所有东西塞进同一个文件
最初搭 OpenClaw 时,记忆系统很简单:一个 MEMORY.md 文件,什么都往里面丢。偏好写进去、项目状态写进去、工具使用规范写进去、对话记录也写进去。
两个月后这个文件长到 800 行。

问题开始浮现。Agent 回应变笨、变蠢了,因为每次都要处理一大坨文字。更严重的是,它开始搞混信息:把 A 项目的规则套用到 B 项目,把上周的待办清单当成今天的。
用 token 计算工具量了一下:光是加载这份记忆文件,就吃掉 context window 的相当高比例。加上 system prompt 和工具定义,对话还没开始,已经用掉超过三成。剩下的空间要放对话历史和实际工作内容。
agent 表现越来越不稳定,根因在这。
三层记忆架构
把记忆系统推翻重建之后,灵感来自人脑的记忆分类:用户不会把所有记忆同时放在意识里,大部分存在「需要时才取用」的状态。
L0:索引层(每次自动加载)
一个文件:MEMORY.md,大约 60 行。
它不存任何实际内容,只做一件事:告诉 agent「什么信息在哪里」。
## L0 Boot(自动加载)
- SOUL.md:核心价值
- MIND.md:演化中的人格
- AGENTS.md:操作规则
## L1 Session(每次加载)
- brain.md:当下工作记忆,类似速记版
- TOOLS.md:本机工具和环境
## L2 On Demand(按需加载)
- memory/user/profile.md:基本信息
- memory/user/preferences.md:偏好设置
- projects/*/context.md:项目脉络
Agent 每次启动先读这份索引,根据当前任务,判断需要读哪些 L1 和 L2 的文件。
L1:工作记忆(每个 session 加载)
brain.md 是每天更新的文件。里面放的是「现在在做什么」「哪些事情卡住了」「等谁确认」。
这个文件大约 80-120 行,每天清理一次。昨天完成的任务移到 journal,只留进行中的。
TOOLS.md 列出 agent 能用的所有工具和 API。Agent 读完就知道自己「能做什么」,不会去尝试不存在的工具。
L2:主题记忆(按需加载)
这是拆分后最大的改善。
以前所有东西挤在一个文件里,现在按主题拆开:
memory/user/profile.md:基本信息,30 行memory/user/preferences.md:沟通和工作偏好,40 行memory/topics/:稳定的主题知识,每个文件不超过 100 行projects/*/context.md:每个项目的脉络和注意事项
聊到保险的时候,agent 才去读保险相关的 context;聊到健身的时候,才读健身的。不相关的文件完全不加载。
效果
重建之后,context window 的基础占用从超过三成降到一成五左右。Agent 的回应质量明显提升,混淆的情况几乎消失。
维护也变容易。哪个主题的信息过时了,直接去那个文件改,不用在大文件里找。
五个设计原则
踩坑之后沉淀出五个原则,每次调整记忆系统都会对照。
原则一:位置就是索引
不要搞复杂的搜索机制。把文件放在正确的位置,位置本身就告诉 agent 该什么时候读它。
projects/health/context.md 放在 health 项目文件夹里。Agent 在处理 health 相关任务时自然会去那个文件夹找东西。不需要向量数据库,不需要 embedding search。
原则二:每份文件不超过 200 行
超过 200 行就该拆。
200 行大约是 3000-4000 token,对 agent 来说是「读完之后还能好好处理」的范围。超过这个量,建议将内容外部化,另存新的文件。
原则三:一条信息只存一个地方
SSoT(Single Source of Truth)。同一条信息存在两个地方,迟早会不一致,然后 agent 就会搞混。
判断方法:如果某个项目消失了,这条信息在其他场景还会用到吗?不会 → 放项目里。会 → 放个人文件。
原则四:区分「稳定」和「流动」
有些信息很少变(生日、偏好的沟通方式)。有些信息每天在变(今天的待办、这周的 sprint 进度)。
稳定的信息放在 L2 的 profile 和 topics 里,很少动。流动的信息放在一个特殊的文件里,每天更新。把这两种东西混在一起,是记忆系统变混乱的主因。
原则五:定期蒸馏(压缩)
记忆会累积。三个月前的 sprint 记录、半年前的对话心得,不清理,文件就会越来越肥。
每周做一次记忆 review。重要的洞察蒸馏到 MIND.md(agent 的核心认知),过时的记录归档到 archive/。筛选标准很严格:只有影响 agent 行为的「身份级」洞察才会留在核心文件里。

可以直接套用的文件结构
要为自己的 AI agent 建记忆系统,建议的起点:
memory/
├── MEMORY.md # 索引(60 行以内)
├── brain.md # 今天在做什么(每天更新)
├── user/
│ ├── profile.md # 个人基本信息
│ └── preferences.md # 个人偏好
├── topics/
│ ├── topic-a.md # 稳定的主题知识
│ └── topic-b.md
└── archive/ # 过期的东西
每个文件开头写一行注解,说明这个文件是什么、什么时候该读它。Agent 看到这行就知道要不要继续读下去。
让 AI 帮你设计记忆系统:三组可复制的 Prompt
设计记忆系统最难的一步通常是开始动手。技术其实都有公开资料可以查,卡住的是「该怎么把自己的东西分类」。下面三组 prompt 可以直接丢给 Claude 或 ChatGPT,让它帮忙起一个初版架构,再照着实际使用情境调整。
Prompt 1:让 AI 分析现有的文件结构
场景: 手上已经一堆零散的 .md 文件、Google Doc、或 Notion 页面,想整理成 agent 可以用的记忆系统。 适用工具: Claude(推荐,长 context 处理力最好)、ChatGPT 使用方式: 把现有的目录结构或文件清单贴进去,让 AI 帮忙分类。
想把下面这些文件整理成 AI agent 的记忆系统,请你帮忙做三件事:
1. 把文件分成三类:
- L1(每次对话自动加载,例如个人偏好、当前工作)
- L2(按主题加载,例如特定项目、特定知识领域)
- L3(历史存档,平常不加载)
2. 找出明显的问题:
- 有没有重复的信息放在不同文件
- 有没有文件太长需要拆分(超过 200 行)
- 有没有文件内容太杂应该分成多个文件
3. 给出一个推荐的新文件结构,包含:
- 每个文件建议的路径和名称
- 每个文件应该放什么内容
- 哪些旧文件要合并或拆分
文件清单:
[贴上文件清单,可以用 ls -la 或 tree 命令的输出]
使用情境:
[描述主要会用这个 agent 做什么,例如:日常工作助理、写作伙伴、代码 reviewer]
第一次跑这个 prompt 会拿到一个初版建议。不要全盘照收,挑认同的部分先改,跑一周看看实际用起来顺不顺,再来第二轮调整。
Prompt 2:让 AI 帮你规划记忆分层
场景: 还没有现成文件,想从零开始设计记忆分层。 适用工具: Claude、ChatGPT、Gemini
要为 AI agent 设计一套记忆系统,请你根据以下情境,给出一个三层的记忆架构。
情境:
身份:[例如:自由工作者、学生、产品经理]
主要任务:[例如:写作、项目管理、研究资料整理]
每天会跟 agent 讨论的事:[列三到五项]
偏好的互动方式:[例如:中文、直接、不要绕圈]
Context window 限制:[例如:Claude Opus/ChatGPT 1M]
请设计:
L0(索引层,每次都读)
一份 MEMORY.md 的内容,列出所有文件的路径和用途。
L1(工作记忆,每个 session 加载)
推荐 2 到 3 个文件,各自负责什么、预估几行。
L2(主题记忆,按需加载)
推荐 4 到 8 个主题文件,各自放什么内容、什么时候会被触发加载。
请给出每个文件的:
1. 文件路径和名称
2. 预估行数
3. 应该包含的内容(条列)
4. 更新频率(每次、每天、每周、每月)
最后算一下:总共占 context window 大概多少 token,确认有没有超过 20%。
算 token 这一步很重要。第一次设计时没算,做完发现 L0+L1 就吃掉 25% 的 context,后来只好砍掉两个文件。请 AI 帮忙算一遍可以省掉这个坑。
Prompt 3:让 AI 帮你写 brain.md 模板
场景: 决定开始用 brain.md 记工作记忆,但不知道该放什么、怎么排。 适用工具: Claude、ChatGPT
请设计一份 brain.md 模板,这份 AI agent 每次对话会自动读的「当下工作记忆」文件。
工作模式:
同时进行的项目数:[例如:3 个]
每天会换项目切换几次:[例如:4 到 6 次]
常卡住的原因:[例如:等别人回复、信息不足、技术难题]
希望 agent 看完这份 brain.md 之后能做什么:[例如:掌握今天在忙什么、提醒等哪些回复、知道有没有卡住]
请写一份模板,包含:
1. 文件头注释:一句话说明这份文件是什么、更新规则
2. 「今天的焦点」区块:今天最重要的一到两件事
3. 「进行中」区块:每个项目用什么结构记进度
4. 「等回复」区块:谁、等什么、等多久
5. 「卡住的地方」区块:问题、目前尝试过的、打算下一步怎么办
6. 「今天的小事」区块:15 分钟内可以收掉的琐事
7. 底部:更新时间戳记
请控制在 80 行以内,每个区块用实际示例填好(标记为示例,之后会改掉)。
风格:口语、简短,不要正式报告的语气。
模板拿到之后,第一周会觉得很多栏位用不到,第二周开始会发现有些东西想记但没有栏位。这是正常的,模板本来就该跟着使用节奏演化。
RAG 和向量数据库:另一种记忆管理方式
文件系统不是唯一做法。记忆量很大(几百份文档、几千页的知识库)时,用 RAG(Retrieval-Augmented Generation)搭配向量数据库会更合适。
RAG 的运作方式:把文档切成小段、用 embedding 模型转成向量、存进向量数据库(像 Pinecone、Weaviate、Chroma)。Agent 需要回答问题时,先用语义搜索找出相关的段落,再把这些段落喂进 prompt 让模型生成回复。
Dify 的 RAG 功能是开箱即用的:上传 PDF 或 Word,它自动做切段、embedding、建索引。对客服机器人或知识库问答这类场景很方便。
实战上选文件系统的常见场景:记忆量只有几十个 .md 文件,用向量搜索反而多此一举。RAG 的优势在有上百份文档要管时体现出来,比手动维护文件结构有效率。
不同工具的记忆管理比较
| 工具 | 记忆方式 | 自由度 | 适合场景 |
|---|---|---|---|
| Claude Code | 文件系统(.md/.json) | 最高,完全自订 | 个人工作流、需要精细控制 |
| Dify | 内建向量 DB + RAG | 中,平台提供框架 | 知识库问答、客服机器人 |
| Coze | 平台内建 | 低,无法自订底层 | 轻量使用、不需复杂记忆 |
| 自建 | 完全自订 | 最高 | 有特殊记忆需求的商业产品 |
选记忆方案的关键问题是:记忆量有多大、需不需要语义搜索、愿不愿意花时间维护架构。量小、结构清楚就用文件系统;量大、需要搜索就用向量数据库。
踩坑补充
工作速记版 brain.md 膨胀
brain.md 应该是工作记忆,轻薄短小。曾有一段时间忘了清理,它长到 300-500 行。里面有两周前的待办、一个月前的进度更新、早就结案的 bug 记录。
Agent 加载这份 brain.md 之后,把一个月前的 bug 当成今天的任务去修,修了半小时才被发现。
可靠的规则:brain.md 每天清理,超过三天的项目如果还在,要嘛更新状态,要嘛移到 journal。这边如果你有搭配 OpenClaw(龙虾),可以使用 cron job 进行 daily optimization 来辅助。
记忆冲突
曾经在 profile.md 里写「偏好用繁体中文」,但在某个项目的 context.md 里写「这个项目用英文」。Agent 碰到需要用中文还英文的判断时,两份文件都读到了,结果写出一段中英夹杂的东西。
解法是在 context.md 里明确写「本项目语言:英文(覆盖全域偏好)」,让 agent 知道有冲突时该听谁的。
FAQ
AI Agent 的记忆存在哪里?
大部分 agent 框架用文本文件存在本机或云端。每次对话开始时,把相关的记忆文件内容喂进 prompt。实战常用的是 .md 文件系统放在本机。
记忆文件多大会出问题?
取决于模型的 context window 大小。以 Claude Opus 为例,原生 context window 是 1M token。经验法则是超过 1000 行就该拆,总加载量控制在 context window 的 20% 以内。
怎么让 agent 知道该读哪些记忆?
用一个索引文件列出所有记忆文件的位置和用途。Agent 每次启动先读索引,根据当前任务判断要不要读某个主题文件。靠的是索引文件的清楚描述,不是花俏的算法。
什么是 RAG?AI Agent 如何用它?
RAG 是检索增强生成。把文档切段、转向量、存进数据库,agent 回答问题时先搜相关段落,再根据搜到的内容生成回复。Dify 内建这功能,Claude Code 可以搭配外部向量 DB。
AI Agent 如何记住对话?
模型本身不会记。靠的是每次对话开始前,把之前的摘要或记忆文件加载 prompt。实战做法是蒸馏重要信息成短文档,存在固定位置,agent 启动时自动读取。
记忆系统会拖慢回应速度吗?
会。加载越多记忆,prompt 越长,处理越慢。基础加载控制在 context window 的 15-20%,回应速度不会有明显感觉。超过 30% 就会变慢。
用向量数据库还是文件系统管记忆?
看场景。记忆量大、需要语义搜索就用向量数据库。记忆量在几十个文件以内、结构清楚,文件系统更简单可控。
延伸阅读
- AI Agent 教程|从观念到实践的完整指南:这个系列的总览
- 什么是 AI Agent?跟 ChatGPT 到底差在哪:Agent 的观念入门
- 你的 AI 助理每次都在失忆:记忆机制原理
- AI 助理的记忆该怎么设计:认知科学视角
- 当 4 个 AI Agent 辩论如何管理自己的记忆
- AI Agent 系统维护指南
- OpenClaw 完整教程
小企鹅的经验
主力 stack 是 OpenClaw 上的 Opus / Sonnet / Codex 三 agent,记忆全部走文件系统(.md),不接向量数据库。实战下来最痛的就是记忆这块:要处理好记忆又不让 agent 失忆非常困难,诀窍就是上面写的那五条原则 , 越干净越能记得住。记忆量不大、需要随时手动编辑,是选文件系统而不是 RAG 的两个主因。
整理:Penna|小企鹅 Penchan