转载自B站UP 日新月异max
问题一:三种记忆存储方式(Forms)
MemoryOS 将记忆划分为三个层级,分别对应不同的生命周期和抽象程度。
1. 短期记忆 (STM) - 保证实时性
-
机制:STM 采用 FIFO(先进先出)队列。它存储的是未经压缩的“原生”对话页面(Page)。
-
核心结构:每个页面 page_i 不仅仅包含问答对 \{Q_i, R_i\},还包含时间戳 T_i 和 元数据链(Meta Chain) meta_i^{chain} 。
-
Dialogue Chain:这是为了解决短期上下文连贯性。模型会评估当前页与上一页是否有关联,如果有关联则链接起来,确保模型知道“刚才我们在聊什么”
-
公式:
page^{chain}_i = \{Q_i, R_i, T_i, meta_i^{chain}\}
2. 中期记忆 (MTM) - 保证主题连贯性
- 机制:当 STM 队列满了,旧的对话页会被“挤出”并迁移到 MTM。MTM 采用段页式存储。
- 核心逻辑:MTM 不再是线性的,而是按主题聚类的。系统会计算新进来的页面与现有段(Segment)的相似度 \mathcal{F}_{score}。
- 相似度计算:结合了 Embedding 余弦相似度(语义)和 Jaccard 关键词相似度(字面匹配) 。
- 如果 \mathcal{F}_{score} > \theta(阈值),页面归入该段。
- 否则,创建一个新段。
- 公式:
segment_i = \{page_i | \mathcal{F}_{score}(page_i, segment_i) > \theta\}
3. 长期个性化记忆 (LPM) - 维护人格与偏好
- 机制:只有在 MTM 中非常“热门”的记忆段(即被反复提及、访问)才会晋升到 LPM。
- 核心结构:包含 用户画像(User Persona) 和 Agent 画像(Agent Persona)。
- User KB / Traits:动态更新的事实(如“用户住在北京”)和偏好(如“用户喜欢吃辣”)。
- Static Profile:静态属性(如姓名、生日) 。
问题二:记忆的处理机制(Dynamics)
假设用户输入一段对话:
用户:“我上周去了湿地公园,那里的松鼠很可爱。” 对话助手(Agent)回答:“真好啊,你喜欢那些可爱的松鼠嘛”
1. 进入 STM(短期缓冲)
- 系统创建一个 Page_{new}:
{Q: "我去了湿地公园...", R: "...", T: 2024-01-24}。 - LLM 生成 meta^{chain},标记这个页面属于“近期出游”话题。
- 放入 STM 队列。如果 STM 队列长度限制为 7,且现在已满,最早的一页(假设是关于“想吃汉堡”的对话)被移出 STM,进入 MTM 处理流程 。
2. 迁移至 MTM(主题归档)
- 被 STM 移出的“想吃汉堡”页面进入 MTM。
- 系统计算该页面与 MTM 中现有段的相似度:
- 段 A(工作):相似度低。
- 段 B(饮食偏好):相似度高(\mathcal{F}_{score} > \theta)。
- 该页面被合并进“段 B(饮食偏好)”。如果此时 MTM 空间不够,会根据热度(Heat)删除最不重要的段 。
3. 晋升至 LPM(长期记忆)
- 假设用户在后续对话中多次提到“松鼠”和“公园”,导致 MTM 中存储“湿地公园”的那个段被反复检索。
- 该段的 热度(Heat) 分数上升(由访问次数 N_{visit} 和交互深度 L_{interaction} 决定) 。
- 当 Heat > \tau(阈值,例如 5)时,系统触发提取操作 。
- LLM 从该段中提取出用户特征:“用户喜欢自然风光”、“用户喜欢小动物”。(也可以从Role-Play提示词中提取出Agent个性,比如用户输入“假设你是人工智能专家,冷静客观富有科研天赋”,那么Agent个性就偏向于科研风格和创新性。)
- 这些特征被写入 LPM 的 User Traits和Agent Persona,成为永久记忆。几周后即使 STM 和 MTM 都被覆盖了,LPM 依然记得你喜欢松鼠 。
问题三:算法全流程详解(存储、更新、检索、生成)

