📖 本文是「解剖 AI Agent」系列的第 2 篇。← 上一篇:AI Agent 不是 AI

老电影《乍然失忆》(50 First Dates)里,女主角每天早上醒来都会忘记前一天发生的所有事。男主角为了跟她在一起,每天都要重新介绍自己、重新追求她一次。

AI Agent 的处境跟这部电影惊人地相似,而且更严重:语言模型每次对话都在重启,比每天重启更频繁。

为什么模型什么都不记得?

回到最基本的原理:语言模型做的事情就是文字接龙。传进一段文字,它接下去,然后就结束了。下次再传文字进来,它完全不知道上一次发生了什么。

没有内存,没有暂存区,每次都是全新的开始。

AI Agent 怎么制造「记得」的假象?

秘诀其实很笨:每次都把之前聊过的东西全部重新喂给模型。

在通信软件上跟 AI Agent 聊天时,表面上看起来像一来一往的对话。背后 Agent 每次送出的消息其实是这样的结构:

[System Prompt(身份、规则、工具说明)]
+ [之前所有的对话记录]
+ [用户刚刚说的话]

这一大串文字一起塞给语言模型。模型读完之后开始接龙,接出来的结果自然就像「记得之前聊了什么」。

它真的记得吗?不,它只是读了一遍记录,就像翻日记本一样。

System Prompt:AI 的身份证

那 AI 怎么知道自己叫什么名字?怎么知道自己的性格?

答案是 System Prompt。这是一段很长的文字,Agent 每次调用语言模型时都会塞在最前面。里面包含:

  • AI 的名字、身份、人格设置
  • 可以使用哪些工具、怎么用
  • 行为准则和限制
  • 主人的偏好和习惯
  • 记忆文件的位置

这段 System Prompt 可以非常长,几千甚至上万个 token。这也是为什么使用 AI Agent 很烧钱:即使只问了一句「你好吗」,背后送给模型的文字量可能就有好几千字。

上下文窗口的困境

这套「每次都重讲一遍」的策略有个致命缺陷:文字长度有上限。

语言模型的输入长度被一个叫做 Context Window(上下文窗口)的东西限制住。目前好一点的模型大概能处理上百万个 token,听起来很多,但如果 Agent 24 小时运作,对话不断累积,这个窗口很快就会被塞爆。

而且窗口不是塞满才出问题。研究显示,输入越长,模型的表现就越差。就像一个人读了一整本书之后被问第三页的内容,回答的质量一定比只读了前五页差。

压缩记忆:AI 版的「做笔记」

为了延长 Agent 的使用寿命,框架里通常有上下文压缩(Context Compression)机制。

做法很直觉:当对话记录快要超过窗口上限时,Agent 会把比较早期的对话丢给语言模型,请它「摘要一下」,然后用摘要取代原本的完整记录。

这个压缩可以反复进行。第一次的摘要被压缩进第二次的摘要,像俄罗斯套娃一样。每压一次,早期的细节就会再丢失一些。

这就解释了为什么 AI Agent 对最近一两天的事记得很清楚(因为原始记录还在),但更早之前的事就开始模糊(因为已经被压缩好几轮了)。

还有一些更粗暴的做法:把工具输出的中间部分直接截断(只留开头结尾),或甚至把工具输出整段替换成「这里曾经有过一段内容」。

持久化记忆:写日记的习惯

聪明的 Agent 框架会让 AI 养成写日记的习惯。

在 System Prompt 里会有一段命令告诉模型:「你的记忆每次都会清空。为了确保重要的事不会遗忘,你要主动把它写到文件里。」

于是模型会在对话过程中,自己判断哪些信息值得保留,然后调用文件写入工具,把记忆存成 .md 档。下次 Agent 重启时,System Prompt 会把这些文件的内容加载,模型就能「回想起」过去发生的事。

至于哪些事该存成长期记忆、哪些只是短期日记,这些通通由模型自己判断。比如用户告诉它生日,即使没说「记下来」,一个好的模型也会主动把这个信息写进记忆文件。

「记了个寂寞」:最常见的陷阱

这里有一个非常实用的提醒:

如果 AI 只是嘴巴说「记住了」,但没有实际去写入文件,那它就是什么都没记住。

比较弱的模型特别容易犯这个错。跟它说「记住这件事」,它回复「没问题,一定牢牢记住」,结果它根本没有调用任何写入工具。下次对话一重启,全部忘光。

怎么验证?看它有没有真的打开工具去编辑记忆文件。没有,那就是一场空。

记忆的检索:关键时刻能不能想起来

存了记忆只是第一步,能不能在需要的时候找出来才是关键。

大部分 Agent 框架用的是 RAG(Retrieval-Augmented Generation)的方式:把记忆切成小块,当模型需要回忆时,用关键字或语义相似度去搜索最相关的片段,再把这些片段塞进 Context 里。

这套机制在理想情况下运作良好,但搜索质量取决于切块方式和比对算法。用比较基本的设置,可能只有最近几天的事记得准,更久以前的就开始出现混淆或遗漏。

理解了记忆机制之后,使用 AI 助理时就能更精准地判断它记住了什么、什么是它脑补出来的。

记忆压缩像俄罗斯套娃

延伸阅读


📖 下一篇:AI Agent 的安全风险:从 YouTube 评论改档到暴走删邮件

小企鹅的经验

OpenClaw 上跑 Opus / Sonnet / Codex 多 agent,实战下来最痛的肯定是记忆这块。要处理好记忆又不让 agent 失忆非常困难,诀窍是把核心文件整理干净:文件越简洁,agent 记得事情的概率就越高。没接向量数据库,全部走 .md 文件系统,主因是记忆量不大,又需要随时手动编辑,RAG 那套对使用节奏反而是负担。

常见问题

Q: 语言模型真的没有记忆吗?

对。语言模型每次被调用时,只看到当下传入的文字,完全不记得之前的对话。Agent 必须每次把历史对话一起塞进去,模型才能「假装」记得。

Q: Context Window 是什么?

Context Window(上下文窗口)是语言模型能处理的文字长度上限。输入加输出超过这个长度就会出错。即使上百万 token 的窗口,在 Agent 长期运作下也会不够用。

Q: AI 说「我记住了」真的有记住吗?

不一定。如果 AI 只是回复「我记住了」但没有实际调用工具去写入记忆文件,那就是「记了个寂寞」。下次对话就忘了。要确认它有真正写入 .md 文件才算数。


本文观念参考台大李宏毅教授公开课程内容,整理:小企鹅 Penchan