智能体面试准备(五十九):智能体长期记忆架构与检索增强记忆------MemGPT、记忆巩固与多会话隔离
引言:与上一篇、系列的关系
(十三)讲了持久化记忆的概念,(四十一)讲了记忆架构与长期知识演进的理论谱系。本篇把这两者落到长期记忆架构这一具体形态:以 MemGPT 为代表的「工作上下文 + 外部存储 + 检索调度」范式,讲清一个 Agent 怎么拥有「跨会话也不会忘」的长期记忆,以及多会话之间怎么隔离。它和 4MRAG 也咬合------4MRAG 是外部知识检索,本篇是 Agent 自身状态的长期沉淀,两者构成两级记忆(接五十九内部记忆篇的同一框架)。华为多模态 LLM + Agent 岗,能讲清长期记忆架构,比单纯说「我用向量库」强得多。
MemGPT 式长期记忆架构
+------------------------------------------+
| 工作上下文 (Working Context) |
| 系统提示 + 近期对话 + 检索到的记忆片段 |
+------------------------------------------+
^ 读(检索) v 写(归档/巩固)
+------------------------------------------+
| 外部记忆存储 (External Memory) |
| 召回记忆(Recalled) / 存档记忆(Archival) |
| <- 向量库检索增强 + 分层压缩 -> |
+------------------------------------------+
^ 巩固(Consolidation)
+------------------------------------------+
| 多会话隔离层 (per-user / per-session) |
+------------------------------------------+
第一节 为什么需要「长期」记忆
普通对话系统的上下文窗口是有限的(哪怕 128K/200K),且会话一关,状态就没了。但真实 Agent(个人助理、客服、陪练)必须跨天、跨会话记得用户:偏好、历史决策、未完成事项。这就是长期记忆要解决的事。
核心矛盾:上下文窗口有限 vs 记忆无限增长。解法不是把一切塞进窗口,而是像人脑------只在「工作记忆」里放当前需要的,其余存在「外部记忆」,按需检索调入。这正是 MemGPT 的核心思想。
第二节 记忆的四种类型与生产映射
| 记忆类型 | 存什么 | 生产载体 | 生命周期 |
|---|---|---|---|
| 工作记忆 | 当前对话上下文 | KV / 滚动窗口 | 会话级 |
| 情节记忆 | 「用户上周做了 X」事件流 | 时序库 / 向量库 | 中长 |
| 语义记忆 | 用户偏好、事实、人设 | 向量库 + 结构化 KV | 长 |
| 程序记忆 | 可复用技能、工具用法 | 代码/提示模板库 | 长 |
面试金句:不要把所有记忆塞进一个向量库。工作记忆用上下文窗口+截断,语义记忆用向量+KV,情节记忆用时序。混用会导致检索噪声、冷启动慢、隐私难隔离。
第三节 MemGPT 的「记忆调度」机制
MemGPT 把一个 LLM 同时当「主脑」和「记忆管理员」:它有一套固定工具,能主动决定「现在该从外部记忆里召回什么」「该把什么归档进外部记忆」。关键组件:
- Main Context(工作上下文):当前能直接看到的内容,容量有限。
- Recall Memory(召回记忆):按时间索引的对话历史,可分页检索。
- Archival Memory(存档记忆):无容量上限的外部存储(向量库),存长期事实与文档。
- Memory Editing Tools :
recall、retrieve、archive、reflect等工具,由模型自主调用。
python
# 记忆调度(MemGPT 思路简化)
def step(agent, user_msg):
plan = agent.llm.decide_tools(user_msg, agent.main_context)
for tool in plan:
if tool == "retrieve":
hits = agent.archival.search(embed(user_msg))
agent.main_context.inject(hits)
elif tool == "archive":
agent.archival.store(agent.main_context.recent())
return agent.llm.reply(agent.main_context)
要点:记忆的「读写」是模型自主决策而非写死的流水,这让 Agent 能根据任务决定回忆什么------比固定 RAG 检索更灵活。
第四节 检索增强记忆:写入与压缩
外部记忆不是无脑堆,必须做检索增强 + 压缩巩固:
- 重要性打分:用模型给事件打 importance(0~1),低于阈值降采样或合并。
- LLM 摘要压缩(记忆巩固):把一长串情节压缩成「用户偏好:喜欢简洁」这类语义记忆------即(四十一)讲的 consolidation,类似人类睡眠整合记忆。
- 分层存储:热层(工作上下文)留原文,温层(向量库)存摘要,冷层(数仓)存原始日志备查。
- 去重合并:同一事实多次出现合并为一条并刷新时间戳。
python
def consolidate(episodes, llm):
prompt = ("把以下事件流提炼成不超过 3 条稳定语义记忆"
"(偏好/事实/人设), 只输出要点:\n" + "\n".join(episodes))
return llm.generate(prompt)
def should_store(item):
return item.importance >= 0.4 or item.kind == "episodic_critical"
第五节 多会话隔离:记忆不能串
企业级 Agent,长期记忆必须按租户/用户隔离,否则 A 看到 B 的偏好甚至机密。生产要点:
-
命名空间隔离 :向量库按
user_id/session_id分区;跨用户查询默认带 namespace 过滤。 -
权限校验:读记忆前校验调用方身份(接 B49 企业集成)。
-
遗忘权(机器遗忘):用户要求删除时,热/温/冷三层一起清,并在微调排除集标记,避免「表面删、底层留」。
-
PII 脱敏:写入前对手机号、身份证做脱敏或加密。
写入: 记忆 -> PII检测 -> 脱敏/加密 -> 分层落库(带 user_id namespace)
读取: 请求 -> 身份校验 -> namespace 过滤 -> 检索 -> 注入
删除: 三层统一清理 + 标记微调排除集
第六节 与 4MRAG 串联:两级记忆闭环
把内部长期记忆和外部检索记忆接起来,Agent 的「知道什么」分两层:
- 用户问「你记得我上次说的项目吗」→ 走内部长期记忆(情节/语义)。
- 用户问「这份财报第三页表格讲了什么」→ 走 4MRAG 外部检索(多模态文档)。
用统一「记忆网关」接口,内部自动判断走哪级、是否融合:
python
def answer(uid, query, memory, rag):
internal = memory.retrieve(uid, query)
external = rag.search(query)
context = fuse(internal, external)
return llm.generate(query, context)
这把本篇和(五十五)多模态 RAG 工程、(十三)持久化记忆串成完整链路,面试直接讲「两级记忆 + 统一网关」。
第七节 工程陷阱
- 上下文污染:低质记忆无差别注入会让模型跑偏。对策:置信度门控 + 仅注入 top-k + 显式标注来源。
- 记忆膨胀:长期运行温层变大、检索变慢。对策:定期 consolidate + 冷归档 + 重要性淘汰。
- 冷启动:新用户无记忆像失忆。对策:首轮主动澄清(接 B50)快速建初始语义记忆。
- 遗忘漂移:只写不 consolidate,语义记忆和最新情节冲突。对策:写时检测冲突,冲突则合并或标「已更新」。
面试速答(本篇可直接背的 3 句)
- 上下文窗口有限 vs 记忆无限增长,解法像人脑:工作上下文放当前所需,外部记忆按需检索调入------MemGPT 用模型自主调度的记忆工具实现。
- 记忆分四型(工作/情节/语义/程序),生产上不都塞向量库;用重要性打分 + LLM 摘要压缩(记忆巩固)+ 分层(热/温/冷)+ 去重合并管理。
- 长期记忆与 4MRAG 是两级:内部记忆给个性化长期状态,外部检索给可溯源事实;用统一网关融合,并做多租户 namespace 隔离与遗忘权。
高频追问清单
- MemGPT 和普通 RAG 记忆区别?答:MemGPT 由模型自主决定召回/归档什么,RAG 是固定检索;前者更灵活、后者更可控。
- 记忆和 RAG 检索区别?答:记忆关于用户自身状态、重个性化长期;RAG 关于外部事实、重时效溯源;检索机制可共用。
- 怎么防记忆膨胀?答:重要性门控写入、定期 consolidate 成语义记忆、温层冷归档、低重要淘汰。
- 多租户记忆怎么隔离?答:向量库按 user_id namespace 分区 + 读取身份校验 + PII 脱敏 + 遗忘权三层统一清理。
- 遗忘权怎么落地?答:热温冷三层一起删,并在微调排除集标记,避免底层数据残留导致假删除。
- 冷启动怎么办?答:首轮主动澄清建初始语义记忆,用模板/表单快速收敛用户画像。