Generative Agents 与 MemGPT:跨轮次记忆与 Agent 系统
一、记忆问题的形式化
1.1 单轮对话的局限
标准 LLM 的设置:
给定当前输入
问题:当对话轮次很多时:
- 上下文长度限制:LLM 有最大上下文长度(如 4K/8K/32K tokens)
- 距离衰减:早期的重要信息在上下文中被稀释
- 计算成本:长上下文带来二次方 attention 成本
1.2 记忆的层级
定义(记忆层级):
| 层级 | 描述 | 容量 | 访问频率 |
|---|---|---|---|
| 上下文记忆 | 当前上下文中的信息 | ~4K-32K tokens | 最高 |
| 短期记忆 | 最近几轮对话 | ~10-50 轮 | 高 |
| 长期记忆 | 整个对话历史 | 无限制 | 低 |
| 情节记忆 | 重要事件的高层摘要 | 中等 | 中 |
1.3 记忆管理的核心问题
问题 1:信息该存在哪里?
- 不是所有信息都值得存在记忆中
- 重要的、经常使用的信息应该优先保留
问题 2:信息如何被检索?
当需要时,如何从记忆中快速找到相关信息?
问题 3:信息如何更新?
记忆应该随着时间推移而更新,而不是无限累积。
1.4 记忆的两大核心分类
隐式记忆(Implicit Memory):
- 融入模型参数的长期知识
- 通过预训练获得,难以直接查询
- 如:语言能力、通用世界知识
显式外部记忆(Explicit Memory):
- 文本/向量持久化存储的交互记忆
- Agent 体系全部依托显式外部记忆搭建
- 如:对话历史、关键事件、用户偏好
| 类型 | 存储形式 | 访问方式 | 容量 |
|---|---|---|---|
| 隐式记忆 | 模型参数 | 无法直接查询 | 有限但较大 |
| 显式记忆 | 外部向量库/文本 | 检索召回 | 可扩展 |
二、Generative Agents:模拟人类行为的 Agent
2.1 核心思想
Generative Agents(Park et al., 2023)的核心是:构建一个能够跨时间保持一致性的虚拟 Agent 社会。
经典实验背景:虚拟小镇多人社会仿真
原版论文设计了 Sandbox 虚拟小镇仿真环境:
- 25 个智能体模拟人类日常社交行为
- 公园、咖啡馆、商店、学校等生活场景
- 支持多智能体之间的自然对话、社交关系建立、协同活动
关键创新:
- 观察-反思-检索-规划的循环框架
- 动态记忆流:随时间累积和更新信息
- 行为生成:基于记忆和当前状态生成行为
2.2 Generative Agents 的架构
核心组件:
┌─────────────────────────────────────────────┐
│ Generative Agent │
├─────────────────────────────────────────────┤
│ 感知模块 (Perception) │
│ → 从环境中接收事件 │
├─────────────────────────────────────────────┤
│ 记忆流 (Memory Stream) │
│ → 存储所有观察和反思 │
│ → 支持增量和检索 │
├─────────────────────────────────────────────┤
│ 反思模块 (Reflection) │
│ → 定期总结记忆为高层见解 │
│ → 指导未来行为 │
├─────────────────────────────────────────────┤
│ 规划模块 (Planning) │
│ → 将高层目标分解为具体行动 │
│ → 生成行为序列 │
└─────────────────────────────────────────────┘
2.3 记忆流的数学表示
定义(记忆):
记忆
其中:
:时间戳 :记忆内容 :重要程度评分
定义(记忆流):
记忆流
2.4 观察(Observation)
观察的定义:
Agent 从环境接收观察
示例:
[观察到] Isabella Rodriguez 正在收银台前排...
观察的处理:
观察是原始环境输入,记忆是结构化编码存储后的信息。每个观察都被编码并存储到记忆流中:
观察→记忆的流转映射:
原始环境事件 → 感知模块 → 原始观察 o
↓
编码器处理 → 结构化记忆 m = (t, content, importance)
↓
存储至记忆流 M
2.5 检索(Retrieval)
检索函数:
给定当前状态
其中
检索的相关性评分:
其中:
:新近度,越新越高 :与当前状态的相关性 :记忆的重要性评分
检索权重实战调参:
| 权重 | 推荐值 | 说明 |
|---|---|---|
| 0.3 | 近期记忆权重 | |
| 0.5 | 语义相关度权重 | |
| 0.2 | 重要性评分权重 |
记忆重要性场景化打分规则:
| 场景 | 评分策略 |
|---|---|
| 日常对话 | 评分偏低 |
| 人格设定、核心目标 | 强制拉高权重 |
| 关键事件、情绪转折点 | 拉高权重 |
2.6 反思(Reflection)
反思的触发条件:
当累积的观察数量超过阈值时,触发反思:
其中
双重反思触发机制:
| 触发方式 | 说明 | 适用场景 |
|---|---|---|
| 数量触发 | 累积观察超过阈值 | 日常对话、实时交互 |
| 时间周期触发 | 固定时长自动复盘总结 | 长时间离线 Agent |
反思的数学表示:
反思
反思的内容:
- 当前状态的解释
- 相关的高层模式
- 未来行为的建议
反思存储:
反思结果作为新的记忆存储:
2.7 规划(Planning)
规划的层级:
- 高层目标:Agent 想要实现什么
- 行动序列:具体要做什么
- 时间安排:什么时候做
数学表示:
给定高层目标
其中每个
三、MemGPT:层级记忆管理
3.1 核心思想
MemGPT(Packer et al., 2023)的核心是:将不同层级的记忆显式化,通过记忆管理机制在层级之间移动信息。
关键创新:
- 上下文层级:将 LLM 上下文视为”寄存器”
- 主存层级:作为持久化存储
- 存储系统层级:作为外部存储
- 智能检索:根据需要动态加载/卸载
3.2 层级记忆架构
三层架构:
┌────────────────────────────────────────────────────┐
│ 上下文窗口内存 (LLM Context Window) │
│ - 当前对话上下文 │
│ - 最近的记忆片段 │
│ - 当前任务相关的检索结果 │
│ [容量限制:4K-128K tokens] │
└────────────────────────────────────────────────────┘
↑↓
┌────────────────────────────────────────────────────┐
│ 核心工作内存 (Working Memory) │
│ - 中期记忆 │
│ - 重要但非紧急的信息 │
│ - Agent 的当前状态摘要 │
│ [容量:约 50-100 个记忆单元] │
└────────────────────────────────────────────────────┘
↑↓
┌────────────────────────────────────────────────────┐
│ 归档长期内存 (Archive Storage) │
│ - 长期记忆 │
│ - 历史对话摘要 │
│ - 事实和知识 │
│ [容量:几乎无限] │
└────────────────────────────────────────────────────┘
核心机制:虚拟分页与自动上下文溢出
MemGPT 突破 LLM 上下文长度上限的核心原理:
- 上下文塞满自动挤出:当上下文窗口占用达 80% 阈值时,自动将旧内容挤出存入工作内存
- 工作内存溢出归档:当工作内存也满时,将低优先级记忆下沉至归档长期内存
- 按需回溯检索:需要历史信息时,从归档层召回至工作内存
溢出阈值调参:通用模型上下文占用达 80% 容量时自动触发内存挤出,为行业通用阈值。
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 决定是否需要从存档检索:
检索排序:
3.5 MemGPT vs Generative Agents
| 维度 | Generative Agents | MemGPT |
|---|---|---|
| 记忆表示 | 自然语言叙事 | 结构化记忆单元 |
| 检索方式 | 基于重要性和相关性的检索 | 动态层级管理 |
| 反思机制 | 定期总结 | 可选的反思触发 |
| 架构层级 | 2层(记忆流+检索) | 3层(上下文+工作+存档) |
3.6 多 Agent 记忆机制
Generative Agents 支持群体记忆共享 + 个体记忆隔离:
| 机制 | 说明 | 适用场景 |
|---|---|---|
| 群体记忆共享 | 公共事件(如公共讨论)同步至所有 Agent | 虚拟社群仿真 |
| 个体记忆隔离 | 每个 Agent 维护独立记忆流 | 隐私敏感场景 |
| 混合记忆 | 共享记忆 + 私有记忆叠加 | 复杂社交场景 |
记忆共享的同步策略:
公共事件发生 → 广播至所有相关 Agent → 各 Agent 更新私有记忆流
3.7 主流同类记忆 Agent 对比
| 模型 | 核心创新 | 记忆管理方式 | 适用场景 |
|---|---|---|---|
| Generative Agents | 观察-反思-检索-规划循环 | 记忆流 + 重要性检索 | 长期一致性 Agent |
| MemGPT | 虚拟分页 + 上下文溢出 | 三层层级管理 | 突破上下文限制 |
| Reflexion | 语言强化反思 | 自我评估 + 口头反馈 | 语义级自我改进 |
| AutoGPT | 长期记忆存储 | 向量数据库 + 摘要 | 自主任务执行 |
四、Agent 系统的核心算法
4.1 Agent-Environment 交互
定义(Agent 循环):
其中
行动生成:
4.2 观察过滤
问题:不是所有观察都值得记忆。
解决方案:使用重要性评分过滤:
只保留高于阈值的观察:
4.3 记忆压缩
问题:记忆流会无限增长。
解决方案:定期压缩记忆。
压缩策略:
- 摘要压缩:将多个记忆合并为一个高层摘要
- 重要性过滤:只保留最重要的记忆
- 时间窗口:只保留最近
个记忆
数学表示:
其中
4.4 目标一致性
问题:Agent 的行为应该与高层目标一致。
定义(目标):
其中每个
目标跟踪:
重新规划:
当目标无法完成时,重新规划:
五、训练过程与问题
5.1 记忆系统的训练
记忆编码器训练:
使用对比学习训练记忆编码器:
重要性评分器训练:
使用人类标注的重要性数据训练:
5.2 训练中的常见问题
问题 1:遗忘早期重要信息
表现:Agent 记住了最近的,忘记了重要的早期信息。
解决方案:
- 重要性评分应该考虑信息的长期价值
- 使用定期检查点保存重要记忆
问题 2:记忆过度膨胀
表现:记忆流变得很大,检索变慢。
解决方案:
- 设置记忆上限
- 使用记忆压缩
- 分层存储
问题 3:检索质量差
表现:检索到的记忆不相关。
解决方案:
- 改进检索模型
- 使用更丰富的查询表示
- 多样性检索(避免返回相似的多个记忆)
5.3 对话一致性问题
问题:Agent 在不同轮次中表现不一致。
原因:
- 记忆没有被正确检索
- 记忆被错误更新
- 检索时忽略了关键信息
解决方案:
- 确保检索包含所有相关的历史
- 使用一致性约束
- 定期验证记忆的正确性
六、实际应用中的挑战
6.1 记忆与上下文的边界
问题:如何决定信息该存在记忆里还是上下文里?
原则:
- 上下文:当前对话直接相关的信息
- 工作记忆:Agent 的当前状态和目标
- 存档:历史信息和知识
6.2 实时更新 vs 批量更新
实时更新:每个观察立即存储
批量更新:定期总结和压缩
混合策略:重要信息实时存储,不重要的批量处理。
6.3 安全性与隐私
问题:记忆可能包含敏感信息。
解决方案:
- 记忆加密
- 访问控制
- 定期清理
- 隐私脱敏:自动识别对话内手机号、证件号等隐私内容,加密存储/自动脱敏
6.4 向量记忆库选型
| 场景 | 推荐选型 | 说明 |
|---|---|---|
| 轻量测试 | Chroma、FAISS | 部署简单,适合快速验证 |
| 线上生产 | Pinecone、Milvus | 分布式支持,高可用 |
| 本地部署 | Qdrant、Weaviate | 开源可控,数据安全 |
6.5 记忆摘要通用 Prompt 模板
请将以下记忆内容压缩为高层摘要,保留核心事件、情绪和意图:
原始记忆:
{原始记忆内容}
要求:
- 提取关键人物和事件
- 保留情绪色彩和意图
- 删除冗余细节
- 摘要长度不超过原文的 20%
6.6 冷热记忆调度策略
| 策略 | 说明 | 实现方式 |
|---|---|---|
| 高频常驻 | 调用频繁的记忆常驻工作内存 | LRU 缓存 |
| 低频下沉 | 历史记忆下沉归档 | 自动降级 |
| 按需召回 | 需要时从归档回溯至工作内存 | 动态加载 |
七、数学公式速查
7.1 记忆表示
记忆:
记忆流:
7.2 检索公式
检索评分:
7.3 记忆管理
RECALL 操作:
EMIT 操作:
八、总结
Generative Agents vs MemGPT:
| 方面 | Generative Agents | MemGPT |
|---|---|---|
| 核心创新 | 观察-反思-检索-规划循环 | 层级记忆管理系统 |
| 记忆表示 | 自然语言叙事 | 结构化层级 |
| 检索方式 | 重要性加权的动态检索 | 智能层级管理 |
| 适用场景 | 长时间一致性的 Agent | 突破上下文限制 |
核心洞察:
记忆是 Agent 系统的基础设施。Generative Agents 强调如何动态管理记忆流,MemGPT 强调如何在有限的上下文和无限的记忆之间做层级管理。两者都指向同一个问题:如何让模型在长期交互中保持一致性和知识。
关键挑战:
- 信息的压缩与摘要
- 检索的相关性排序
- 记忆与当前上下文的融合
- 长时间一致性
延伸阅读:
- Park et al., “Generative Agents: Interactive Simulacra of Human Behavior” (UIST 2022)
- Packer et al., “MemGPT: Towards LLMs as Operating Systems” (2023)
- Shinn et al., “Reflexion: Language Agents with Verbal Reinforcement Learning” (NeurIPS 2023)
- Liu et al., “Let Me Tell You a Story: Long-Term Memory for Agent Applications” (2023)
- Zhong et al., “Memory Sandbox: Unified Memory Platform for LLM Applications” (2023)