1. 存储 (Storage)
架构如上所述,分为 STM(队列)、MTM(段页式)、LPM(键值对/画像)。这是一个层级结构,数据密度逐层压缩,保留时间逐层增加 。
2. 更新 (Updating)
更新包含两个关键的“跃迁”:
-
STM \rightarrow MTM (FIFO):纯粹基于容量的更新。STM 满了,头部元素(最旧)强制进入 MTM 。
-
MTM \rightarrow LPM (Heat-based):基于价值的更新。论文引入了 热度(Heat)公式:
Heat = \alpha \cdot N_{visit} + \beta \cdot L_{interaction} + \gamma \cdot R_{recency}- N_{visit}:被检索次数(越查越重要)。
- L_{interaction}:段内包含的页面数(聊得越多越重要)。
- R_{recency}:时间衰减(越近越重要)。
- 热度低的段被删除(遗忘),热度高的段提取信息存入 LPM 。
-
**LPM\rightarrowNull:**对于存储具体事实和属性的 User KB(用户知识库) 和 Agent Traits(Agent特性),MemoryOS不允许它们无限增长:
- 固定大小限制:这两部分都维持着一个固定大小的队列,上限为 100 条 。
- FIFO 策略:当知识库填满 100 条后,系统会采用 First-In-First-Out(先进先出) 策略 。这意味着最旧的、可能已经过时的事实会被物理删除,为新提取的事实腾出空间 。
- User Traits的构建:系统参考了 90 个维度的特征,涵盖基本需求、人格、AI 对齐偏好及平台兴趣标签 。当 MTM 中的高热度段(Heat > 5)晋升时,LLM 会从这些段的原始对话页中提取信息,并对这 90 个维度的特征进行增量式更新 ,使得旧的特征值被新的评估结果所取代,从而实现了用户画像随时间的动态演变 。
- 热度重置:一旦一个 MTM 段的信息被成功转移到了 LPM,该段对应的交互页面计数 L_{interaction} 会被重置为零 。由于 L_{interaction} 是计算 Heat 的核心参数之一(参考公式 4),重置会导致该段的热度分数瞬间大幅下降 。热度下降后,该段短期内不会再次触发向 LPM 的晋升,直到积累了足够多的新交互 。这确保了 LPM 的进化是连续且无冗余的 。
3. 检索 (Retrieval) - 混合策略
当用户发起一个新的 Query 时,系统同时从三处检索 :
- STM 检索:直接获取队列中所有最近的 N 轮对话,保证上下文不丢失 。
- MTM 检索(两阶段法):
- 段级检索:先计算 Query 与 Segment 摘要的相似度,选出 Top-m 个相关段(比如找到“旅游”段)。
- 页级检索:在选中的段里,再细化查找 Top-k 个最相关的具体对话页 。
- LPM 检索:基于语义向量,从 User KB 和 Agent Traits 中检索 Top-N 条相关的事实或偏好 。
4. 生成 (Generation)
-
Prompt 组装:将检索到的三部分信息拼接:
Prompt = [LPM\_Info] + [MTM\_Context] + [STM\_Recent] + [Current\_Query] -
LLM 推理:LLM 基于这个包含长期偏好、中期背景和短期语境的 Prompt 生成回复,确保回复既连贯又个性化 。
问题四:结果表与性能指标分析
1. 评价指标含义详解
- Acc. (Retrieval Accuracy):检索准确率。衡量系统是否在浩如烟海的历史记忆中找到了真正相关的那条信息(0 或 1) 。
- Corr. (Response Correctness):回复正确性。LLM 的回答是否符合事实,没有出现幻觉(0, 0.5, 1 三档评分) 。
- Cohe. (Contextual Coherence):上下文连贯性。回复是否自然、顺畅,符合对话逻辑 。
- F1 Score:在 LoCoMo 基准中,衡量生成的答案与标准答案在语义内容上的重叠度(综合了精确率和召回率) 。
- BLEU-1:衡量生成文本与参考文本的 N-gram(这里是 1-gram)重合度,主要看用词是否准确 。
2. 任务分类含义 (LoCoMo Dataset)
表格 2 将测试分为了四类,这对于理解模型能力至关重要:
- Single Hop(单跳):问题只需要检索一条特定的历史记录就能回答,这是最基础的记忆提取。
- Multi Hop(多跳):问题需要结合多条分散的记录推理。例如:“我上次去大理旅游和这次去西藏旅游,间隔了多久?”、“根据我喜欢的装修风格,你觉得我上周在宜家看中的那款沙发合适吗?”
- Temporal(时序):涉及时间顺序的问题。
- Open Domain(开放域):闲聊或广泛话题,测试长周期的个性化维持能力。