跳转至

来源与删除

OpenClaw 会为通过自动会话摄取和历史会话回填暂存的记忆记录来源会话血缘。openclaw memory forget 利用该血缘移除受跟踪的条目及相关工件,并将所选会话记录为已遗忘,以便后续摄取不会恢复它们。

两种控制服务于不同目的:准入策略 将匹配的会话排除在未来的梦境摄取和会话回填之外;遗忘 从选定的会话中移除可识别的工件。两者都不是对代理所见或所写内容的全盘擦除。

这些控制属于内置的 memory-core 插件。其他记忆插件可能提供不同的命令和删除行为。

Warning

memory forget 除非传入 --dry-run,否则会立即删除。它不会删除原始会话记录、所有自由格式记忆编辑,或它所扫描的记忆存储之外的副本。应用前请审阅报告和删除边界。

预览并遗忘一个会话

使用显式代理,以便你知道正在更改哪个存储。列出其会话以找到完整的会话键或 ID。会话 ID 精确且区分大小写;缩写不会选中更长的 ID:

openclaw sessions --agent <agent-id> --limit all --json
openclaw memory forget --agent <agent-id> --session <id-or-key> --dry-run --json

检查 sessionResolutions 以确认预期会话;entryKeys 和 mixedLineageEntryKeys 用于整条目删除;artifacts 用于受影响的存储。分别审阅 curatedWrites 和 untargetableEntryKeys;两者都不是剩余数据的完整清单。

当选择正确时,不带 --dry-run 重复同一命令:

openclaw memory forget --agent <agent-id> --session <id-or-key> --json

没有额外的确认提示或 --apply 标志。预览是根据当前状态计算出来的,不会保存为删除计划。在进行敏感清理期间,请暂停代理直接编辑和外部写入操作;它们不共享记忆插件的变更锁。之后再次运行预览,检查是否仍有可归属的工件。

如果删除失败,请解决所报告的存储或文件系统错误,重新运行同一命令,然后带 --dry-run 重试一次。失败可能留下部分清理结果。清除过程会保留语料库和来源证据,直到依赖工件被清理完毕;不要为了消除错误而手动删除这些证据。

完整标志、选择器语义和报告字段见 memory forget。

记录了哪些血缘信息

三条记录服务于不同目的:

记录 粒度 写入方 用途
块溯源 索引块 索引时的分类代码 信任门控与召回框架
条目来源 受跟踪条目 会话摄取、回填和整合 查找源自所选会话的条目
整理写入记录 记忆文件 记忆写入观察器 识别清理期间需审查的文件

整理写入查找只读取所请求的物理工作区。另一个工作区记录中的损坏 JSON 不会阻止该查找;所选工作区中活动记录里的损坏 JSON 仍会报告存储错误。

块溯源 描述了来源类别和会话种类。条目来源则相反,在 SQLite 中将条目键与代理及来源会话关联起来。MEMORY.md 中的提升标记将可见条目连接到这些来源行。

当梦境合并或取代受跟踪条目时,协调会将父条目的来源转移给存活条目。它在模型调用周围的代码中运行,包括对共享工作区的参与代理;模型不拥有这些来源行。

文件替换可能在后续报告文件错误之前就已成功。在这种情况下,或当发布不确定时,整合会保留替换条目的来源,以便后续的 memory forget 仍能定位它。它不会自动将不确定的替换重试为追加操作。

被替换条目的来源会一直保留,只要保留的重写原像仍引用其提升标记。只有当活跃条目、保留原像、日记摘录和索引快照不再引用这些来源时,备份轮换才会修剪它们。

新的整合历史摘录会保留替换条目的血缘,包括其合并或取代的父条目。只要这些摘录存在,其来源行就会保留,即使在备份轮换之后也是如此。日记历史没有自动过期;较长的修订历史可能保留不断增长来源集合。

