[译] Claude Diary:让 Claude Code 从经验中学习并更新记忆
本文翻译自 Lance Martin 的博客文章 Claude Diary,介绍了一种让 Claude Code 从经验中学习的方法。
人类通过经验来提升技能、形成偏好。但很多 AI 智能体缺乏这种持续学习的能力。我创建了一个叫 Claude Diary 的插件,让 Claude Code 能够从经验中学习并更新自己的记忆。代码开源在 GitHub。
智能体记忆
Sumers 等人(2023)的 CoALA 论文提出了一个智能体记忆框架,包括「程序性记忆」(如提示词指令)和「情景记忆」(如过去的行为)。
Claude Code 将系统指令存储在 CLAUDE.md 文件中,会话日志保存在 ~/.claude/projects/。但问题是:如何将日志中的过去行为转化为持久的通用规则,并添加到指令中?
Park 等人(2023)的 Generative Agents 论文展示了一种方法。他们的智能体使用反思步骤,将过去的行为综合成通用规则,用于指导未来的规划和决策。
最近,Zhang 等人(2025)使用了类似的「生长与精炼」方法来更新智能体指令:生成器产生推理轨迹,反思器从成功和失败中提取经验,整合器将洞察整合为结构化更新。
在最近的一次访谈中,Cat Wu(Claude Code 产品负责人)提到一些 Anthropic 员工使用类似的模式:从 Claude Code 会话中创建日记条目,然后通过反思来识别模式。
实现 Claude Diary
我在 Claude Code 中使用了这种基于反思的方法:让 Claude 从会话中提炼日记条目,然后对收集的条目进行反思,更新 CLAUDE.md。
用什么来创建日记条目?
最初我让 Claude Code 解析 JSONL 会话日志,但这需要几十次 bash 工具调用。后来我决定直接使用当前 Claude Code 会话中已加载的上下文来生成日记条目。
日记条目要记录什么?
我创建了一个 /diary 斜杠命令,提示 Claude Code 捕获关键会话细节:完成了什么、设计决策、遇到的挑战、用户偏好、PR 反馈等。日记条目保存到:
~/.claude/memory/diary/YYYY-MM-DD-session-N.md
什么时候创建日记条目?
我使用混合方式:手动调用 /diary 和/或通过 PreCompact hook 自动调用。这样我可以选择何时创建日记,同时对于使用压缩的较长会话会自动生成条目。
反思要捕获什么?
/reflect 命令指示 Claude Code 分析日记条目并生成 CLAUDE.md 更新。它会读取 CLAUDE.md 文件,检查日记条目中的规则违反情况,强化弱规则,并跨日记条目识别重复出现的模式。
由于 CLAUDE.md 会加载到每个会话中,反思提出的更新被格式化为单行要点。反思过程会保存分析结果并自动用综合规则更新 CLAUDE.md。反思保存到:
~/.claude/memory/reflections/YYYY-MM-reflection-N.md
如何跟踪已处理的条目?
一个 processed.log 文件防止重复分析日记条目。反思命令会先检查这个日志。日志保存到:
~/.claude/memory/reflections/processed.log
什么时候进行反思?
我保持反思为手动操作,因为它会直接更新 CLAUDE.md。我希望在写入 CLAUDE.md 之前先审查提议的更新。
更新哪些记忆文件?
我只让 Claude Code 更新用户级文件 ~/.claude/CLAUDE.md,因为日记中捕获的很多模式(提交风格、测试、代码质量)是通用的。
实际案例
我使用 Claude Diary 已经一个月了。在想要记录的会话中运行 diary 命令,然后定期运行 reflect 来更新 CLAUDE.md。以下是一些有帮助的场景:
PR 审查反馈:PR 评论(可以通过 Claude Code 的 pr-comments 命令加载)是更新 Claude Code 记忆的绝佳反馈来源。
Git 工作流:系统擅长捕获 Git 工作流中的偏好——从原子提交、分支命名约定到提交信息格式。
测试实践:反思识别出了一些模式,比如先运行针对性测试获得快速反馈,再运行完整测试套件,以及使用专门的测试库。
代码质量:系统学会了避免反模式,如文件和包目录之间的命名冲突、重构后留下过时目录、不必要的冗长代码。
智能体设计:对于 AI 智能体工作,反思捕获了关于 token 效率的偏好,倾向于单智能体委托而非过早并行化,以及使用文件系统进行上下文卸载。
自我纠正:有时 CLAUDE.md 中的规则需要强化;系统很擅长发现 Claude 没有遵循指令的情况并加以强化。
总结
Claude Diary 只是一个简单的尝试,将原始的 Claude 会话转化为 CLAUDE.md 中的记忆更新。命令本身就是提示词,很容易修改。我也限制了自动化程度,但使用 hooks 可以轻松进一步自动化任何命令。如 GitHub 所述,还有很大的改进空间。代码作为 Claude Code 插件开源在 这里。
评论