Files
2026-05-16 17:16:51 +08:00

489 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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,<k}, \text{history}) \tag{1.1}$$
**问题**:当对话轮次很多时:
1. **上下文长度限制**LLM 有最大上下文长度(如 4K/8K/32K tokens
2. **距离衰减**:早期的重要信息在上下文中被稀释
3. **计算成本**:长上下文带来二次方 attention 成本
### 1.2 记忆的层级
**定义(记忆层级)**
| 层级 | 描述 | 容量 | 访问频率 |
|------|------|------|---------|
| **上下文记忆** | 当前上下文中的信息 | ~4K-32K tokens | 最高 |
| **短期记忆** | 最近几轮对话 | ~10-50 轮 | 高 |
| **长期记忆** | 整个对话历史 | 无限制 | 低 |
| **情节记忆** | 重要事件的高层摘要 | 中等 | 中 |
### 1.3 记忆管理的核心问题
**问题 1信息该存在哪里**
- 不是所有信息都值得存在记忆中
- 重要的、经常使用的信息应该优先保留
**问题 2信息如何被检索**
当需要时,如何从记忆中快速找到相关信息?
**问题 3信息如何更新**
记忆应该随着时间推移而更新,而不是无限累积。
---
## 二、Generative Agents模拟人类行为的 Agent
### 2.1 核心思想
**Generative Agents**Park et al., 2023的核心是构建一个能够**跨时间保持一致性**的虚拟 Agent 社会。
**关键创新**
1. **观察-反思-检索-规划**的循环框架
2. **动态记忆流**:随时间累积和更新信息
3. **行为生成**:基于记忆和当前状态生成行为
### 2.2 Generative Agents 的架构
**核心组件**
```
┌─────────────────────────────────────────────┐
│ Generative Agent │
├─────────────────────────────────────────────┤
│ 感知模块 (Perception) │
│ → 从环境中接收事件 │
├─────────────────────────────────────────────┤
│ 记忆流 (Memory Stream) │
│ → 存储所有观察和反思 │
│ → 支持增量和检索 │
├─────────────────────────────────────────────┤
│ 反思模块 (Reflection) │
│ → 定期总结记忆为高层见解 │
│ → 指导未来行为 │
├─────────────────────────────────────────────┤
│ 规划模块 (Planning) │
│ → 将高层目标分解为具体行动 │
│ → 生成行为序列 │
└─────────────────────────────────────────────┘
```
### 2.3 记忆流的数学表示
**定义(记忆)**
记忆 $m$ 是一个三元组:
$$m = (t, \text{content}, \text{importance}) \tag{2.1}$$
其中:
- $t$:时间戳
- $\text{content}$:记忆内容
- $\text{importance}$:重要程度评分
**定义(记忆流)**
记忆流 $\mathcal{M}$ 是按时间排序的记忆序列:
$$\mathcal{M} = (m_1, m_2, \ldots, m_n) \quad \text{s.t.} \quad t_1 \leq t_2 \leq \cdots \leq t_n \tag{2.2}$$
### 2.4 观察Observation
**观察的定义**
Agent 从环境接收观察 $o$
$$o = (\text{agent}, \text{action}, \text{objects}, \text{location}) \tag{2.3}$$
**示例**
```
[观察到] Isabella Rodriguez 正在收银台前排...
```
**观察的处理**
每个观察都被编码并存储到记忆流中:
$$\mathcal{M} \leftarrow \mathcal{M} \cup \{\text{encode}(o)\} \tag{2.4}$$
### 2.5 检索Retrieval
**检索函数**
给定当前状态 $s_t$,检索相关的记忆:
$$\text{retrieved} = \text{Retrieve}(\mathcal{M}, s_t, k) \tag{2.5}$$
其中 $\text{retrieved}$ 是 top-$k$ 个最相关的记忆。
**检索的相关性评分**
$$\text{score}(m, s) = \alpha_1 \cdot \text{recency}(m) + \alpha_2 \cdot \text{relevance}(m, s) + \alpha_3 \cdot \text{importance}(m) \tag{2.6}$$
其中:
- $\text{recency}(m)$:新近度,越新越高
- $\text{relevance}(m, s)$:与当前状态的相关性
- $\text{importance}(m)$:记忆的重要性评分
### 2.6 反思Reflection
**反思的触发条件**
当累积的观察数量超过阈值时,触发反思:
$$\text{if } |\mathcal{M}_{\mathrm{KL}} > \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)