跳转到内容

边缘隐私过滤

边缘隐私过滤:Claude-Mem 的具体实现

学习目标

本章聚焦 Claude-Mem 如何在数据管道入口点实现隐私过滤。建议先阅读前置知识,下文直接聚焦具体落地方案。

前置知识

本章涉及边缘隐私过滤的通用原理,建议先阅读:

项目实践

标签剥离工具

src/utils/tag-stripping.ts 提供了共享的标签剥离工具函数。剥离逻辑在 Hook 层执行,确保敏感内容永远不会到达 Worker Service 或数据库。

实现位置

标签剥离发生在以下 Hook 中:

Hook触发时机剥离对象
PostToolUse工具使用后工具输出中的 <private> 内容
UserPromptSubmit用户提交 prompt 前用户消息中的 <private> 内容

隐私范围

<private> 标签包裹的内容:

  • 不会被记录为观察(observation)
  • 不会被写入会话摘要(summary)
  • 不会被注入到新会话的上下文中
  • 不会出现在时间线中

用户级隐私控制

隐私过滤是用户主动的、手动的控制机制。AI Agent 无法判断哪些内容敏感,因此依赖用户在消息中显式标记。这与自动化的 PII 检测不同:

  • 优势:用户有完全控制权,不会误判
  • 劣势:需要用户自觉标记,遗漏的内容会被正常存储

问题与规避

嵌套标签处理

问题:如果 <private> 标签嵌套在其他 XML 标签中(如 <observation><private>...</private></observation>),简单的字符串替换可能留下残留的 XML 标签。

规避:剥离工具使用正则匹配 <private>...<\/private> 模式,包括标签之间的所有内容,确保完整移除。

设计取舍

为什么不在 Worker 层也做剥离?

Worker 层也有自己的内容处理逻辑,但隐私过滤只在 Hook 层执行:

  • 原因:Hook 层是最早的数据入口点,在此剥离可以最小化敏感数据的传输路径。如果等到 Worker 层再剥离,数据已经通过 HTTP 传输到了 Worker 进程,增加了暴露面。
  • 防御纵深:Hook 层的剥离是主要防线,Worker 层可以作为额外的防御纵深(如果实现),但不应依赖。

参考来源