Agent 没有长期记忆,只有你设计的数据检索策略
如果一个系统真的有记忆, 那它至少应该在不被提醒的情况下, 主动使用过去的信息。
Agent 做不到。
一、先给结论:Agent 从来没有“记忆能力”
很多内容会说:
- Agent 记得你是谁
- Agent 会记住你的偏好
- Agent 用久了会越来越懂你
但在工程上,“记忆”有一个非常严格的定义:
记忆必须是持久的、可累积的、并且会自动影响未来决策。
而 Agent 一个条件都不满足。
二、LLM 天生不可能拥有记忆
这是一个物理级别的事实,而不是设计缺陷。
每一次 LLM 调用:
output = LLM(prompt)
- 不知道你是谁
- 不知道你来过几次
- 不知道上一次发生了什么
如果你不把信息塞进去, 它就当一切从未发生。
这不是“暂时没实现记忆”, 而是模型机制决定的。
三、所谓“短期 / 长期记忆”,是工程命名,不是能力描述
在 Agent 框架里,常见说法是:
- 短期记忆(Short-term Memory)
- 长期记忆(Long-term Memory)
这些名字听起来很像人类认知, 但在工程上,它们分别指的是:
| 名称 | 实际含义 |
|---|---|
| 短期记忆 | 当前 prompt 里的上下文 |
| 中期记忆 | 历史对话的摘要 |
| 长期记忆 | 外部存储 + 检索结果 |
没有任何一类“记忆”存在于 Agent 本身。
四、“长期记忆”的真实实现方式
所谓 Agent 的长期记忆,通常由三步组成:
- 写入:把对话或行为存进 DB / 向量库
- 检索:在新请求中查询相关内容
- 注入:把查询结果拼进 prompt
如果你不执行这三步, Agent 不会“想起”任何事情。
五、向量检索不是记忆,是索引
这是一个非常关键、但被大量混淆的点。
很多文章会说:
“我们给 Agent 加了向量记忆。”
但工程事实是:
向量库解决的是“相关性查找”,不是记忆。
向量检索只能做到:
- 在你发起请求之后
- 根据当前 query
- 找出“看起来相关”的历史片段
它不会:
- 主动提醒 Agent
- 自动影响行为
- 在未查询时发挥作用
这是搜索,不是记忆。
六、Agent 不会“想起”,只会“被喂”
这是理解 Agent 记忆的核心一句话:
Agent 不会主动回忆, 它只会被动接收。
如果你没有:
- 在正确的时机
- 用正确的方式
- 把正确的数据
注入上下文, 那段“记忆”对 Agent 来说等于不存在。
七、为什么“记忆”会让人产生强烈错觉?
因为演示场景往往是这样设计的:
- 用户问的问题刚好触发检索
- 检索结果被完整注入 prompt
- Agent 正好用了这段信息
于是观众会觉得:
“它自己想起来了。”
但实际上:
是工程师替它查出来的。
八、如果 Agent 真有长期记忆,工程会立刻失控
这是一个非常重要的反向推理。
假设 Agent 能:
- 自主积累记忆
- 自主决定哪些信息重要
- 自主影响未来行为
那么你将面临:
- 不可预测的行为变化
- 无法复现的决策路径
- 无法审计的历史依赖
- 无法回滚的状态污染
这在任何严肃系统中都是不可接受的。
九、真正有价值的不是“记忆”,而是检索策略
Agent 系统的差异,真正体现在:
- 什么时候检索
- 检索什么
- 检索多少
- 如何压缩
- 如何注入
而不是“存了多少记忆”。
记忆不是资产, 有效检索才是。
十、一针见血的工程结论
Agent 并不记得任何事情。
它只是根据你当前的问题, 使用你设计的策略, 被动接收了一小段历史数据。
结语
当你停止讨论:
“Agent 会不会记住我?”
而开始讨论:
“我该在什么时机,把哪些历史数据注入上下文?”
你才真正进入了 Agent 设计的工程核心。