当回填合并来自多个会话的同一声明时,它会保留每个来源会话对应的来源行,而不会把重复声明计作额外证据。会话回填日记行在发布前也会携带与来源行关联的标记。这包括 REM 事实、反思和组合声明,即使显示的引文被缩短或后续的应用步骤失败。遗忘任何贡献会话都会移除整条带标记的行,而不是无关的日记行。较早的未标记回填日记不会追溯获得血缘。

覆盖并非普遍。手写笔记、代理直接编辑以及在血缘跟踪之前暂存的条目可能缺少条目来源。报告的 untargetableEntryKeys 列出的是所选代理存储中没有来源的提升标记,而不是所有未跟踪的文本。此类条目无法仅凭血缘选择,尽管显式会话引用或精确的语料引用仍可能匹配文件清理。

准入:将来源排除在记忆之外

要将 Gmail 钩子会话排除在 梦境摄取和会话回填 之外:

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          memoryPolicy: {
            excludeSessions: {
              hookExternalContentSources: ["gmail"],
            },
          },
        },
      },
    },
  },
}

IMAP 使用精确的钩子来源 email;Gmail 钩子使用 gmail。同时包含这两个值以排除这两个来源。通用 webhook 使用 webhook。

你还可以排除频道/插件标识符(不是房间 ID)或聊天类型。空列表或省略的列表不会添加任何策略排除项。任一列表中的匹配都会排除整个会话;值匹配的是已记录的会话元数据,而不是对话中的词语。

两条路径都会在读取转录之前检查策略。自动摄取还会在其摄取检查点中记录排除原因。删除匹配的规则会使会话有资格在后续扫描中被处理,但仍受其他信任和摄取门控约束。被记录为已遗忘的会话仍会被排除。

策略是前瞻性的:它不会删除现有语料库、暂存候选项或已提升条目。对于现有可归因数据,请使用 memory forget。有关精确匹配规则和排除原因,请参阅 记忆配置。

准入边界

路径 已配置的准入排除
自动梦境摄取 在读取转录之前应用
手动 session-backfill 在预览、REM 和应用模式中应用
原始转录索引 不应用
直接写入和会话钩子 不应用

匹配需要保留的会话元数据;缺失字段不会匹配规则。这两个控制都会遵循已配置的 session.store,包括自定义存储和共享存储,同时保持选择范围限定在所选代理内。较早的保留记录可能只有粗略的 webhook 分类;如果没有原始精确来源,OpenClaw 不会推断 email 或 webhook 用于匹配。请通过完整 ID 显式选择这些会话。

自动梦境会单独跳过保留的归档。若也要将已归档会话排除在回填和转录索引之外,请显式遗忘其完整会话 ID。这些路径会检查已遗忘会话记录,即使原频道、聊天类型或钩子来源元数据已不可用。

如果其工具允许,被排除的会话仍可以编辑 MEMORY.md、USER.md 或其他工作区文件。当需要阻止这些写入时,请限制相关的文件、shell 和外部 harness 能力,并审查已启用的记忆写入钩子。准入策略不是文件系统权限。观察到的写入会被报告以供审查,但不会提供逐条谱系。

删除:清除会话产生的内容

选择器标识的是 会话,而不是关于某个人的单独事实。--participant 选择具有该已记录参与者 ID 的会话;它不会在记忆文本中搜索姓名。--hook-source 选择具有该已记录外部内容来源的会话。两者都需要保留的元数据。显式 ID 和键也可以解析保留的归档。

具有任何已选来源的被跟踪条目会被整体删除,即使它还具有未选来源。这些删除会出现在 mixedLineageEntryKeys 中。清除不会要求模型从合并文本中减去某个人的贡献。幸存的来源以后可能支持新条目,但不保证自动重建。

