一天,一个开发者跟我说:"我的 Agent 已经学过我的代码风格了,下次应该就知道。"
我问他:"你确定?"
他看了我一眼,没说话。
三周后,他回来了。说:"每次重启 Agent,它都像失忆了一样。"
这根本不是"学过"的问题。
LLM 没有记忆,只有"状态幻觉"
大语言模型的本质是:给定一个输入,预测最可能的下一个 token。
"记住你的代码风格"?那是概率模型在上下文窗口里找到了你的代码片段,按照统计规律"模仿"出来了。
会话一结束,上下文清空,一切归零。
这不是记忆,这是"临时工作台"。就像你在咖啡厅写代码,离开后桌子会被清空。你以为咖啡厅"记住"了你的代码?不,是你走之前把代码存在了云盘。
为什么 Agent 总是"假装记得"
三个原因:
第一,上下文窗口够大。
100 万 token 的窗口,确实能塞进很多东西。但塞进去不代表"记住了",只是"临时可访问"。
第二,模型训练过你的数据。
如果你的代码在训练集里,模型确实"见过"你的风格。但这不叫记住你,这叫"训练时学过模式"。问题在于:你的新代码、新偏好,模型根本没见过。
第三,概率模型会"脑补"。
LLM 最擅长的是"根据上下文补全"。它看到一个函数签名,会"猜"你想怎么实现。这种"猜"看起来像"记得",其实是"幻觉"+"概率拟合"。
真正的"记忆"需要什么
不是更大的上下文窗口,是明确的记忆架构。
三个层次:
第一层:短期记忆(上下文窗口)
- 会话内的临时信息
- 会话结束自动清空
- 适合:当前对话的上下文
第二层:中期记忆(状态文件)
- JSON/YAML 文件存储偏好
- 例:代码风格、命名习惯
- 适合:跨会话的固定配置
第三层:长期记忆(向量数据库)
- RAG 检索相关历史信息
- 主动注入上下文
- 适合:项目知识、决策记录
关键是:记忆不是"自动"的,需要显式设计和实现。
如何让 Agent 真正"记住"
不是让它"学习",是给它"外挂大脑"。
方案 1:状态文件(简单)
{
"codeStyle": {
"naming": "camelCase",
"indent": 2,
"preferArrow": true
}
}
每次会话开始,读取这个文件。Agent 不会"忘记",因为信息写在了磁盘上。
方案 2:RAG 检索(复杂)
- 把历史代码向量化
- 每次新会话,检索相似代码
- 注入上下文窗口
方案 3:混合(推荐)
- 固定偏好用状态文件
- 历史知识用 RAG
- 上下文窗口放当前会话
别被"幻觉"骗了
"Agent 记住了"通常是概率模型的"巧合"。
当你发现它"真的记得",问自己三个问题:
1. 这个信息在训练集里吗?
2. 这个信息在当前上下文窗口里吗?
3. 有没有显式的记忆机制(状态文件/RAG)?
如果三个答案都是"没有",那不是"记住",是"猜对了"。
未来的方向
不是更大的上下文窗口,是更智能的记忆管理。
- 自动分层存储(短期/中期/长期)
- 选择性写入(只记住重要的)
- 定期遗忘(过时信息清理)
- 精准检索(按需注入上下文)
Agent 不需要"记住一切",需要"记住正确的东西"。
最后的最后,别指望 LLM 自己"学会"你的偏好。给它一个外挂大脑,才是真正的解决方案。
—— https://www.80aj.com