@mvanhorn: https://x.com/mvanhorn/status/2070966613994795489
摘要
作者认为,AI代理的内存膨胀会降低性能,并建议将memory和CLAUDE.md文件控制在200行以内,使用按需检索而非将所有内容加载到上下文中。
查看缓存全文
缓存时间: 2026/06/27 21:59
你的AI记忆正在悄然让它变笨(我把它砍到了6个文件)
上周我做了个演讲,直接说出来了:删掉那段记忆,智能体。当你的智能体吸取教训时,别把它塞进某个私人记忆文件里。应该发一个拉取请求来改进技能,这样修复对你和所有使用那个技能的人都有好处。事后有人私信我说,这个想法里可能埋着一篇爆款内容。所以就有了这篇。
我的智能体记忆悄然膨胀到了218个文件。一个46KB的索引,大到连框架都开始每轮会话默默丢掉后半部分。我砍到了6个文件,把它们移进我的CLAUDE.md,然后把自动记忆关掉了。接着我审计了它们落入的那个CLAUDE.md。这就是整个体系,因为你的智能体记忆和你的CLAUDE.md是同一个问题戴着两顶帽子:每轮会话都会加载的固定指令,一旦你不盯着就会腐烂。
在我清理这一切之前,我用last30days跑了一遍整个主题,在Reddit、X、YouTube、TikTok和Hacker News上做了十次扫描。研究告诉我的第一件事是,我即将跟整个互联网争论。
高喊的建议是“构建一个记忆系统”。我走了相反的路。
现在打开任何信息流,关于记忆的推销到处都是:
90%用AI编程的人每天因为一个没人谈论的问题浪费几个小时。智能体没有记忆。每轮会话从零开始。它忘记你的代码库、你的决策、你的上下文。那些交付最快的人用0美元解决了这个问题。
- @Nyra_nx, X, 11个赞
围绕这个正在形成一个完整的手工作坊产业。“Show HN: Recall,Claude Code的本地项目记忆”同一周在Hacker News上获得了136个点和86条评论。这种直觉可以理解:智能体会忘,那就给它装个更大的脑子。
这里我想精确一点,因为背后的直觉是对的。一个每天早晨冷启动的无状态智能体是个真实的问题。错不在想要记忆,错在通过往每轮会话加载更多内容来回应,而不是让智能体按需查询一个存储。先记住这个区别,我后面会回来讲。对于本文开头讨论的总是加载层,更多不是解决办法,有个创作者说得比我好:
对记忆的硬限制迫使AI智能体提炼出真正重要的东西。强制稀缺性才是创造专注、有用的长期记忆的机制,而不是臃肿、无用的上下文。
- aidecipher on TikTok,8个赞
这就是整套哲学。没有预算的记忆不是大脑,是垃圾填埋场。
为什么肥大的记忆会让你的智能体更笨
这不是感觉,是机械原理。你的CLAUDE.md和你的记忆在每轮会话开始时被注入上下文窗口,而一个正在被填满的上下文窗口性能更差。我找到的最火的解释片给这个规则加了一个真实数字:
Claude Code的默认行为是,当你开始一个会话时,它会注入完整的claude.md,这就是为什么我们希望把claude.md理想情况下控制在200行以内。
- Simon Scrapes on YouTube,870个赞
一个472个赞的TikTok用更直白的语言说出了后果:你让Claude的上下文堵塞得越久,它就变得越笨。我的记忆索引是46KB。它远远超过了限制,以至于框架只加载了一部分,丢弃了剩下的,这意味着这个文件已经不再引导任何东西,变成了一个碰巧消耗token的工作日志。臃肿不是理论上的。它的一半已经加载不进去了。
诀窍
你的记忆和CLAUDE.md每轮会话都会注入。超过某个点,更多的文本意味着更差的遵循,而不是更多的知识。把每个文件控制在200行以内。
审计:不是90%的垃圾,而是90%放错了地方
我让三位读者逐行检查了全部218个文件,并对每个文件进行分类。结果让我意外:
-
大约14%是真正的垃圾:已发布的PR记录、已完成视频的记录、已经编码进工具里的教训。Git历史里全都有了。
-
大约39%是持久的、有用的教训,但每个都绑定在恰好一个技能上。针对特定工具的修复,却躺在一个该工具从不读取的全局记忆里。
-
剩下的才是真正的跨领域指导,外加一堆正在进行中的项目追踪器,这些项目一旦交付就会腐烂。
中间那个桶才是关键点。问题从来不是“删掉多少百分比”,而是“每个教训应该住在哪里”。关于一个技能的教训属于那个技能内部,作为一个PR,这样它能改变所有人的行为,并且像它所在的代码一样被版本控制。放在记忆里,它就是私有的隐性知识,悄然过时。这就是技能优先于记忆这一理念的一句话总结:别再记录教训,开始把它们发进技能里。
诀窍
对每条记忆条目分类:垃圾(git已有)、技能绑定(PR进技能)、或真正的跨领域(保留)。大多数“记忆”是放错位置的技能PR。
教训真正该去的地方:编写你自己的技能
所以如果技能绑定的教训不属于记忆,那它该去哪?进技能。这就是技能优先于记忆中比删除更重要的一半,也是我拥有的最高杠杆的习惯。我把整个工作流写成了一篇文章,获得了超过100万阅读量,人们从中拿走最多的诀窍就是这个:编写你自己的技能。
规则很简单。任何我做超过两次的事情都变成一个技能,一个我的智能体可以永远运行的、可复用的命令。智能体辛苦学来的教训不会被记录进记忆里腐烂,而是被写进技能里,作为一个PR,这样下一次运行时它已经知道,所有使用那个技能的人也都知道。这和把记忆条目发进它所属的工具是同一个动作,只是让它永久化了。
你不是从零开始写。帮我解锁这个窍门的方法是,让智能体看一个已经能用的技能,然后模仿它的结构。字面意思:“看看Compound Engineering这个技能,帮我也做一个类似的,用来做我要自动化的事情。”它读了一个好例子,学会了结构,然后为你搭建脚手架。我用这种方式构建了一堆技能,现在我的大部分开源工作都是技能和它们周围的工具。last30days和Printing Press最初都是我为自己想要而做的技能。
这就是复利的部分。技能写一次,之后的每轮会话都更快,而且教训住在一个有版本控制的地方,而不是某个悄然过时的地方。删除记忆之所以有效,只因为教训有了更好的归宿。
诀窍
任何你做超过两次的事,就把它做成技能。不要从零开始写:让智能体看一个已经能用的技能,然后说“为X做一个类似的”。教训属于技能里的PR,而不是记忆。
先无所畏惧地备份,再削到骨头
激进去删除的唯一方法,是先让删除可逆。我把整个记忆存储复制到了一个归档目录和一个tar包,222个文件,放在自动加载的记忆文件夹之外,这样它永远不会被加载或回忆,但随时可以恢复。一旦删除没有代价,真正的练习就变得简单了:挑出那少数几个真正能跨多个技能引导行为、定义我是谁、或是从真实伤害中留下的伤疤的文件。任何没通过这个门槛的,都假定为垃圾。
我最终留下了6个幸存者。每个文件通过的门槛:
-
我硬着头皮学到的安全护栏:绝不在工作中退出一个正在运行的环境。有一次为了读一个token退出了Chrome,结果核爆了12,552个cookie,让我工作中途登出了所有东西。在这次清理过程中,我把它扩展到了cmux(我实际上写代码的地方):警告我,得到确认,只有别无他法才退出。这条没有技能可以归属,我也绝不想重新发现它。
-
支配智能体所有写作的规则:一个格式规则(不许用em破折号、en破折号、粗体)和一个严格的保密边界,关于哪些东西绝不能出现在公开内容里。
-
我经常触碰的稳定事实:我每天碰的几个仓库的标准路径。
就这些。六个文件。其他所有212个文件都被归档了。我的记忆索引从46KB降到了大约1.4KB。几个月来第一次,整个文件真的全部加载了。
诀窍
先把整个存储归档(放在加载目录之外),这样删除就无所畏惧。然后只保留那些跨技能引导的、定义你的、或是伤疤的东西。归档,不要囤积。
自动记忆陷阱,以及通向CLAUDE.md的桥梁
这里有个几乎搞垮整个计划的陷阱。我想关掉自动记忆,这样存储就不会悄然重新长成另一个200文件的沼泽。我并非唯一想要这样做的人:
我也通过设置环境变量 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 来禁用Claude的自动记忆。太容易过时并且误导智能体了。
- @trevin, X
但是自动记忆是一个同时控制读取和写入记忆文件夹的单一开关。关掉它,你那6个精心筛选的幸存者也不会再加载了。解决方法就是本文两半之间的桥梁:把幸存者从记忆里移出来,放进CLAUDE.md,这个文件总是加载、从不自动修剪、也从不因为后台写入而腐烂。然后完全禁用自动记忆。那少数几个真正的引导事实住在始终在线的指令里,而那个曾经长成沼泽的有损耗功能永远关闭了。(如果你只想找到这个开关:在终端打开Claude Code,运行 /memory,然后关闭Auto-memory。应用内设置做不到这个。)
所以那六个事实现在是我 ~/.claude/CLAUDE.md 顶部的一个小段落。这引出了下一个明显的问题:这个文件本身好吗?
审计幸存者移入的文件
我本以为我的CLAUDE.md也是一团糟。结果正好相反。整个始终在线的表面设计得很短,而审计变成了一次质量检查,而不是修剪。以下是基于同一研究和Anthropic官方文档的实际有效内容。
保持全局文件简短,因为你每轮会话都要为每一行付出代价。Anthropic的记忆文档建议把每个CLAUDE.md控制在200行以内,因为“更长的文件消耗更多上下文并降低遵循度”。我的全局文件是19行。30天研究中最大胆的观点也说了相同的话,关于失败模式:
你的CLAUDE.md可能更多是在伤害你的Claude Code,而不是帮助它。你给Claude的指令越多,它就越忽略它们。Claude的系统提示已经自带大约50条内置指令。你每加一行,就进一步把它推过极限。
- @Vishaldej, X
诀窍
把 ~/.claude/CLAUDE.md 控制在200行以内。我的只有19行。它只包含在每个仓库中都成立的内容。
也不要像扔垃圾桶一样使用CLAUDE.md
我在记忆里犯的精确错误,正是人们在CLAUDE.md里犯的错。关于这点最尖锐的说法:
别再像扔垃圾桶一样使用CLAUDE.md。错误:人们什么都往里面扔。技术栈。通用编码规则。显而易见的惯例。巨大的工作流文档。模型可以从仓库中推断出来的东西。
- @s1rozha_, X, 18个赞
当我用这个列表回顾我旧的项目文件时,里面一半都是智能体可以从 package.json 读到的框架名、“写干净的代码”这类废话、任何模型在几秒内就能推断出来的惯例。没有一条能改变决策。所有内容都稀释了那些真正起作用的行。删除清单总是比保留清单长。
诀窍
删除任何模型可以从仓库中推断出的内容:技术栈、显而易见的惯例、通用规则。如果一行不改变决策,它就是垃圾。
每个智能体一个指令文件:导入AGENTS.md
我无意中做对了的模式,现在我刻意为之:我的68个项目CLAUDE.md文件中,有48个只包含一行:
@AGENTS.md
我大部分构建都是通过Codex运行的,不只是Claude Code。Codex读取AGENTS.md。Claude Code读取CLAUDE.md。我拒绝维护两个到星期二就会漂移的文件,所以真正的惯例只存在于AGENTS.md中一次,CLAUDE.md直接导入它。
Claude读取CLAUDE.md。Codex读取AGENTS.md,这是Cursor和其他工具也读取的跨工具标准。两个终端智能体,两个文件,同一个任务。
- @WenchangYue, X
一个3.2万次观看的解说片指出了搞错这个的代价:每个智能体都有自己的规则格式,所以你的仓库变成了一抽屉指令文件,无法从一个智能体移植到另一个。有一篇文章统计,现在有6万个仓库带有AGENTS.md,被Claude Code、Codex、Cursor、Aider、Devin、Copilot、Gemini CLI、Windsurf和Amazon Q读取。Claude Code本身不读取AGENTS.md,但CLAUDE.md可以用 @ 行导入它,所以 @AGENTS.md 就能拉进整个内容。Anthropic的文档正好推荐这样做。符号链接也能完成同样的事:ln -s AGENTS.md CLAUDE.md。
诀窍
项目CLAUDE.md只有一行:@AGENTS.md。惯例只写一次,每个智能体都能读到。或者用符号链接:ln -s AGENTS.md CLAUDE.md。
每一行幸存的内容都应该是黄金标准
一旦垃圾被清除,判断保留内容的测试就是它是否值得占这个位子:
AGENTS.md中的每一行都应该是黄金标准。句号。
- @cxprakash, X
他的例子是一条消灭了反复失败的单条规则:“在会话结束时关闭你运行的所有服务器”,加了一次就永远解决了端口锁定。这就是那个形状。我的printing-press AGENTS.md没说“小心地修复bug”,它说明了修复应该放哪里,并告诉智能体在开始之前先声明一个issue,这样两个智能体就不会撞车。这些都是智能体否则会搞错的决策,只写一次。这和我挑选6个记忆幸存者用的是同一个标准:这一行会不会改变接下来发生的事?如果不会,就删掉。
诀窍
每一行都要赚到它的位子,否则就砍掉。“在会话结束时关闭服务器”胜过“写干净的代码”。把智能体老是搞错的决策编码下来。
如果你仍然想要回顾,那是一种不同的记忆
现在来说我之前让你记住的那个区别。关闭自动记忆和修剪CLAUDE.md杀死了一种记忆:那种不管你需不需要都被推送到每轮会话上下文中的记忆。这并不意味着你的智能体会失忆。有两种记忆,人们经常混淆它们。推送型记忆是为你加载的——CLAUDE.md和原生自动记忆——在会话开始时注入,其失败模式正是本文的主题。拉取型记忆则相反:它存放在一个存储中,智能体只在需要时才检索所需的那一块,通过提问来实现。有位创作者清晰地划出了界限:
AI智能体有金鱼般的记忆,而明显的修复——给它更大的记忆——悄然让情况更糟。问题从来不是大小。而是上下文窗口本身。塞进太多历史,最老的事实就会从另一边滑出去。
- agenticamit on TikTok,42个赞
解决方案不是随身携带一个更大的大脑,而是一个你可以查询的大脑。这正是那些专用记忆层工具所做的,它们不是删除自动记忆的竞争对手,而是你删除之后回顾记忆的去处。快速概览一下这个领域,所有工具都是按需检索而非强制加载:
-
gbrain,来自Garry Tan,是一个基于markdown和git的知识库,带有向量、关键词和知识图谱检索,以及上层合成层,以CLI和MCP服务器形式暴露。
-
supermemory 是一个记忆API,可以提取事实、调和矛盾、过期失效事实,并连接到Drive、Gmail、Notion和GitHub,以SDK、MCP服务器和本地二进制形式提供。
-
mem0、Letta、Zep和Cognee是这个领域的其余部分,人们常把它们放在一起基准测试,每个都是可自托管的检索层,对事实、文档和图表有各自的处理方式。
每个工具适合的场景取决于具体表面,而这确实是个需要决策的地方,不是默认选择。我在Hermes内运行gbrain,而不在Claude Code或Codex里运行,因为按需回顾在某些工作流中值得占有一席之地,在其他则不然。关键不是选哪个工具。关键是“删除你的记
相似文章
@tricalt: https://x.com/tricalt/status/2057173322924806651
一位创始人讨论了在生产环境中使用Markdown文件作为AI代理记忆的扩展挑战,突出了关于权限、多代理交互和时间查询的常见陷阱,并指出团队常常在不经意间修补这些问题的过程中,实际上是在重新构建一个更复杂的系统。
rohitg00/agentmemory
agentmemory 是一个开源的持久化记忆层,专为 AI 编程智能体(Claude Code、Cursor、Gemini CLI、Codex CLI 等)设计。它通过知识图谱、置信度评分和混合搜索技术,借助 MCP、Hooks 或 REST API,为智能体提供跨会话的长期记忆能力。该项目基于 iii 引擎构建,无需外部数据库,提供 51 个 MCP 工具。
如何管理代理记忆而不让其变成杂物抽屉?
关于管理AI系统中代理记忆的实际挑战的讨论,侧重于避免信息过载导致输出质量下降,并提出使用工作流状态和多代理架构等策略。
智能体AI记忆不是囤积问题,而是剪枝问题。
作者认为,AI代理的记忆应侧重于数据剪枝而非囤积,借鉴人类记忆类型(感觉记忆、短期记忆、长期记忆),并指出模仿人类记忆可以在减少令牌用量的同时维持高质量上下文。
智能体的记忆尚未成熟
对当前AI智能体记忆解决方案的批评,认为RAG包装器及类似方法未能解决模型偏见和上下文膨胀的核心问题。