RAG 知识库里的个人信息被要求删除,怎么做到彻底删除?
面试怎么回答
一份文档进入 RAG 后会派生出原始文件的多个版本、解析文本、切片、向量、全文索引、各种缓存、对话日志、评测和微调数据集以及备份,所以删除的前提是血缘可追踪:切片记录来源文档和版本,向量记录切片 ID,缓存元数据记录涉及的文档,数据集记录样本来源。流程是通过用户标识和实体识别定位涉及的文档和日志,按血缘级联删除或脱敏后重新处理,清理缓存,处理对话日志,备份按周期过期或恢复时重删,删除后用该用户标识检索验证,并留下审计记录。如果信息已经进入微调数据,模型层面很难精确删除,只能在下次训练时剔除并在输出层过滤,所以最好在训练前就清洗个人信息。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
用户依法提出删除个人信息的请求,业务数据库里删了,数仓里也删了。但这个用户的信息还存在于:知识库的文档切片里、向量索引里、缓存的回答里、对话日志里、甚至微调数据里。面试官问这题,想看你是否意识到 AI 系统让「删除」变得更复杂,以及怎么设计才能删干净。
个人信息可能存在的地方
一份文档进入 RAG 后,会派生出很多副本:
- 原始文件(对象存储,可能有多个版本);
- 解析后的文本;
- 切片(Chunk);
- 向量(向量索引中,可能有多个副本、多个版本的索引);
- 全文检索索引;
- 缓存:检索结果缓存、回答缓存;
- 对话日志:用户问过的问题和模型给出的回答中可能引用了这些信息;
- 评测集、微调数据集中可能用到了相关内容;
- 备份。
设计的关键:血缘可追踪
能删干净的前提是知道一条数据派生出了哪些东西:
- 每个切片记录来源文档 ID 和版本;
- 每条向量记录对应的切片 ID;
- 缓存的 key 或元数据中记录涉及的文档 ID;
- 数据集记录样本来源。
这样,从「某个用户的信息出现在哪些文档中」出发,能找到所有的派生数据。
删除流程
- 定位:通过用户标识在文档、对话日志等数据中搜索(结构化字段 + 文本中的姓名、手机号等实体识别),找出涉及的文档和记录;
- 级联删除或脱敏:根据血缘删除原始文件及其所有版本、文本、切片、向量、全文索引条目;能脱敏的文档(比如只是在一份会议纪要中提到了用户)可以脱敏后重新处理;
- 清理缓存:失效相关的缓存;
- 处理日志:对话日志中的相关内容删除或脱敏;
- 备份:按备份的保留周期自然过期,或者在恢复时重新执行删除;
- 验证:删除后用该用户的标识检索,确认无法再检索到;
- 记录:删除请求、执行范围、完成时间形成审计记录。
模型里的信息怎么办
如果个人信息进入了微调的训练数据,模型可能已经「记住」了。从模型中删除特定信息目前没有成熟可靠的通用方法,通常需要:
- 从训练数据中删除后,在下一次训练时生效;
- 在输出层增加过滤,防止模型输出这些信息;
- 最好的办法是预防:训练数据在进入训练前就做个人信息的清洗。