最近大家都在讨论一个很有意思的概念:“灾难性记忆”。我看这篇探讨 CLAUDE.md 之类智能体指令文件为何持续膨胀的论文时,心里其实咯噔了一下——这不就是我天天在干的事吗。
如果你和我一样,长期在用 Claude Code、Cursor、Copilot 这类 AI 编程助手,那你对项目里的 CLAUDE.md、AGENTS.md 或者 .cursorrules 这类文件一定不陌生。它们本质上是我们塞给 AI 的“工作手册”,告诉它这个项目是干嘛的、代码风格是什么、哪些坑绝对不能踩、命令该怎么跑。
问题是,这份手册越来越厚了。最初我建 CLAUDE.md 时,里面可能就十来行:项目简介、技术栈、启动命令。三个月后它变成了几百行,记录了数不清的“历史教训”,比如“不要动 payment-service 目录下的文件”“测试必须在 Docker 里跑,本地跑会报错”“所有 API 响应必须用{ code, message, data }包装”。
这就是论文里说的“灾难性记忆”:我们正在让这些指令文件变成一个越滚越大的雪球。乍看是好事,记忆多了 AI 会更懂项目。但实际用下来你会发现,文件越大,AI 的表现反而越不稳定,上下文窗口被占满,关键指令被淹没,它有时候会为了一些边角料的旧规则,忽略了当前最该做的事。
这篇文章我想认真拆一下这个“灾难性记忆”现象,并结合我自己的真实踩坑经历,聊聊指令文件为什么必然膨胀、过度膨胀会带来什么代价,以及我现在用什么方法控制它。内容不会太学术,更多是实操层面的思考和方法,给同样被 CLAUDE.md 变重这件事困扰的人一个参考。
1. 内容整体设计与思路拆解
1.1 从“工具记忆”到“灾难性记忆”:智能体指令文件的核心矛盾
先回到基础概念。CLAUDE.md 这类文件,在 AI 编程工具里承担的功能,用大白话说就是“持久化记忆”。模型本身是没有记忆的,每次对话开始它都是“失忆”状态,不知道你的项目背景、不知道你昨天定的架构调整、不知道你踩过的那些天坑。指令文件就是把这些该记的都写下来,每次启动新会话时交给模型重新读一遍,让它快速进入状态。
这个思路本身没毛病,相当于给失忆的助理准备了一份详细的项目交接文档。但问题出在一个根本矛盾上:模型能同时“注意”的东西是有限的,而项目的记忆需求是无限增长的。
你每在 CLAUDE.md 里加一条规则,模型调用时的注意力就会被多分走一点。最初的文件短小精悍,每条指令都是高权重信号,模型能精准执行。但等文件膨胀到一定规模,大量规则互相竞争注意力资源,就会出现一种类似人类记忆衰退的现象:不是信息不存在了,而是该被想起的时候想不起来了。
论文里用“灾难性记忆”这个词,我觉得别有一层含义。传统机器学习里的“灾难性遗忘”指的是学习新知识后旧知识被覆盖,而这里的“灾难性记忆”更像是记忆本身过载,导致检索失效。就好比你房间里堆满了工具,种类齐全,但真到要用锤子的时候,你在堆积如山的杂物里翻了半天,最后还是没找到。
1.2 为什么这不是简单的“文件管理”问题
你可能觉得,CLAUDE.md 大了就精简一下呗,有什么难的。但真正操作过的朋友应该知道,这事远没有听起来那么简单。因为每一行内容背后,几乎都对应着一次真实的踩坑经历。
我自己就做过一次大清理,把一个五百多行的 CLAUDE.md 砍到两百行左右。结果不到一个星期,就翻车了两次。一次是 AI 重新开始用 Python 2 的语法跑旧脚本(因为我把“本项目必须使用 Python 3”这条给删了),一次是它又去改了>