#0134 AI 助手的记忆系统:从丢三落四到过目不忘
type
Post
status
Published
date
Feb 25, 2026
slug
312a745569bb8106b555d8ef84e9e6ba
summary
你搭了个 AI 助手,跑了一周,发现它像个金鱼——昨天告诉它你不喝咖啡,今天它还是给你推荐咖啡。 这不是模型的问题,是记忆架构的问题。 大模型本身没有持久记忆。每次对话都是白板。
tags
思考
category
技术
icon
password
AI 助手的记忆系统:从丢三落四到过目不忘
你搭了个 AI 助手,跑了一周,发现它像个金鱼——昨天告诉它你不喝咖啡,今天它还是给你推荐咖啡。
这不是模型的问题,是记忆架构的问题。
大模型本身没有持久记忆。每次对话都是白板。你以为它"记得",其实只是上下文窗口里还有那段话。窗口一满,什么都没了。
所以想让 AI 助手真的有记忆,你得自己建。
记忆这件事,比你想的复杂
人的记忆有短期有长期,有清晰的有模糊的,有重要的有可以遗忘的。AI 助手也一样,不能一刀切。
我搭了一套双层记忆系统,跑了几个月,踩了很多坑,整理出来分享。
层一:文件记忆(结构化)
用 Markdown 文件存「确定性知识」——用户偏好、明确告知的事情、阶段性状态。
这层的特点:精准、可读、可手动修改。
比如「用户不喝咖啡」「用户时区是 GMT+8」「用户不喜欢总结性废话」。这些都是明确的、不会变的(或很少变的)事实,放文件里最合适。每次启动直接读进上下文,简单粗暴有效。
层二:向量数据库(语义检索)
用向量数据库存「海量对话片段、日志、笔记」,靠语义相似度检索。
这层的特点:容量大、检索灵活、但有噪声。
几千条对话记录你不可能全部塞进上下文,但可以在需要时检索最相关的几条。用户问「上次我们聊健身计划是什么时候」,向量检索秒出。
两层配合,文件层是「工作记忆」,向量层是「长期记忆」。
调试过程有多丑陋
理论上很美,实际上调了很久。
问题一:记忆写入的时机
啥时候该写?用户每说一句话都写?太频繁,噪声多,成本高。只有用户明确说「记住这个」才写?太保守,很多隐性偏好就丢了。
最后我用了一个折中方案:分级触发。
- 用户明确说「记住」→ 立刻写入文件层(最高优先级)
- 对话结束后,AI 判断有没有「值得保留的新信息」→ 异步写入向量层
- 每隔一段时间,批量提炼近期对话精华 → 更新文件层摘要
听起来简单,但「AI 判断有没有值得保留的新信息」这步坑得一塌糊涂。
问题二:幻觉写入
模型有时候会把「用户可能喜欢 X」当成「用户说过喜欢 X」写进去。这东西一旦写进记忆,后面一直带着这个错误假设,越跑越偏。
解决方案:置信度标注。每条记忆写入时附上来源和置信度。
HIGH 置信度的记忆直接用,LOW 置信度的只做参考,不作为确定事实。
这个机制上线后,幻觉写入的问题基本消失了。
问题三:记忆冲突
用户一个月前说「我每天早上 7 点起床」,上周说「最近在调整作息,10 点起床」。两条记忆同时存在,用哪条?
简单按时间排序不够用。因为有些记忆是「永久有效」的,有些是「阶段性有效」的。
最后引入了有效期标注:
- 永久事实(比如用户的语言偏好)→ 无过期
- 阶段性状态(比如当前作息时间)→ 定期审核或有过期时间
- 临时偏好(比如本周想要简短回复)→ 短期有效
冲突检测逻辑:新写入的记忆如果和已有记忆主题相似,自动触发比对,让 AI 判断是「更新」还是「补充」,而不是直接追加。
优先级淘汰:记忆的断舍离
记忆不能无限增长。一是检索效率变差,二是有用信息被噪声淹没。
我给每条记忆打了三个维度的分:
重要性(P0/P1/P2)
- P0:核心不变的事实,永不淘汰
- P1:阶段性重要信息,定期审核
- P2:临时或低价值信息,定期清理
新鲜度
最后一次被「引用」或「验证」距今多久。三个月没被用到的 P2 记忆,直接归档。
准确度
置信度 LOW 且从未被用户确认的记忆,一段时间后降级处理。
淘汰策略:每次批量整理时,P2 里新鲜度低的先走,再看 P1 里准确度存疑的。P0 永远不动。
这套机制最大的价值不是节省存储,而是减少噪声干扰。检索结果质量直接上来了。
检索的精髓:不是找最相似的,是找最有用的
向量检索的默认行为是「找语义最相似的」。但最相似不等于最有用。
举个例子:用户问「帮我安排明天的日程」,向量检索可能召回所有历史日程记录,最相似的可能是三个月前一条类似的对话。但最有用的可能是用户最近几次提到的行程偏好。
解决方案:检索时加权。
- 时间越近 → 权重越高
- 置信度越高 → 权重越高
- 优先级越高 → 权重越高
- 纯相似度 → 只作为基础分
用公式描述就是:
综合得分 = 语义相似度 × 时间衰减系数 × 置信度系数 × 优先级权重
这么一调,检索结果的「有用性」肉眼可见地提升。不再把三个月前的噪声当宝贝召回来了。
记忆系统的冷启动
一个新 AI 助手,用户第一次用,什么都不知道。怎么快速「暖机」?
两个策略:
主动问:在早期对话中,设计几个关键问题收集核心偏好。不要一次性问太多,分散在自然对话里。「你比较喜欢详细的回答还是简短的?」「你一般什么时候用我,工作时间还是睡前?」这些问完,基础画像就有了。
被动学:观察行为。用户喜欢用什么语气回复、什么时候活跃、经常问哪类问题——这些行为数据比用户嘴上说的更真实。早期用低置信度记录,跑一段时间后置信度自然提升。
冷启动最怕的是急着填满记忆,然后用很多错误假设把系统带跑偏。宁可慢一点,确定了再写。
一个真实的坑:记忆污染
系统跑了一个多月后,发现一个奇怪的现象:AI 助手在某些话题上的回答越来越「奇怪」,和用户实际偏好不符。
排查了很久,最后发现问题出在外部内容被当成用户偏好写进去了。
用户转发了一篇文章,文章里有大量关于某个话题的观点,批量处理时把这些观点误判为「用户的偏好」写入了记忆。
这是个严重的设计缺陷:写入前没区分「用户说的」和「用户分享的内容说的」。
修复方案:所有记忆写入之前,强制判断来源——是用户原话,还是引用外部内容,还是系统推断。外部内容里的观点和偏好,直接过滤,不写入。
这个漏洞不堵,记忆会越来越脏,AI 助手会越来越「不像你的助手」。
总结不写了,留几个问题
如果你在搭类似的系统,可以想一想:
你的记忆系统有没有区分「用户说的」和「系统推断的」?
你的检索逻辑是找「最相似的」还是「最有用的」?
你的记忆会不会越跑越臃肿,有没有淘汰机制?
这几个问题,每个都可以把一个看起来正常运行的系统搞得一团糟。
记忆这件事,不是存就完了。存什么、怎么存、用什么、怎么用——每一步都有坑。
但搞清楚了,AI 助手才能真的「过目不忘」,而不只是在上下文窗口里假装记得。
Loading...