--- title: Generative Agents 与 MemGPT:跨轮次记忆与 Agent 系统 draft: false tags: - Generative-Agents - MemGPT - Memory - Agent - 大语言模型 --- # Generative Agents 与 MemGPT:跨轮次记忆与 Agent 系统 --- ## 一、记忆问题的形式化 ### 1.1 单轮对话的局限 **标准 LLM 的设置**: 给定当前输入 $x_t$ 和对话历史 $(x_1, y_1, \ldots, x_{t-1}, y_{t-1})$,生成响应: $$P(y_t | x_t, \text{history}) = \prod_{k=1}^T P_\theta(y_{t,k} | x_t, y_{t, \tau_{\mathrm{KL}}: \text{ trigger reflection} \tag{2.7}$$ **反思的数学表示**: 反思 $r$ 是对近期记忆的高层总结: $$r = \text{Summarize}(\mathcal{M}_{\mathrm{KL}}) \tag{2.8}$$ **反思的内容**: - 当前状态的解释 - 相关的高层模式 - 未来行为的建议 **反思存储**: 反思结果作为新的记忆存储: $$\mathcal{M} \leftarrow \mathcal{M} \cup \{r\} \tag{2.9}$$ ### 2.7 规划(Planning) **规划的层级**: 1. **高层目标**:Agent 想要实现什么 2. **行动序列**:具体要做什么 3. **时间安排**:什么时候做 **数学表示**: 给定高层目标 $G$,生成行动序列: $$\text{plan} = \text{Plan}(G, \mathcal{M}, s_t) = (a_1, a_2, \ldots, a_K) \tag{2.10}$$ 其中每个 $a_k$ 是具体的行动。 --- ## 三、MemGPT:层级记忆管理 ### 3.1 核心思想 **MemGPT**(Packer et al., 2023)的核心是:将**不同层级的记忆**显式化,通过**记忆管理机制**在层级之间移动信息。 **关键创新**: 1. **上下文层级**:将 LLM 上下文视为"寄存器" 2. **主存层级**:作为持久化存储 3. **存储系统层级**:作为外部存储 4. **智能检索**:根据需要动态加载/卸载 ### 3.2 层级记忆架构 **三层架构**: ``` ┌────────────────────────────────────────────────────┐ │ LLM Context Window (Register) │ │ - 当前对话上下文 │ │ - 最近的记忆片段 │ │ - 当前任务相关的检索结果 │ │ [容量限制:4K-128K tokens] │ └────────────────────────────────────────────────────┘ ↑↓ ┌────────────────────────────────────────────────────┐ │ Working Memory (RAM) │ │ - 中期记忆 │ │ - 重要但非紧急的信息 │ │ - Agent 的当前状态摘要 │ │ [容量:约 50-100 个记忆单元] │ └────────────────────────────────────────────────────┘ ↑↓ ┌────────────────────────────────────────────────────┐ │ Archive Storage (Disk) │ │ - 长期记忆 │ │ - 历史对话摘要 │ │ - 事实和知识 │ │ [容量:几乎无限] │ └────────────────────────────────────────────────────┘ ``` ### 3.3 记忆管理操作 **MemGPT 支持的操作**: | 操作 | 说明 | 从 → 到 | |------|------|--------| | **RECALL** | 从存档中检索并加载到工作记忆 | Archive → Working | | **EMIT** | 将工作记忆写入存档 | Working → Archive | | **RETAIN** | 将上下文片段保留在工作记忆 | Context → Working | | **BURY** | 将工作记忆放入存档 | Working → Archive | **Algorithm: Memory Management** ``` while agent running: # 评估当前上下文状态 context_utility = evaluate_context(current_messages) # 如果上下文太满,溢出到工作记忆 if context_overflow(): emit_to_working_memory(least_recent_messages()) # 如果工作记忆太满,溢出到存档 if working_memory_overflow(): emit_to_archive(least_important_memories()) # 如果需要检索,从存档加载 if need_to_recall(): recalled = recall_from_archive(query) load_to_working_memory(recalled) ``` ### 3.4 智能检索策略 **检索决策**: 当处理查询时,MemGPT 决定是否需要从存档检索: $$\text{need\_recall} = \text{MLP}(\text{query\_embedding}, \text{context\_embedding}) \tag{3.1}$$ **检索排序**: $$\text{score}(m, q) = \beta_1 \cdot \text{relevance}(m, q) + \beta_2 \cdot \text{recency}(m) + \beta_3 \cdot \text{importance}(m) \tag{3.2}$$ ### 3.5 MemGPT vs Generative Agents | 维度 | Generative Agents | MemGPT | |------|------------------|--------| | **记忆表示** | 自然语言叙事 | 结构化记忆单元 | | **检索方式** | 基于重要性和相关性的检索 | 动态层级管理 | | **反思机制** | 定期总结 | 可选的反思触发 | | **架构层级** | 2层(记忆流+检索) | 3层(上下文+工作+存档) | --- ## 四、Agent 系统的核心算法 ### 4.1 Agent-Environment 交互 **定义(Agent 循环)**: $$\text{AgentLoop}: \quad s_0 \xrightarrow{a_0} s_1 \xrightarrow{a_1} s_2 \xrightarrow{a_2} \cdots \tag{4.1}$$ 其中 $s_t$ 是状态,$a_t$ 是行动。 **行动生成**: $$a_t = \pi_\theta(a | \text{context}, \text{memory}, \text{goals}) \tag{4.2}$$ ### 4.2 观察过滤 **问题**:不是所有观察都值得记忆。 **解决方案**:使用重要性评分过滤: $$\text{importance}(o) = \text{MLP}(\text{embed}(o)) \tag{4.3}$$ 只保留高于阈值的观察: $$\text{if } \text{importance}(o) > \tau: \mathcal{M} \leftarrow \mathcal{M} \cup \{o\} \tag{4.4}$$ ### 4.3 记忆压缩 **问题**:记忆流会无限增长。 **解决方案**:定期压缩记忆。 **压缩策略**: 1. **摘要压缩**:将多个记忆合并为一个高层摘要 2. **重要性过滤**:只保留最重要的记忆 3. **时间窗口**:只保留最近 $N$ 个记忆 **数学表示**: $$\mathcal{M}_{\mathrm{KL}} = \text{Compress}(\mathcal{M}) = \text{Summarize}(\mathcal{M}_{\mathrm{KL}}) \cup \mathcal{M}_{\mathrm{KL}} \tag{4.5}$$ ### 4.4 目标一致性 **问题**:Agent 的行为应该与高层目标一致。 **定义(目标)**: $$G = (g_1, g_2, \ldots, g_m) \tag{4.6}$$ 其中每个 $g_i$ 是一个子目标。 **目标跟踪**: $$a_t \in G \quad \text{if } \text{is\_relevant}(a_t, G) \tag{4.7}$$ **重新规划**: 当目标无法完成时,重新规划: $$\text{plan} = \text{Replan}(G, \mathcal{M}, s_t) \quad \text{if } \text{goal\_failed}(G) \tag{4.8}$$ --- ## 五、训练过程与问题 ### 5.1 记忆系统的训练 **记忆编码器训练**: 使用对比学习训练记忆编码器: $$\mathcal{L} = -\log \frac{\exp(\text{sim}(m^+, q))}{\exp(\text{sim}(m^+, q)) + \sum \exp(\text{sim}(m^-, q))} \tag{5.1}$$ **重要性评分器训练**: 使用人类标注的重要性数据训练: $$\mathcal{L}_{\mathrm{KL}} = \sum_{(o, \text{label})} \text{BCE}(\text{MLP}(\text{embed}(o)), \text{label}) \tag{5.2}$$ ### 5.2 训练中的常见问题 **问题 1:遗忘早期重要信息** **表现**:Agent 记住了最近的,忘记了重要的早期信息。 **解决方案**: 1. 重要性评分应该考虑信息的长期价值 2. 使用定期检查点保存重要记忆 **问题 2:记忆过度膨胀** **表现**:记忆流变得很大,检索变慢。 **解决方案**: 1. 设置记忆上限 2. 使用记忆压缩 3. 分层存储 **问题 3:检索质量差** **表现**:检索到的记忆不相关。 **解决方案**: 1. 改进检索模型 2. 使用更丰富的查询表示 3. 多样性检索(避免返回相似的多个记忆) ### 5.3 对话一致性问题 **问题**:Agent 在不同轮次中表现不一致。 **原因**: 1. 记忆没有被正确检索 2. 记忆被错误更新 3. 检索时忽略了关键信息 **解决方案**: 1. 确保检索包含所有相关的历史 2. 使用一致性约束 3. 定期验证记忆的正确性 --- ## 六、实际应用中的挑战 ### 6.1 记忆与上下文的边界 **问题**:如何决定信息该存在记忆里还是上下文里? **原则**: - **上下文**:当前对话直接相关的信息 - **工作记忆**:Agent 的当前状态和目标 - **存档**:历史信息和知识 ### 6.2 实时更新 vs 批量更新 **实时更新**:每个观察立即存储 **批量更新**:定期总结和压缩 **混合策略**:重要信息实时存储,不重要的批量处理。 ### 6.3 安全性与隐私 **问题**:记忆可能包含敏感信息。 **解决方案**: 1. 记忆加密 2. 访问控制 3. 定期清理 --- ## 七、数学公式速查 ### 7.1 记忆表示 **记忆**: $$m = (t, \text{content}, \text{importance}) \tag{7.1}$$ **记忆流**: $$\mathcal{M} = (m_1, m_2, \ldots, m_n) \quad \text{s.t.} \quad t_1 \leq \cdots \leq t_n \tag{7.2}$$ ### 7.2 检索公式 **检索评分**: $$\text{score}(m, s) = \alpha_1 \cdot \text{recency}(m) + \alpha_2 \cdot \text{relevance}(m, s) + \alpha_3 \cdot \text{importance}(m) \tag{7.3}$$ ### 7.3 记忆管理 **RECALL 操作**: $$\text{recalled} = \text{Retrieve}(\mathcal{M}_{\mathrm{KL}}, q, k) \tag{7.4}$$ **EMIT 操作**: $$\mathcal{M}_{\mathrm{KL}} \leftarrow \mathcal{M}_{\mathrm{KL}} \cup \{m\} \tag{7.5}$$ --- ## 八、总结 **Generative Agents vs MemGPT**: | 方面 | Generative Agents | MemGPT | |------|------------------|--------| | **核心创新** | 观察-反思-检索-规划循环 | 层级记忆管理系统 | | **记忆表示** | 自然语言叙事 | 结构化层级 | | **检索方式** | 重要性加权的动态检索 | 智能层级管理 | | **适用场景** | 长时间一致性的 Agent | 突破上下文限制 | **核心洞察**: > 记忆是 Agent 系统的基础设施。Generative Agents 强调如何动态管理记忆流,MemGPT 强调如何在有限的上下文和无限的记忆之间做层级管理。两者都指向同一个问题:**如何让模型在长期交互中保持一致性和知识**。 **关键挑战**: 1. 信息的压缩与摘要 2. 检索的相关性排序 3. 记忆与当前上下文的融合 4. 长时间一致性 --- **延伸阅读**: 1. Park et al., "Generative Agents: Interactive Simulacra of Human Behavior" (UIST 2022) 2. Packer et al., "MemGPT: Towards LLMs as Operating Systems" (2023) 3. Shinn et al., "Reflexion: Language Agents with Verbal Reinforcement Learning" (NeurIPS 2023) 4. Liu et al., "Let Me Tell You a Story: Long-Term Memory for Agent Applications" (2023) 5. Zhong et al., "Memory Sandbox: Unified Memory Platform for LLM Applications" (2023)