记忆
大约 2 分钟
记忆
为什么智能体需要记忆?它和 RAG 差在哪?
模型调用是无状态的。同一个进程里的历史列表能撑住这一次会话,进程一重启就没了,也不能按重要性检索、遗忘或合并。所以会丢偏好、前后矛盾,也学不会上次为什么失败。
这是记忆要补的洞:对话和经历。
另一个洞是模型知识本身是静态的:有截止日期,专业深度不够,还会把像真的话说成事实。这是 RAG 要补的洞:回答前先从外部知识库取出依据。
面试用一句话分开:记忆记的是这个智能体经历过什么;检索补的是世界里有什么它训练时没见过的材料。两个都要,因为它们解决的不是同一种忘。
几类记忆怎么分?
认知心理学的梯子可以压缩成面试答案:感觉记忆极短,工作记忆又短又小,长期记忆才留下来。长期记忆再分成技能习惯,以及能说出来的知识。
工程上对应四种,不要和心理学分类一一死磕,讲清用途:
| 类型 | 放什么 | 容量 |
|---|---|---|
| 工作记忆 | 当前任务的临时信息 | 小,用完可丢 |
| 情景记忆 | 具体事件:某次对话、某次失败 | 按经历增长 |
| 语义记忆 | 抽出来的稳定事实和偏好 | 比事件更值得长期留 |
| 感知记忆 | 图像、音频等多模态材料 | 按模态分开存 |
同一条「我在学 Python」不该只活在某一轮消息里。重要的工作记忆可以升成情景,反复出现的情景再收成语义。
写入、取回、忘掉分别怎么做?
写入要带类型和重要性,而不是把整段对话原样追加。取回按当前问题搜,可以限定类型,也可以跨类型搜。只把命中的少数条送回窗口。
忘掉有三条规则,面试挑得出来就够:
- 重要性:低于阈值的先丢。
- 时间:超过保留期的丢。
- 容量:超限时丢最不重要的,不是无脑丢最旧的。
运行时要有一个记忆管理器负责这些策略。工具只暴露「记下、搜到、忘掉、升格」,智能体循环不自己实现存储。