记忆的隐私与可控
用户可见、可编辑、可删除,以及多用户隔离。
一句话理解:记忆的信任来自控制权:用户能看见 Agent 记住了什么、能改、能删、能暂停,系统保证记忆不会串到别的用户、团队或项目,并且删除时说清楚到底删掉了哪些东西。
一个企业用户在使用内部 Agent 时顺口提到“下周三我要去医院复查,那天的会帮我往后挪”。两个月后,他的同事在共享项目里让 Agent 安排团队会议,Agent 回复:“建议避开周三,张经理那天通常要去医院。”
这里没有任何安全漏洞被利用,却是一次严重的隐私事故:一条个人信息被写进了记忆,又在错误的作用域被召回。记忆功能越智能,这类问题越隐蔽。用户一旦发现“它记住了我不想让它记的东西”,对整个产品的信任会迅速崩塌。
这一课讲记忆可控的五项能力、多用户与多租户的隔离,以及删除语义这个最容易出错的细节。
五项控制能力
| 能力 | 用户能做什么 | 设计要点 |
|---|---|---|
| 可见 | 查看 Agent 记住了关于我的哪些内容 | 用人能读懂的语言展示,而非向量或内部 ID |
| 可编辑 | 修改不准确的记忆 | 修改后在下一次对话中生效 |
| 可删除 | 删除单条或全部记忆 | 说清删除范围,是否可恢复 |
| 可暂停 | 临时不使用、不产生记忆 | 区分“暂停使用”与“永久清除” |
| 可追溯 | 知道某个回答用了哪条记忆 | 在回答旁标注引用的记忆或来源 |
把这些能力放到记忆的完整链路上,就能看出每个环节该设什么控制点:
看看主流产品是怎么做的(依据各自官方帮助文档,产品功能可能随时调整):
Claude 应用:用户可以在设置的 Memory 页面查看 Claude 记住的内容(按主题列出),逐条编辑或删除;也可以在对话里直接说要记住、修改或忘记什么。每个项目有独立的记忆空间,互不混用。提供两种关闭方式:暂停(保留已有记忆,但不使用也不新增)和重置(永久删除全部记忆,包括项目记忆,且无法撤销)。无痕对话不会使用已有记忆,也不会被写入记忆。个人版默认开启记忆,团队版和企业版默认关闭,由组织管理员决定是否开启。
ChatGPT:记忆分为用户要求保存的记忆和从过往对话中获得的信息两种来源,用户可以在设置中分别关闭;临时对话不使用也不创建记忆;回答下方可以查看本次个性化用到了哪些来源。
Claude Code:自动记忆是本机上的纯 Markdown 文件,用户可以通过 /memory 命令浏览、打开和编辑,也可以在设置中或用环境变量关闭自动记忆。
这些设计有一个共同点:记忆对用户是透明的、可操作的,而不是藏在系统深处的黑箱。
删除语义:最容易让用户误解的地方
用户点击“删除这段对话”时,通常以为 Agent 从此不会再知道这段对话里的任何内容。事实往往并非如此。Claude 和 ChatGPT 的帮助文档都明确说明:删除对话不会自动删除从这段对话中产生的记忆,记忆需要单独删除。
一段对话可能派生出多种数据,删除时要逐一说清:
最后一行值得展开。以 Claude Managed Agents 的记忆存储为例(Beta):每次修改记忆都会生成一个不可变的版本,用于审计和回滚;删除记忆本身不会删除这些版本,版本通常保留 30 天。为了应对泄露的密钥、个人信息或用户删除请求,平台提供了“脱敏”操作,可以清除历史版本中的内容,同时保留“谁在什么时候做了什么”的审计记录。
产品设计建议:在删除确认弹窗中明确列出会删除和不会删除的内容;提供“删除对话并删除相关记忆”的联动选项;对合规要求保留的数据说明保留期限和用途。
隔离:记忆不能串门
多用户产品里,记忆隔离是底线。常见的隔离层级:
| 层级 | 隔离什么 | 典型错误 |
|---|---|---|
| 租户 | 不同企业客户之间 | A 公司的业务约定出现在 B 公司的会话中 |
| 用户 | 同一企业的不同员工之间 | 个人偏好或私事被同事的会话召回 |
| 项目 / 空间 | 同一用户的不同工作之间 | 项目甲的口径影响项目乙的分析 |
| 会话类型 | 无痕会话与普通会话 | 无痕会话中的内容被写入记忆 |
以一个企业租户为例,隔离的层级与召回时的过滤条件如下:
实现上的几个要点:
- 作用域写进数据,而不只是写进提示词:每条记忆存储时带上租户、用户、项目标识;召回时在查询条件里强制过滤,而不是让模型“注意不要用别人的记忆”。
- 工具层做路径与权限校验:Claude API 记忆工具是客户端工具,文档说明
/memories只是一个路径前缀,由你的处理函数映射到真实存储(例如每个用户一个目录),因此认证与访问控制都要在处理函数里实现;同时必须防范路径穿越,例如/memories/../../secrets.env这样的路径,要把路径解析为规范形式后确认仍在记忆目录内。 - 共享记忆要显式设计:团队共享的约定(例如“周报模板”)与个人偏好分开存放、分开授权。Claude Managed Agents 允许一个会话挂载多个记忆存储,并分别设置只读或读写,适合把共享参考资料以只读方式挂载,个人记忆单独读写。
- 管理员与用户的权限分离:企业管理员能否查看员工的记忆?这是需要在产品和合规层面提前回答的问题,并告知用户。
敏感信息:不该记的别记
| 信息类型 | 建议策略 |
|---|---|
| 密码、API Key、访问令牌 | 禁止写入记忆。记忆会在之后的会话中被反复读取,写入一次就可能反复暴露。凭据应交给专门的凭据管理系统(例如 Claude Managed Agents 的凭据保管库 Vault) |
| 健康、宗教、政治倾向等敏感个人信息 | 默认不写入;确需记住时明确征得同意 |
| 身份证号、银行卡号等 | 禁止写入;如业务确需,使用专门的加密存储而非记忆 |
| 第三方的个人信息(客户、同事) | 谨慎写入,遵循最小必要原则 |
仅靠模型自觉并不可靠。Claude API 记忆工具的文档提到,模型通常会拒绝把敏感信息写入记忆,但如果需要更强的保证,应该在写入前由程序校验并剔除敏感数据。这与 程序校验优先 的原则一致:可以在写入记忆的工具或 Hook 中做模式匹配和分类检测。
用户可控的交互设计
把控制能力落到界面上,有几个值得借鉴的模式:
- 写入可见:Agent 记住新内容时给出轻量提示(如“已记住:周报按大区汇总”),并提供撤销入口。
- 使用可见:回答用到记忆时,标注来源,用户点击即可查看或修改那条记忆。
- 设置集中:一个页面列出全部记忆,支持搜索、编辑、删除,以及暂停与重置。
- 无痕模式:提供不读取也不写入记忆的会话模式,适合处理敏感事务。
- 导出:允许用户导出自己的记忆,满足可携带性要求。
常见误区
- “隐私政策里写清楚就够了。” 用户不会读隐私政策,控制能力必须在产品界面里触手可及。
- “删除对话就等于删除了一切。” 记忆、产物、日志、历史版本可能都还在。说不清楚就是误导。
- “在提示词里要求模型不要泄露别人的记忆。” 隔离必须在数据和工具层强制执行,模型不应该有机会读到不属于当前用户的记忆。
产品经理检查清单
- 用户在哪里查看、编辑、删除记忆?操作几步能完成?
- 暂停记忆与清除记忆是否区分?清除是否可撤销?是否有二次确认?
- 删除对话时,关联记忆、产物、日志分别如何处理?界面上是否说明?
- 记忆按租户、用户、项目隔离的标识存在哪里?召回时是否强制过滤?
- 是否有无痕或临时会话模式?
- 写入前是否有敏感信息检测?检测到时是拒绝写入、脱敏还是询问用户?
- 企业管理员对员工记忆有哪些权限?员工是否知情?
- 记忆及其历史版本保留多久?如何响应用户的删除请求?
练习
为「个人助理 Agent」的企业版设计“记忆设置页”与删除规则,用时约 45 分钟:
- 画出设置页的线框:记忆列表、编辑、删除、暂停、重置、导出入口。
- 写出“删除某个会话”确认弹窗的文案,明确列出会删除与不会删除的内容。
- 设计三层隔离(企业、员工、项目)的数据字段与召回过滤规则。
- 列出至少 5 类禁止写入记忆的信息,并说明由哪一层(提示词、工具校验、Hook、存储策略)来保证。
延伸阅读
- Use Claude’s chat search and memory to build on previous context:Claude 应用中记忆的查看、编辑、暂停与重置。
- Memory tool:路径穿越防护、敏感信息与文件大小、过期清理等安全注意事项。
- Using agent memory:记忆版本、审计与脱敏。
- How Claude remembers your project:本地自动记忆的查看、编辑与关闭。
下一步
Agent 现在能记住做到哪、知道用户是谁,也让用户掌握了控制权。下一个模块「执行环境」回答另一个问题:Agent 在哪里干活,从 三种执行方式 讲起。