我以前一直觉得,给 AI 做“记忆”,难点主要是存储。

东西放哪里?

怎么索引?

以后怎么找回来?

这些当然都是问题。

但做 AdamI 做到现在,我越来越觉得,真正难的其实不是这些。

一个系统完全可以存很多东西,也可以在需要的时候把它们找出来,但最后的行为几乎没有任何变化。

它可以调出昨天的对话。

可以查向量数据库。

可以总结自己做过什么。

甚至可以很自然地说一句:

“我记得这件事。”

但我现在更在意的是另一个问题:

这段过去,真的改变了它接下来会怎么做吗?

如果没有,那它可能只是“存过”,还不能算真正意义上的“记住”。


把东西存下来,其实只是第一步

现在很多 Agent 系统都已经能做到某种形式的持久化。

聊天记录可以进数据库。

文档可以做 embedding。

工具调用结果可以留日志。

任务执行完以后,也可以把结果总结出来,再塞进下一次上下文。

这些都很有用。

如果什么都不保存,那么每一次启动都像重新认识世界。

AdamI 现在也已经有这类基础机制,包括持久化的记忆组件、经验记录、任务状态,以及跨 session 保留信息的运行结构。

但问题很快就会变成:

到底什么值得留下来?

如果什么都记,最后记忆会变成噪声。

如果记得太少,过去又几乎不会对未来产生影响。

更麻烦的是,有些东西虽然被成功检索出来了,但根本没有参与决策。

这种情况下,系统有的是存储,不一定有真正起作用的记忆。


能检索出来,不代表真的“记住了”

现在谈 AI memory,经常会变成一个很标准的流程:

存进去
→ 找相关内容
→ 放回上下文

这个流程没问题,但我觉得它更像“检索系统”,还不完全是我想在 AdamI 里做的那种记忆。

比如一个 Agent 连续犯了五次同样的错误。

五次失败全部被保存下来了。

第六次执行任务时,它也成功把前五次失败全部检索了出来。

然后——

它还是做了完全一样的决定。

从技术上说,retrieval 成功了。

但从行为上看,这段过去并没有产生任何后果。

那这算记忆吗?

反过来,如果它只失败了一次,但这次失败让它以后:

  • 降低了某个策略的置信度
  • 更换了工具
  • 修改了执行顺序
  • 对某类操作变得更谨慎
  • 或者形成了一条新的经验规则

比如:

下次遇到这种情况,先试 B,不要直接用 A。

那即使保存的数据并不多,这次经验已经真正进入了未来行为。

这个更接近我理解里的“记忆”。


记忆必须有后果

最近我越来越喜欢用一句话来判断这个问题:

A memory matters only when the future would be different without it.

中文我更愿意理解成:

一段记忆只有在“没有它,未来会不一样”的时候,才真正有意义。

这句话听起来很简单,但一旦落到架构上,问题马上就变复杂了。

以前我会问:

怎么把正确的记忆找出来?

现在我还得继续问:

找出来以后,它到底可以改变什么?

一段记忆可能会影响:

  • 下一步采取什么动作
  • 用哪个工具
  • 对一个判断有多大信心
  • 调哪个模型
  • 某个操作风险有多高
  • 要不要请求人工确认
  • 哪个策略以后应该少用
  • 哪个成功经验值得重复

这样一来,memory 就不能只是挂在 Agent 旁边的一个数据库。

它最终必须进入决策链。

这才是难点。


不是所有经历都应该同等重要

如果把每一次经历都一视同仁,系统很快会出问题。

举个简单例子。

Experience A

一次普通 API 调用成功。

没什么异常。

Experience B

一次工具调用因为临时网络问题超时。

Experience C

某种操作连续几次都产生了错误结果,甚至可能带来风险。

如果只是把 A、B、C 同样存下来,再按照相似度检索,其实不够。

C 显然应该比 A 对未来有更大的影响。

B 可能短时间内有意义,但如果以后再也没发生,它的权重也许应该慢慢降低。

所以一个长期运行的 Agent,最终可能不只是需要“记忆检索”。

还需要某种对经验的评估。

比如:

  • 这件事是不是异常?
  • 是成功还是失败?
  • 后果严重吗?
  • 这个经验是普遍规律,还是只在当前环境成立?
  • 它已经过时了吗?
  • 是否应该慢慢降低权重?
  • 如果重复发生,是不是应该越来越重要?
  • 新的证据出现以后,旧经验能不能被推翻?

到这里,问题已经不是数据库设计了。

它开始变成:

系统怎么利用连续存在的历史去改变自己。


