我以前一直觉得,给 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 下运行。
第一次:
- 记录 AdamI 的原始决策
- 让它经历一个关键事件
- 保存这段经验
- 再给它一个高度相似的任务
- 看决策有没有变化
然后还有一步我觉得特别重要:
- 把这段记忆拿掉,再跑一次
如果所谓的“记忆”被移除以后,行为完全没变化,那至少要怀疑:
它之前真的参与决策了吗?
这个思路有点像做 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.
一段记忆只有在“没有它,未来会不一样”的时候,才真正有意义。