自己已经很少手写代码了——基本都在让 Claude Code 干活,然后 review 一下完事。**但说实话,AI 编程用得好不好,跟模型本身智商关系很大,跟它"记不记得住事"关系更大。**今天从普林斯顿的 CoALA 框架讲起,把 AI Agent 的记忆拆成 4 种类型,再用 Claude Code 实盘演示——这 4 种记忆到底长什么样、存在硬盘哪里。看完你会重新认识你每天用的那个 AI 编程工具。
⚡ 概览
🔑AI Agent 的记忆分 4 种:工作记忆(Working)、语义记忆(Semantic)、程序记忆(Procedural)、情景记忆(Episodic)。这是普林斯顿 CoALA 框架的核心。 📂Claude Code 把它全部映射成硬盘上的文件,而不是向量数据库——这就是重点,每一种记忆你都能在文件系统里找到对应物。 🎯不是所有 Agent 都需要 4 种记忆:温控器只需要 1 种,编程 Agent 才需要全套。 🧹真正的难点在"遗忘":情景记忆的自动整理(Anthropic 叫它"Dreams"),是目前最前沿的工程难题。 🛠️最实用的技巧:用 /tmp/xxx.md做"用完即丢"的情景记忆,是程序员日常摸鱼神器。
一、先说人话:Agent 和 Chatbot 的根本区别
先问一句扎心的:你觉得 ChatGPT 和 Claude Code 是同一个东西吗?
表面看都是对话,背后其实有本质区别。Chatbot 是"你问它答",Agent 是"它带着你项目的上下文,去执行一连串动作"。让 Agent 真正"Agent"起来的,不是模型变聪明了,而是它记得住你。
我自己天天踩两个坑:
🕳️坑一:我跟它解释一个项目的奇葩 bug,一起改好了,下个会话它又犯一遍——昨天的事全忘了。 🕳️坑二:我为了保险把所有东西塞进一个大文件里,结果它被噪音淹没,真正重要的反而找不到。
这两个坑,本质都是记忆问题。
而且搞明白之后你会发现——"记忆"这事儿,不是一个东西,是 4 种。
二、4 种记忆在人类身上长啥样?
这套框架的源头是普林斯顿的 CoALA(Cognitive Architectures for Language Agents),一开始就是照着人类记忆拆的。我们也照着人来拆:
🧠短期记忆 / 工作记忆:你现在脑子里正在想的那句话。你正在读的这一行。容量小,转瞬即逝。 📚语义记忆:事实性知识。"Python 是解释型语言"——你不需要查资料,直接就知道。 🚴程序记忆:骑自行车、开车这种技能。你不用每次重新推导怎么起步换挡。 🎬情景记忆:个人经历。比如"我当初花了仨小时 debug Kubernetes,最后发现一直指错集群"。
Agent 想要真正好用,也需要同样的 4 类记忆。这套对照不是花架子——人类能轻松遗忘、能在睡觉时整合记忆,这两件事 Agent 暂时都做不到,而 Anthropic 最新搞的"Dreams"功能,就是在尝试补这个洞。
三、4 种记忆的硬核定义
🔹 1. 工作记忆(Working Memory)
Agent 当前这一轮决策里能用到的"草稿纸"。
CoALA 论文给的定义很学术:"在当前决策周期里,作为符号变量维护着活跃且易于访问的信息。"
翻译成人话:就是当下模型"眼睛能看到"的所有东西——正在进行的对话、System Prompt、工具的输出、临时加载进来的文件。
一个绝佳的类比——这就是 RAM。
⚡ 速度快,访问即时 💨 但极其易失,会话结束就没了 📏 还被上下文窗口卡死
⚠️ 上下文窗口现在虽然能塞百万 Token 了,但"大"≠"无限"。塞太满,质量会肉眼可见地下滑,模型开始抓不住埋在中间的关键信息。
关键洞察:工作记忆是其它 3 种记忆的必经之路——其它记忆都存在硬盘上,用的时候被加载进工作记忆。
重点:工作记忆 Agent 都有,Chatbot 也有(也就是个上下文窗口)。所以光有工作记忆算不上 Agent,得看后面还加了啥。
🔹 2. 语义记忆(Semantic Memory)
Agent 对世界和自身的"稳定认知"。
CoALA 的定义:"存储 Agent 关于世界和它自身的知识。"
这些是通用的、跨任务的事实、规则、约定和参考资料,和具体哪一次对话无关。
学术界一般会扯到向量数据库、知识图谱,RAG 也算。但工业界实诚得多——就是 Markdown 文件。
项目架构 编码规范 构建命令 用哪个框架 同样重要的是"不要做什么"
这些事每个会话开始就加载进工作记忆。没了它,Agent 就得每会话从零重新认识你的项目。
🔹 3. 程序记忆(Procedural Memory)
Agent知道怎么干活的记忆。不是事实,是步骤。
CoALA 的拆解更细,把程序记忆一分为二:
隐式的:存在模型权重里。基本上动不了,除非你花大价钱做 fine-tuning。 显式的:Agent 自己代码里写着的,以及你给它写的 Workflow。
真正归你管的,是显式的那部分——Skills、工作流编排,全是它。
⚠️这里有个硬核警告:CoALA 论文原话说了,写程序记忆是最危险的学习——因为一条新事实无害,但一个新步骤会改变 Agent 的行为方式。
论文警告它可能引入 bug,甚至让 Agent 绕开你的设计意图。所以程序记忆,永远人手编写、人手 review,绝不让 Agent 自己去改自己的剧本。
🔹 4. 情景记忆(Episodic Memory)
Agent 过去经历过的"具体事件记录"。
CoALA 定义:"存储早期决策周期的经验。"
具体例子:训练时的输入输出对、事件流、上一局游戏的轨迹……一句话,这是 Agent 自己活过的那些事,需要的时候能调出来指导后续行为。
和语义记忆的区别:语义记忆是通用事实,情景记忆绑定到具体事件。
朴素的实现就是把每次对话的 transcript 全存下来,事后 grep 找。技术上算,但基本上等于没用——谁愿意从 45 分钟的 debug 日志里捞那一句关键的呢?
真正有用的情景记忆是蒸馏过的:
"上次咱们调试 auth 模块,bug 出在中间件那一层。"
这就是压缩后的经验。记忆开始看起来像"真正的学习",就靠这一步。
🤔情景记忆最难的不是"存",是"忘"。
啥该删?啥时候一条笔记算过期?人类遗忘起来毫不费力,还挺有用,但对 Agent 来说遗忘就是个工程难题,目前没人真的解了。CoALA 原话:"修改和删除(即'反学习')在近期的语言 Agent 中研究严重不足。"
这句话记住——Claude Code 最新搞的功能,基本都是在补这个洞。
四、Claude Code 实盘:4 种记忆在硬盘上长啥样?
光理论不接地气没用,下面把这套框架映射到每天在用的 Claude Code 上。挑它讲的原因是:Claude Code 的每种记忆,都是你能在硬盘上指出来的一个文件、一个目录、一条命令。
📌 工作记忆
就是你眼睁睁看着它涨起来的那个上下文窗口。
/context:看看当前被啥塞满了/clear:一键清空/compact:上下文快满了,自动/手动压缩历史,腾点空间
官方文档说得很直白——上下文窗口里放着:对话历史、文件内容、命令输出、CLAUDE.md、自动记忆、加载的 Skills、系统指令。
📌 语义记忆
就是 CLAUDE.md 这套层级:
用户级 ~/.claude/CLAUDE.md:你个人的默认值项目级 ./CLAUDE.md:随仓库走,给整个团队用
两个都会在每个会话开始被加载。
需要瘦身时,用@import(即@README.md、@docs/git-instructions.md)按需引用,别把所有内容平铺直叙地粘进来。没有强制的 Token 上限,但越短,模型越听话。
📌 程序记忆
就是 Skills,结构是这样的:
.claude/skills/ code-review/ SKILL.md ← 名字 + 描述常驻可见(约 100 tokens) checklist.md ← 只在 Skill 触发时才加载 review.py ← 步骤需要时才拉进来巧的地方叫渐进式披露(Progressive Disclosure):
平时 Agent 只看一个轻量索引(名字 + 描述),每个 Skill 大约 100 Token 真到任务匹配了,才加载完整的指令 链接的文件和脚本,只有流程跑到位才拉
这就是为什么你能给 Agent 塞 50 个能力,每一轮都不用付出 50 个的代价。
📌 情景记忆
就是 Auto Memory(默认开启,需要 Claude Code v2.1.59+)。
Agent 会自己给自己记蒸馏过的笔记——"构建命令、调试心得、架构笔记、代码风格偏好、工作流习惯",并且智能地判断哪些对未来对话有用。
这是蒸馏,不是糊一坨原始 transcript。
加载规则:
前 200 行(25KB)作为索引,会话开始加载 主题文件按需加载 /memory命令:随时手工浏览、修剪
🔥 重头戏:Dreams(主动遗忘/整理)
Claude Code 的差异化打法:"最小化默认"——
语义:文件层级 + @import程序:渐进式披露 情景:被动蒸馏 + 索引加载
而在"遗忘"这条最难的赛道上,它押注了Dreams(Managed Agents API,研究预览,按 Token 计费):
📡 一个按需触发的异步任务,通过 API 启动 📖 读取记忆库 + 你喂给它的会话 transcript 🔀 合并重复的、替换过期的、写回一个新记忆库 🚫不会动原始输入,你审完决定留还是丢
这就是把"手工修剪笔记"这一坨事外包给模型自己,但还是按需触发的——不是定时炸弹,你不用提心吊胆。
五、一张表摸清全貌
/context/clear、/compact | ||
@import | ||
.claude/skills/ | ||
/memory |
看出来规律了吧?
每种记忆 → 普通的文件 + 命令,不是向量数据库 语义 + 程序 →人手写的 Markdown 情景 →Agent 自己写给自己的 Markdown 最前沿 →Dreams 整理层,把"自动遗忘"这件事工程化
⚠️ 友情提示:Dreams 这个功能,我没在生产里长期压测过,结果可信度还得自己 review,别无脑放养。
六、骚操作:用/tmp 玩"用完即丢"的情景记忆
Auto Memory 是跨会话永久的,但情景记忆不一定要这么长寿。
我最常用的一种玩法:给单个任务开个临时 memory,任务结束就丢,干净利落。
操作很简单——告诉 Agent 给这个活儿开个进度文件。Peter Steinberger 发过个重构 prompt,原版长这样:
目标:重构到你满意为止。每完成一个关键步骤就 live-test 一遍,然后自动 review + commit。进度记录在
/tmp/refactor-{projectname}.md。
这里/tmp 就是精髓——这个文件就是当前任务的情景记忆。
每走一步,Agent 就在文件后追加"改了啥、过了啥、还剩啥"。就算上下文被压缩了、或者你中途重启了,Agent 回头读这文件,立刻知道自己走到哪了。
任务一收工,/tmp 里这文件也就随风而去了,零残留,零过期。
七、Ralph 循环:把文件系统当 Agent 的"长期记忆"
这套思路再升一档,就是 Geoffrey Huntley 的 Ralph 套路——专门给"长跑型 Agent"用的:
🔄 在无限 Shell 循环里跑 Agent 📝 每轮同一个 Prompt 🧹每轮全新的上下文窗口
跨轮的"记忆"完全靠文件系统,靠两个文件撑起全部状态:
📋 fix_plan.md:排过优先级的 TODO。Agent 每一轮挑一项、实现、更新计划、commit。指令很直白——"随时保持 @fix_plan.md 是最新的……尤其在你这一轮收尾之后"。📘 AGENT.md:操作性心得。怎么 build、例子怎么跑,简短就行。
每一轮循环就是:读这俩文件 → 干活 → 写回去 → commit。
正像那篇总结说的——"Agent 不再在跨轮之间失忆,因为进度文件就是它的记忆。"
Git 的提交记录,就是第二层情景记忆。每次 commit 就是一行带时间戳的"我试了啥"。跨轮成本几乎为零——知识全在硬盘上,下一轮只加载需要的部分。
八、终极拷问:你真的需要 4 种记忆吗?
框架之所以让我服气,是它告诉你——不是 4 种都给上就完事,按需配比。
🌡️简单反射 Agent(温控器、简单路由器):工作记忆够了,别的免谈。 🔐窄域支持 Agent(重置密码的 bot):工作 + 程序,死磕一条流程。 💻编程 Agent:4 种全要——工作记忆里干活、语义记忆装你的项目、Skills 系统管重复流程、情景记忆让它别在同一个坑里摔两次。
CoALA 论文还有更经典的对照组(这俩是论文 Table 2 的原案例,我中间加的两行是我自己推演的示意):
🧩Tree of Thoughts:24 点、填字游戏这种。工作 + 推理,"完全没有长期记忆"。纯解题器,不需要你的世界事实,也不需要上次经历。 🤖SayCan:厨房里帮你拿零食的机器人。长期记忆只有程序记忆——固定一个 551 条技能的库,"没有任何内部推理、检索或学习的动作"。挑出评分最高的技能执行就完了。 📖文档问答 bot(RAG 调你们的手册):工作 + 语义。要知识库就够了,不需要 Skills,也不需要记你上次问过啥。 🔁密码重置 bot:工作 + 程序。一条死流程,不用懂项目,也没历史工单。
编程 Agent 是少数几个真要吃满 4 种的。大部分 Agent 用不到,硬塞 = 多花钱 + 多噪音。
九、收个尾,4 句话总结一下
Agent 记忆不是 1 个东西,是 4 个:工作(上下文窗口)、语义(稳定事实)、程序(技能流程)、情景(踩坑经验)。 Claude Code 把 4 种全实现了,每种都映射到硬盘上的实物——上下文窗口、CLAUDE.md、Skills、Auto Memory。 真正的活儿在情景 + 自动整理:蒸馏过的 Auto Memory + Dreams(按需任务,自动合并重复、自动剪掉过期)。目前我见过最像样的"自动遗忘"工程化方案。 按需配比:温控器 1 种就够,编程 Agent 才 4 种全要。
十、最后留个问题给你 🤔
记忆就是让 Agent 能结合你的项目、你的偏好、它犯过的错来回答你——而不是每轮从零开始。
你自己那套配置里,这 4 种记忆你真的全用上了吗?
绝大多数人停留在工作 + 语义,把程序和情景晾在一边。下次启动 Claude Code 之前,先想想你这回想让它的"记忆"覆盖到哪一层。
夜雨聆风