跳到主要内容

用户记忆的四种存储格式

四种格式按什么维度递进?​

  • 维度: 同一条用户信息可用的粒度与结构复杂度;
  • 顺序: Simple Notes → Enhanced Notes → JSON Cards → Advanced JSON Cards,代表渐进式的记忆表示;
  • 说明: 与 文档分块 遇到的是同源问题——表示粒度越粗或越长,越难精确表达单一含义;

Simple Notes 的取舍是什么?​

  • 形态: 每条记忆是一个最小的、不可再分的事实(“用户邮箱:john@example.com”);
  • 优势: 开销极低,支持 O(1) 操作(耗时固定、不随数据量增长的操作);
  • 代价: 信息关联性完全丢失——“在 TechCorp 担任高级工程师,负责推荐系统开发”被分解为三个独立事实,同一份工作的内在联系被割裂;
  • 后果: 需要综合多条信息才能回答的查询,系统要重新拼凑碎片;

Enhanced Notes 的取舍是什么?​

  • 形态: 每条记忆保存为包含完整上下文的段落(“用户在 TechCorp 担任高级软件工程师,专注于机器学习已有三年,目前领导一个推荐系统项目,团队 5 人”);
  • 优势: 保留信息的叙事结构,语义完整而丰富;
  • 代价: 存储冗余(相同信息在多个段落中重复)、更新复杂(属性变化需重写多个段落);

JSON Cards 的取舍是什么?​

  • 形态: 三层嵌套结构(类别→子类别→键值对),如 personal.contact.email、work.position.title;
  • 优势: 支持部分更新——修改 work.position.title 不影响 work.company.name; 结构可预测、可扩展;
  • 代价: 刚性结构假设信息可以清晰分类;
  • 反例: “周末用 Python 开发个人项目”同时涉及时间偏好、技术偏好与活动类型,强制归入单一类别会丢失多维性;

Advanced JSON Cards 增加了什么?​

  • 新增字段: 信息来源的叙事背景(backstory)、主体身份(person)、与用户的关系(relationship)和时间戳;
  • 核心思想: 同一条信息在不同场景下可能有完全不同的含义——“张医生”可能是用户自己的牙科医生,也可能是用户父亲的心脏科医生;
  • 解决的消歧问题: 用户可能有多个身份(为自己、为父母、为子女),简单的键值存储无法准确区分;
  • 机制: backstory 提供信息的获取上下文(“为什么”存储这条信息),person 与 relationship 建立清晰的实体模型(“为谁”存储);
  • 例子: 用户说“帮我安排家人的年度体检”时,系统通过 relationship 识别所有家庭成员,通过 backstory 了解健康历史;
  • 代价: 生成和维护成本较高;

实验中四种格式表现如何?​

  • Simple Notes: 以最低的生成成本通过第一层“基础回忆”的多数用例,但在需要综合多条信息、区分同名实体的第二、三层用例上频繁失分;
  • Advanced JSON Cards: 在涉及消歧和跨会话关联的用例上表现最好,代价是每次会话结束后的记忆维护调用明显更贵、更慢;
  • 项目形态: user-memory 在统一接口下实现四种模式,每种都提供记忆生成(分析会话、写入记忆)与记忆检索(按当前问题取回相关记忆)的完整实现,运行时通过配置切换;
  • 中间两种: 表现位于两个极端之间,体现简单性与表达力的连续取舍;

实践中如何选择?​

  • 关键且少量: 用户偏好、关键人物关系用 Advanced JSON Cards,以保证可检索性;
  • 大量且非关键: 对话事实用 Simple Notes,以降低成本;
  • 生产常态: 混合模式——同一 Agent 内不同类别的信息走不同路径;