清理涵盖匹配的已提升条目、会话语料库行、记忆索引块及其全文/向量行、短期状态、摄取去重状态以及梦境重写前像。非空会话选择还会清除所选代理的整个嵌入缓存,包括尚未链接到已发布块的未完成重建的结果。无关的已发布索引条目仍可使用;后续索引可能需要重新生成缓存的嵌入。试运行会报告此删除但不会应用它。

清除还会从扫描的记忆文件和梦境日记中删除包含精确已选语料库片段的整行。命令参考 描述了计数器和选择限制。

已清除的会话保持清除状态

实际清除会在删除其产物之前,在所选代理的 SQLite 数据库中记录每个已选会话为已遗忘。自动摄取、历史会话回填和转录索引(包括 memory index --force)都会检查这些记录。自动摄取会记录原因 forgotten。

记忆插件会将其清除与暂存和文件变更进行协调。如果待处理的梦境叙述的被跟踪来源条目或先前日记上下文在发布前被删除,则会被跳过。这不会追溯识别旧日记条目中未跟踪的改写。带有引用标记的历史整合高亮也缺乏可靠的删除边界。当报告识别出该格式中剩余的高亮时,会在 refusals 中发出警告;请手动审查它们。该警告不是所有未跟踪历史的清单,也不会重建缺失的历史谱系。

索引在发布块或缓存嵌入之前会再次检查,因此在清除前准备好的结果无法恢复已遗忘的会话数据或过时的记忆文件快照。受影响的索引运行会报告其源已更改;重新运行 openclaw memory index --agent <agent-id> 以索引当前数据。

重复清除不会解除该排除。它适用于该代理存储中的那些会话 ID,而不是与同一人或同一钩子来源的未来对话。请在 准入边界 内保留一条准入规则,用于未来匹配的会话。

删除不涵盖的内容

  • 原始转录和归档。 记忆清理会将它们保留在会话存储中。会话删除 是一个独立的生命周期操作,通常保留已删除转录的归档。不要将任一命令视为所有对话副本均已擦除的证明。
  • 未跟踪的旧记忆。 没有来源行意味着无法进行基于血缘的删除。新会话回填会保留来源,但不会追溯性地为候选项提供血缘,也不会重写在旧版本中丢失来源的备份。请单独检查这些内容;先前的清除不会自动修复。
  • 自由格式编辑。 curatedWrites 会报告带有 relativePath 和 observedAt 的已识别写入或写入尝试。仅凭该记录不会删除文件或识别贡献行。受支持的写入/编辑/补丁转录记录会补充最新的文件级观察者记录,但可能包含未成功的尝试。任意 shell 写入和外部编辑未被完全跟踪。
  • 改写和其他副本。 可以移除语料库中的精确引用,但未跟踪的改写、导出、外部备份、其他插件的存储以及独立复制的文件不在本次清理范围内。已报告的精选文件仍可能丢失与已跟踪条目或精确引用匹配的行。
  • 其他代理。 选择和已遗忘会话记录按代理划分。请对每个相关代理重复审查,包括共享工作区的代理;一个代理的报告不能证明每个索引都是干净的。

空预览表示这些选择器和匹配规则未再发现任何产物。它不是证明没有相关信息残留的证书。

端到端清除某人或某个来源

对于参与者,请在每个相关代理中先进行预览:

openclaw memory forget --agent <agent-id> --participant <actor-id> --dry-run --json

在移除 --dry-run 之前,请验证已解析的会话 ID。这会删除源自这些会话中任何内容的已跟踪条目,而不仅仅是该参与者撰写的消息。如果归档中缺少参与者元数据,请添加其显式 --session <id-or-key> 选择器。

对于来源,请使用其记录的 hook 标识符:

openclaw memory forget --agent <agent-id> --hook-source gmail --dry-run --json

应用已审查的选择后,检查保留的文件和未跟踪的记忆,分别处理转录和归档的保留策略,并重新运行预览。如果来自该来源的未来会话也应排除在 Dreaming 摄取和会话回填之外,请添加一条准入规则。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw