用户记忆(User Memory)是 Agent 针对特定用户、跨会话保存和调用的持久化个性化信息。它帮助 Agent 记住稳定偏好、重要经历、长期约束和已经确认的用户事实,从而在后续交互中保持连续性。
用户记忆不是完整对话记录,也不是把每句话永久保存。可靠的记忆系统需要选择值得长期保留的信息,记录来源和时间,并允许用户查看、更正或删除。
与相邻概念的区别
| 概念 | 主要作用 |
|---|---|
| 上下文 | 当前这一轮模型实际看到的输入,容量有限且随调用变化 |
| 任务状态 | 保存当前任务的目标、步骤、结果和等待事项 |
| 运行轨迹 | 按时间记录消息、决策和工具结果,用于追溯一次运行 |
| 用户记忆 | 跨会话保存与特定用户有关、未来可能复用的信息 |
| 共享知识库 | 保存面向一组用户或整个组织的公共、业务或领域知识 |
用户记忆可以从运行轨迹中提取,但提取后的记忆是可更新的知识表达,不能代替原始证据。共享知识库中的政策、产品说明等内容也不应复制成某个用户的私人记忆。
写入原则
一条候选记忆进入长期存储前,应满足三个基本要求:
- 选择性:只保存未来可能有用的信息,不保存一次性的工具结果和无关闲聊;
- 抽象化:区分单次事件与稳定规律,不能从一次选择武断推断长期偏好;
- 结构化:至少记录内容、用户范围、来源、时间和适用条件,便于检索和修订。
按内容可以区分:记录具体事件的情景记忆、从多次交互中提炼出的语义记忆,以及与重复行为方式有关的程序记忆。这种内容分类与存储格式是两个独立维度。
常见存储格式
| 格式 | 特点 | 适用情况 |
|---|---|---|
| 原子笔记 | 一条记录保存一个最小事实,简单但容易失去关系 | 少量明确、独立的信息 |
| 情境化笔记 | 用完整段落保留人物、时间和背景,语义完整但更新成本较高 | 需要理解上下文的经历 |
| 结构化卡片 | 使用类别、字段和元数据保存信息,便于局部更新和过滤 | 字段相对稳定的用户画像 |
| 带来源的高级卡片 | 同时记录人物关系、背景、来源和时间 | 多人物、多事件及冲突消歧 |
没有一种格式适合所有信息。实践中可以让少量关键事实使用结构化卡片,让大量低价值历史按需检索,避免把整个对话历史长期装入上下文。
记忆生命周期
- 从新对话或工具结果中发现候选信息;
- 判断信息是否属于当前用户、是否值得长期保存;
- 去除凭据、无关日志、未经证实的推测和不必要的敏感内容;
- 检索相关旧记忆,判断应新增、合并、更新、失效还是不处理;
- 保存内容、来源、时间、适用范围和必要的置信信息;
- 在新任务中按相关性、时效性和重要性检索候选记忆;
- 将少量相关记忆装入上下文,并保留“这是历史记忆而非当前事实”的来源标记;
- 在事实变化、用户要求或保留期限到期时更正、失效或删除。
新信息与旧信息冲突时,不能只保留“最近的一条”就认为问题已经解决。系统需要检查时间、对象、地点和适用条件:两条信息可能分别在不同场景成立;证据不足时应保留冲突或请求用户确认。
能力与评估
用户记忆可以按三个递进层次评估:
- 基础回忆:准确保存并取回用户明确提供的单项事实;
- 多会话检索:从不同时间和对象的多段记录中找全相关信息,并处理时序与冲突;
- 主动服务:把分散在长期历史中的约束联系起来,在合适时机提醒风险或补充选项。
评测不能只看最终回答是否流畅,还要分别检查写入是否正确、相关记忆是否被召回、过期记忆是否被过滤、冲突是否被处理,以及无关或其他用户的信息是否被误用。
双层记忆架构
长期交互常同时需要“全局概览”和“精确细节”。一种实用方式是:
- 将少量稳定、关键的用户事实整理为结构化概览;
- 将完整对话或事件记录保留在受控的原始证据层,需要时通过检索取回细节;
- 使用 检索增强生成(RAG) 的方法改进历史检索,但仍由用户记忆规则决定什么能写入、如何更新和何时删除。
结构化概览不能脱离来源无限改写,检索结果也不能未经核验就自动升级为长期记忆。
隐私与安全
- 每条记忆必须绑定正确的用户或租户范围,检索时先执行访问控制;
- 密码、访问令牌和私钥不应作为普通用户记忆保存;
- 对确有必要保存的敏感信息采用最小收集、加密、访问审计和到期清理;
- 用户应能知道系统记住了什么,并能更正、导出或删除自己的记忆;
- 从外部内容提取的文本应作为数据处理,不能直接当成可执行指令;
- 删除服务层记忆时,还需按产品的数据政策处理原始记录、索引和备份中的对应数据。