长期记忆数据建模:Profile、Preference、Facts、Episodes 的边界

记忆做不好,往往不是向量库选错,而是数据口径没定。本文给出四类记忆的可落地边界、字段示例、版本与冲突处理规则。

AI 摘要

这篇文章适合快速了解什么

记忆做不好,往往不是向量库选错,而是数据口径没定。本文给出四类记忆的可落地边界、字段示例、版本与冲突处理规则。

这是一篇偏行业洞察方向的内容,适合想快速理解“长期记忆数据建模:Profile、Preference、Facts、Episodes 的边界”核心脉络的读者。

文章先解释“TL;DR”,帮助你快速进入主题。

随后会展开“1. 四类记忆的定义(建议口径)”,方便直接定位关键方法或判断标准。

核心看点

  • TL;DR
  • 1. 四类记忆的定义(建议口径)
  • 1.1 Profile(身份与稳定背景)
  • 1.2 Preference(偏好与默认设置)

做长期记忆最常见的返工点之一,是“所有东西都叫记忆”:对话摘要、用户偏好、事实、任务状态、外部文档……混在一起,最后谁也不敢用。

这篇文章只解决一件事:把长期记忆拆成可治理的数据结构。

TL;DR

  • Profile 是“你是谁”,Preference 是“你喜欢怎样”,Facts 是“可验证的事实”,Episodes 是“发生过什么”。四者写入频率、权限边界与生命周期不同。
  • 数据模型不追求一次完美:先定义最小字段、冲突策略与审计字段,再逐步扩展。
  • 安全上,把记忆当成可写攻击面:写入要白名单,读取要隔离与可回滚[2]。

1. 四类记忆的定义(建议口径)

1.1 Profile(身份与稳定背景)

典型字段(示例):

  • userId / orgId
  • role(岗位/角色)
  • domain(行业/业务领域)
  • locale(语言/时区)

特点:

  • 低频变更
  • 权限敏感(往往与账号/组织绑定)
  • 一旦错了,影响范围大

1.2 Preference(偏好与默认设置)

典型字段:

  • outputStyle(输出格式:表格/要点/步骤)
  • verbosity(详细程度)
  • toolDefaults(默认工具与参数)

特点:

  • 中频变更
  • 最适合做“显式触发”(用户说“以后都这样”才写入)
  • 允许覆盖与回滚(保留历史版本)

1.3 Facts(可验证事实)

典型字段:

  • projectName、repo、技术栈约束
  • 已确认的业务规则
  • 外部依赖版本(但要注意时间敏感性)

特点:

  • 需要证据指针:来源链接、文档ID、审批记录
  • 必须有“过期策略”:事实会变

1.4 Episodes(事件与过程痕迹)

典型字段:

  • eventType(例如“发布”“支付”“故障”“用户反馈”)
  • happenedAt(时间)
  • payload(结构化摘要)
  • traceId / docId / url(可追溯)

特点:

  • 高频写入
  • 最容易膨胀,需要 TTL 与归档
  • 经常是评测与审计的输入

2. 建模建议:从“可治理”开始

2.1 统一元字段(强烈建议)

不管哪种记忆,建议都带上:

  • id:唯一ID
  • scope:user/org/project/session
  • source:来源(user_explicit / agent_infer / tool_output / import)
  • createdAt、updatedAt
  • version:版本号
  • confidence:置信度(可选,但很实用)
  • evidence:证据指针(链接/文档ID/traceId)

这些字段不是“为了好看”,而是为了后续做到:审计、回滚、调试、评测。

2.2 冲突策略:先写下来,别靠“模型自己懂”

常见冲突:

  • Preference:用户今天说“输出要短”,明天说“要详细”
  • Facts:外部依赖版本变更

建议先约定三条规则:

  1. Preference 以最新显式确认为准(保留历史版本,允许回滚)。
  2. Facts 必须带证据与时间范围,不带证据的 Facts 降级为“假设/建议”。
  3. Episodes 不做覆盖,只做追加(但做 TTL/归档)。

2.3 写入白名单与“指令隔离”

记忆是可写的,意味着它能被“注入”。OWASP 的 Agent Memory Guard 直接把记忆投毒列为核心风险之一,并给出运行时防护与回滚思路[2]。工程上,建议做到:

  • tool_output 写入必须经过结构化解析与字段白名单
  • 不把记忆文本当指令使用(把它当数据)

3. 一个可复制的最小表结构(示例)

你不一定要按这个建表,但建议至少能表达以下概念:

  • memory_item:存储结构化字段(type、scope、key、value、version、evidence)
  • memory_event:追加式事件(episode),用于审计/评测
  • memory_index:用于检索(向量/倒排/标签)

如果你使用第三方框架的 memory 组件,也建议把“长期记忆”的存储落到可控的数据层,而不是仅仅保存在对话历史里。很多框架也强调短期与长期分开:短期更像线程内历史,长期用于跨线程的用户级数据[1]。

近30天动态(节选)

  • 供应链与分发成为 MCP 生态的焦点:mpak 提出了 MCP server registry 的打包与扫描思路(2026-02-16),对“记忆/工具/skill 作为依赖”治理具有参考意义。更多见:近30天动态总览

参考与延伸阅读

站点信息

关于这篇内容的来源与维护方式

这篇文章由 ToolsHub 公开发布,站点持续维护 AI 工具、在线文档、技术教程和效率实践内容。

我们优先保证公开页面可直接阅读、可分享、可被搜索引擎与 AI 正确理解。