AI 编码 agent 的项目记忆:3 个月 542 条教训,5000+ 次召回之后
六月的观点:AI 编码 agent 需要项目记忆,而不只是更大的 prompt。理由是简单的——agent 犯了一个项目特定的错误,你纠正它,下个会话它又犯同样的错误,因为你的纠正活在一个没人重读的聊天里。于是作者建了一个小的教训图:每条约一句话,绑定它们适用的文件与命令,随仓库提交,在 agent 即将用到的那一刻展示给它。
三个月后,自己仓库里的图长到 542 条教训——大部分是 agent 在写代码时自己写的;被召回 5000+ 次。这是后续报告:记忆学会了什么、运行成本多少、值不值得开。
一条教训长什么样
真实条目(agent 弄坏一次 Windows 构建后捕获的):
Never split('/') a filesystem path; use basename(). On Windows, path.join
produces backslashes, so split('/').pop() returns the whole path.
trigger: src/**/path*.ts
整个格式就这些:一句祈使句、一个主题、一个触发器(文件 glob、命令模式或关键词)。agent 即将编辑匹配的文件时,规则出现在它的上下文里——不在系统 prompt、不在会话开始,就在编辑前一刻,那时它还能改变结果。
捕获只要一行:
agentsmesh lessons add "Never split('/') a filesystem path; use basename()." \
--topic windows-paths --trigger-file 'src/**/path*.ts'
在 Claude Code 里,召回是 PreToolUse hook;没有 hook 的工具里,agent 在任务开始时查询。两边读的是同一份文件,所以在一个工具里学到的教训保护所有其他工具。无 embeddings、无向量库、无网络调用。
三个月里改进了什么
- 最具体的规则优先:问图"哪个适用于这个文件"时,命中按特异性排序,而不是按添加时间;
- 从措辞理解任务:不止匹配关键词,能从任务表述推断意图;
- 一次性、在动作之前说话:教训只展示一次且放在动作前,不刷屏;
- 能说清哪些记忆在真正赚位置:可审计哪些教训被反复命中、哪些从未命中。
成本:每次召回约十个 token。开源、MIT、一条命令即可搭起。
实践建议
- 教训格式用"一句祈使句 + 主题 + 触发器(glob/命令/关键词)",一句话能改变行为,别写论文;
- 让 agent 自己在工作中沉淀教训(犯错 → 记录 → 下次触发),比人工维护扩展性好得多;
- 触发粒度是关键:绑定到具体文件 glob 的规则才会在"正确时刻"出现,绑得太宽就是噪音。
来源:AI Coding Agents With Project Memory: 3 Months and 500 Lessons Later - DEV Community