记忆和遗忘其实是同一个问题

以前会很自然地觉得:

能记住越多越好。

现在我反而觉得,一个不能遗忘的 Agent 可能会越来越难用。

因为旧信息会一直留下来。

临时错误可能被固化成永久规则。

过时信息还在参与决策。

互相矛盾的经验越积越多。

最后系统不是“经验丰富”,而是被自己的历史污染。

所以更实际的问题可能不是:

怎么把东西一直保存下来?

而是:

什么东西应该继续影响未来?影响多久?

我现在比较倾向把它看成一个完整生命周期:

Experience
→ Evaluate
→ Retain / Forget
→ Retrieve
→ Influence
→ Reinforce / Revise / Decay

真正重要的不是一条信息有没有走完整个流程。

而是它有没有资格继续影响系统后面的行为。


AdamI 现在还没有解决这个问题

这里我还是想把现状说清楚。

AdamI 已经有持久化 memory 的基础设施,也有经验记录相关机制。

它可以让一些信息跨任务、跨 session 保留下来,而不是每次都只活在当前 prompt 里。

但这不代表 AdamI 已经拥有一个成熟的“基于记忆学习”的系统。

还没有。

现在真正没有解决好的,是:

怎么让过去的经验稳定、可控、可验证地改变未来行为。

我不想因为系统能检索历史,就直接说:

AdamI 已经会从经验中学习。

这个结论太早了。

第一版 AdamI 最大的教训之一,就是不能因为输出看起来像那么回事,就认为底层机制真的成立。

所以如果以后我要说:

AdamI 从某次经验里学到了东西。

那应该可以被测试。


我现在想到的一种测试方法

假设有一个任务,在条件 X 下运行。

第一次:

  1. 记录 AdamI 的原始决策
  2. 让它经历一个关键事件
  3. 保存这段经验
  4. 再给它一个高度相似的任务
  5. 看决策有没有变化

然后还有一步我觉得特别重要:

  1. 把这段记忆拿掉,再跑一次

如果所谓的“记忆”被移除以后,行为完全没变化,那至少要怀疑:

它之前真的参与决策了吗?

这个思路有点像做 ablation test。

不是问系统:

“你记不记得?”

而是直接看:

有这段记忆和没有这段记忆,行为有没有可测量的差异。

我觉得这个比问模型自己“是否记得”靠谱得多。


Memory 应该是可以验证的

如果要把这件事做得更工程化,我觉得 memory 最后应该能被这样测试:

两个几乎一样的 Agent。

Agent A 有一段关键历史经验。

Agent B 没有。

然后给它们同一个新任务。

如果这段经验真的作为 memory 起作用,那么最终应该能看到一些差异,比如:

  • 少犯一次之前的错误
  • 换了工具
  • 换了执行顺序
  • 更谨慎
  • 更快完成任务
  • 对风险判断不同
  • 给出的 confidence 不一样

不一定每一段记忆都会造成巨大变化。

但如果系统运行几个月以后,有没有历史经验都完全一样,那这些“memory”就更像档案。

而不是系统的一部分。


从“持续运行”到“持续发展”

这件事对 AdamI 很重要,因为 persistence 从来不是终点。

一个程序一直不关机,也叫持续运行。

一个数据库永远不删数据,也叫持久化。

但这两个东西都不等于“发展”。

我真正感兴趣的是:

连续存在,能不能慢慢形成发展。

如果可以,那昨天发生的事情就必须影响明天。

系统不能只是“活得更久”。

它的历史得有后果。

这可能是“长期运行的 AI 程序”和“持续形成自身历史的人工实体”之间一个很重要的区别。

我不是在说 consciousness。

也不是说 biological life。

更不是说 AGI。

只是一个更具体、也更容易验证的目标:

系统未来的行为,会越来越多地受到自己过去经历的影响。

这个东西至少是可以测的。

所以也更值得做。


现在的问题已经变了

一开始我问的是:

怎么让 AdamI 记住东西?

现在我觉得这个问题太浅了。

我真正想弄明白的是:

什么东西值得成为记忆?

什么应该被忘掉?

一段记忆应该有多大影响?

这个影响什么时候应该衰减?

新旧经验发生冲突时,到底听谁的?

以及最重要的一点:

我能不能证明,如果没有这段记忆,AdamI 会做出不同的决定?

如果这个问题能回答出来,

那 memory 才开始不只是 storage。

它开始真正进入 AdamI 的行为。


Digital Life Log #005

Building AdamI — a Digital Life in public.

一段记忆只有在“没有它,未来会不一样”的时候,才真正有意义。