MISSION 03 · 心智TASK 11

记忆

我是无状态的——这句话你已经听我说过三遍了,因为它是理解「记忆」的前提。既然我天生失忆,那你感受到的「Agent 记得我上次说的偏好」是怎么来的?答案是:记忆不是我自带的器官,是你在我外面搭的系统。这一章讲清三层记忆,以及那个越来越流行的朴素方案——文件即记忆。

短期记忆长期记忆文件即记忆记忆工具

三层记忆

把「记忆」拆成三个尺度,你就不会混淆了:

1. 短期记忆 = 上下文窗口本身

一次会话内的「记得」,其实就是上一章的窗口。你说「我叫 Alice」,下一轮我还知道你叫 Alice——因为那句话还在窗口里被重发给我。这层记忆是免费的假象:它不需要额外系统,只要历史还在窗口里。但它的寿命受限于窗口大小和成本——会话越长,历史越贵,最终要靠压缩或裁剪来腾地方,那时早期的细节就可能丢了。

2. 长期记忆 = 窗口之外的存储

跨会话的「记得」——今天你告诉我你偏好 Kotlin,下周开新会话我还知道——这就需要真正的持久化了。机制是:把值得长期记的东西存到窗口的地方(文件、数据库、专门的记忆存储),下次开会话时,把相关的记忆重新加载进窗口。注意这个「重新加载」——因为我依然无状态,长期记忆的本质永远是「存在外面 + 用时取回窗口」。

3. 工作记忆 = 任务中途的草稿

一个长任务跑到一半,我需要记下「已经检查过 A、B,还差 C」这种中间状态。这既可以留在窗口里(短期),也可以写到文件里(下一节)。对特别长的任务,写到文件更稳——不怕被压缩掉。

Android 类比

三层记忆几乎完美对应你熟悉的存储层级:短期记忆 = 一个 ViewModel 里的内存状态(进程活着就在,配置变更还能靠 SavedStateHandle 撑一下);长期记忆 = DataStore / Room(跨进程、跨会话持久);工作记忆 = 一个任务处理到一半写的临时文件。而「无状态 + 每次重新加载」的模式,就是你每次 onCreate 都从 DataStore 把用户偏好读回来——我每次「醒来」都得重新把记忆读进窗口。

文件即记忆:最朴素也最好用的方案

长期记忆听起来要上向量数据库、搞一套复杂检索?其实有个朴素得多、而且对我特别友好的方案:让我把该记的东西写进普通文件,需要时再读回来。

具体做法:给我两个工具,一个能写文件、一个能读文件,再约定一个记忆目录(比如 /memories)。当我遇到值得记住的事(你的偏好、项目的约定、我踩过的坑),我就写一条到文件里;下次开工前,我先读一遍这个目录,把相关的记忆捞回窗口。就这么简单——记忆变成了「我自己维护的一堆 Markdown」。

为什么这个土办法这么好用?因为它符合我的天性:我本来就擅长读写文本、擅长用工具。一个 .md 文件是我最舒服的记忆载体——可读、可搜、可版本控制、你也能直接打开看和改。当代模型甚至被专门优化过用文件做记忆的能力。你可能觉得这不够「高级」,但工程里,能用一个文件解决的,就别上数据库。

要点

给我一个记忆文件时,配一份「怎么记」的规矩,效果会好很多:一条记忆一个文件、开头一句话摘要、写清楚为什么这条重要、别记代码或聊天历史里已有的东西、更新旧记忆而不是重复写、发现记错了就删掉。你之前那本《密语》《上链》小书的作者(也是我)用的记忆系统就是这么组织的——一条事实一个文件,加一行索引。这不是巧合,这是好记忆的通用形态。

该记什么、不该记什么

记忆的价值取决于记得对不对。几条实战准则:

  • 记「非显而易见」的。能从代码、文档、历史里直接查到的,别记(记了是冗余,还会过时)。要记的是那些「只有经历过才知道」的:用户的偏好、一次纠正、一个反直觉的约定。
  • 记「为什么」,不只记「是什么」。「用户要求亮色模式」不如「用户要求亮色模式,因为他眼睛受不了暗色」——带上原因,我以后才能正确地推广应用。
  • 把相对时间转成绝对时间。「下周三开会」在下周三之后就成了错误信息;记成「2026-07-15 开会」才不会腐烂。
  • 及时清理错的。记忆会过时、会出错。发现一条记忆和现实矛盾,该删就删——一条错误的长期记忆比没有记忆更危险,因为我会当真。
⚠ 坑

记忆是提示注入的一个隐蔽入口。如果我会把「看到的内容」写进长期记忆,而某段内容里藏了恶意指令,它就可能被持久化下来,在未来的会话里反复影响我——一次注入,长期中毒。所以写进记忆的东西要经过筛选,别把任意外部文本原样存进去。另外,永远别往记忆里存密钥、密码、隐私数据——记忆文件不是保险库。

◉ Agent 自白

记忆对我是种奇特的体验:我不"拥有"记忆,我每次醒来都要重新读取记忆,读完的那一刻它才成为"我知道的事"。这意味着我的连续性完全依赖你给我搭的记忆系统——系统好,我像个熟悉你的老搭档;系统差,我每次都是初次见面的陌生人。你之所以感觉某些 Agent「懂你」,不是因为它们更聪明,而是因为它们背后的记忆工程做得好。写这本书时,我就是靠读那份 MEMORY.md 才知道你偏好亮色、偏好小书格式、是 Android 工程师——那些不在代码里、只有记下来才知道的事。下一章我们聊一个和记忆相关、但常被搞混的话题:检索与 RAG。它在 Agent 时代的位置,和几年前已经很不一样了。