核心摘要

AI 隐私工程本质上是数据血缘问题。一次用户请求可能变成 Prompt、输出、Trace、工具结果、Embedding、向量记录、缓存、滥用样本、评测用例、客服工单和训练样本,并跨越多个处理者。

隐私政策无法控制这张图。系统必须具备:

  • 每项处理活动对应的目的和法律依据决策;
  • 控制者、处理者与 Subprocessor 边界;
  • 对象级血缘与保留规则;
  • 遍历全部相关系统的权利履约工作流;
  • 能说明搜索、修改、保留或适用例外情况的证据。

Embedding 和训练模型都不能自动视为匿名。GDPR 与 CCPA 也不是可互换的“同意制度”。应建设一套可表达各司法辖区决策、同时共享可审计数据清单的控制平面。

本文提供工程模式,不构成法律意见。产品涉及的适用范围、角色、法律依据、告知、合同条款、例外和响应时限,应由专业法律顾问确认。

核心要点

  • 目的是隐私架构的主键。 “改进 AI”过于宽泛,无法约束收集、保留和复用。
  • 血缘必须覆盖派生和复制数据。 删除源记录不会自动删除向量、缓存、Trace、导出和训练快照。
  • 匿名性是需要证明的结果,不是可以随意贴的标签。 哈希标识符或转换成 Embedding 都不能自动证明匿名。
  • 权利履约必须产出证据。 只有绿色流程状态、没有逐系统结果,无法支撑审计或用户解释。
  • 供应商设置不能替代合同与架构。 No-training、Zero-retention、Region、Subprocessor 和跨境机制必须一致。

从处理矩阵开始,而不只是列数据类型

数据清单说明“有什么”,处理矩阵说明每项操作“为什么被允许,以及受到什么约束”。

活动 目的 数据 角色/边界 关键决策字段
生成回答 服务交付 Prompt、文件、输出 控制者到模型处理者 必要性、保留、跨境
滥用检测 安全 元数据、选定内容 控制者/内部处理者 比例性、访问、复核
产品分析 分析 事件元数据 控制者/分析处理者 最小化、退出规则
质量评测 评测 精选交互样本 独立内部目的 来源、脱敏、保留
模型微调 训练 已批准数据集 控制者或联合边界 法律依据、权利、模型风险
客服排查 支持 工单、Trace、选定内容 受限员工/供应商 个案范围、时限

每一行都应记录:

text
purpose_id
purpose_owner
data_categories
data_subjects
special_or_sensitive_categories
controller_processor_role
legal_basis_or_CCPA_business_purpose
necessity_assessment
notice_version
retention_rule
rights_supported
recipients_and_subprocessors
transfer_mechanism
security_controls
DPIA_or_risk_assessment_reference

不能为整个产品指定一个法律依据。为了回答用户而使用 Prompt,与把该 Prompt 复用于分析、评测或训练,是不同目的,必须分别判断。

GDPR 与 CCPA:不同法律模型,共享工程原语

GDPR 工程问题

CNIL 的 AI 建议强调:AI 系统开发应明确目的,判断控制者/处理者角色,选择法律依据,最小化数据,确定保留期,并保障数据主体权利。EDPB Opinion 28/2024 进一步讨论了 AI 模型匿名性、合法利益,以及违法处理个人数据可能产生的后果。

工程系统应呈现以下问题,不能擅自替法律团队作结论:

  • 目的是否具体并已告知?
  • 每个数据字段对该目的是否必要?
  • 哪个实体决定处理目的与手段?
  • 处理者是否为自身目的复用数据?
  • 是否预期或推断特殊类别数据?
  • 在适用情况下,个人能否反对、撤回同意,或行使访问、删除和更正?
  • 自动化决策是否产生法律或类似重大影响?
  • 下游副本能否执行限制或删除?

CCPA/CPRA 工程问题

加州总检察长的 CCPA 官方说明列出的权利包括:

  • 知情;
  • 删除,但存在例外;
  • 更正不准确个人信息;
  • 退出出售或共享;
  • 限制敏感个人信息的特定使用和披露;
  • 行使权利不受歧视。

CPRA 是对 CCPA 的修订,不是另一部替代法律。适用范围、定义、例外、身份验证和必要告知都需要法律分析。

工程影响十分具体:Opt-out 信号必须传播到已由正式策略判定为出售或共享的每条路径。CalPrivacy 的执法案例也表明,在退出流程中制造不必要摩擦会形成监管风险。不能仅因为另一类权利请求需要身份验证,就对所有 Opt-out 强制相同验证;应执行该请求类型获批的验证规则。

建立 AI 数据血缘图

有效血缘图应沿对象身份和派生关系展开:

flowchart TD A["用户/账户"] --> B["Prompt 或上传文件"] B --> C["模型请求"] C --> D["生成输出"] C --> E["供应商日志"] C --> F["Trace 与工具结果"] B --> G["Embedding"] G --> H["向量索引"] D --> I["缓存"] B --> J["评测候选"] J --> K["评测数据集快照"] J --> L["训练数据集快照"] L --> M["模型版本"] F --> N["客服或安全案例"]

每个节点都应暴露:

  • 稳定对象 ID;
  • 仍被维护的主体或租户关联;
  • 来源 ID 与派生类型;
  • 目的与策略版本;
  • 物理存储和区域;
  • 处理者与 Subprocessor;
  • 创建和过期时间;
  • Legal Hold 或例外状态;
  • 删除、更正与限制能力;
  • 下游对象 ID。

为什么 User ID 不够

数据副本经常丢失原始 user_id:

  • 向量只保留 Chunk 元数据;
  • Trace 使用 Request ID;
  • 导出使用 Dataset Sample ID;
  • 供应商返回自己的请求 ID;
  • 模型快照只引用 Dataset Version。

因此需要隐私关联服务或血缘索引来解析这些标识,同时避免把原始个人数据复制到每个系统。

Embedding 与模型不能自动视为匿名

三种常见捷径都不可靠:

  1. “已经删除姓名。” 准标识符和内容仍可能定位个人。
  2. “它已经变成 Embedding。” 数据转换不会自动消除可关联性、成员推断风险或敏感语义。
  3. “信息已经进入模型权重。” EDPB 指出,模型匿名性必须个案评估:使用合理可能采用的手段,能否提取或通过查询获得个人数据。

评估至少应记录:

  • 模型与训练流水线;
  • 数据类型和唯一性;
  • 记忆与提取测试;
  • 成员推断攻击风险;
  • 模型反演攻击风险;
  • 访问和查询控制;
  • 可获得的辅助信息;
  • 威胁主体与合理可能手段;
  • 剩余风险和重新评估触发器。

对于能够重新连接身份的一方,假名化数据仍属于个人数据。应把假名化视为控制措施,而不是自动退出适用范围。

不必收集一切的日志与观测

默认遥测通常可以避开原始内容:

观测需求 更低内容暴露的信号
延迟 路由、模型快照、时间戳
成本 Usage Counter 与费率版本
稳定性 类型化错误和重试次数
检索质量 文档 ID 和排名,不存全文
安全 分类器类别和策略版本
调试 Request ID 与短期、审批后采样

如果确实需要采集内容:

  • 只针对窄范围目的和时间窗口开启;
  • 在适用时提供可见或合同告知;
  • 可行时在持久化前脱敏;
  • 使用字段级权限和可审计 Break-glass;
  • 阻止自动流入分析或训练;
  • 到期后关闭采集并验证删除。

正则脱敏无法理解上下文、自由格式密钥、图片或多字段重识别组合。

把权利履约做成证据生产工作流

请求阶段

text
received
-> 司法辖区与请求类型分类
-> 选择身份/授权验证规则
-> 判断范围与例外
-> 规划血缘搜索
-> 执行各系统与处理者动作
-> 对账失败
-> 审批答复和证据包
-> 完成或进入申诉

工作流必须支持部分结果。某些数据可能删除,某些更正,某些因成文例外保留,某些则在争议审查期间受到限制。

Go 示例:带证据的删除扇出

示例要求每个存储返回结构化证据。生产实现还应持久化工作流状态、安全重试、加密证据包,并避免在日志中记录个人内容。

go
package main

import (
	"context"
	"errors"
	"fmt"
	"time"
)

type DeleteResult struct {
	Store       string
	ObjectIDs   []string
	Action      string
	Exception   string
	CompletedAt time.Time
}

type Store interface {
	Name() string
	DeleteBySubject(ctx context.Context, subjectRef string) (DeleteResult, error)
}

type DeletionWorkflow struct {
	PolicyVersion string
	Stores        []Store
}

type Evidence struct {
	RequestID     string
	PolicyVersion string
	Results       []DeleteResult
	Failures      map[string]string
}

func (w DeletionWorkflow) Run(ctx context.Context, requestID, subjectRef string) (Evidence, error) {
	if requestID == "" || subjectRef == "" {
		return Evidence{}, errors.New("request and subject references are required")
	}
	evidence := Evidence{
		RequestID: requestID, PolicyVersion: w.PolicyVersion,
		Failures: make(map[string]string),
	}
	for _, store := range w.Stores {
		result, err := store.DeleteBySubject(ctx, subjectRef)
		if err != nil {
			evidence.Failures[store.Name()] = err.Error()
			continue
		}
		evidence.Results = append(evidence.Results, result)
	}
	if len(evidence.Failures) > 0 {
		return evidence, fmt.Errorf("%d stores require retry or review", len(evidence.Failures))
	}
	return evidence, nil
}

func main() {
	workflow := DeletionWorkflow{PolicyVersion: "privacy-2026-10"}
	evidence, err := workflow.Run(context.Background(), "dsar-42", "subject-token-7")
	fmt.Println(evidence.PolicyVersion, err)
}

空的 Stores 不能代表生产删除成功;Inventory 校验应拒绝缺少预期存储的工作流。

删除、更正与模型产物

删除传播

每个源对象都应定义以下位置的行为:

位置 可能动作
主记录 删除、限制或按例外保留
对象存储 删除原对象和派生物
向量索引 删除 Chunk 并重建受影响索引状态
缓存 清理 Key 和失效副本
Trace/日志 按批准规则删除、脱敏或隔离
分析系统 删除个人级事件或采用批准的聚合处理
评测数据集 移除样本并发布新数据集版本
待执行训练任务 执行前阻止或重建
备份 按成文周期到期,并阻止普通恢复
外部处理者 发送请求并保留完成证据

从训练数据中删除样本,并不会在数学上移除它对既有模型的影响。是否需要重训、Unlearning、输出控制、限制或其他响应,取决于法律和技术评估。必须维护 Dataset 到 Model 的血缘,才能作出该决策。

更正传播

不能静默覆盖不可变证据。应把旧值标为已取代,在权威存储中应用更正,必要时重建派生产物,并阻止缓存或旧数据集快照把过时值重新写回系统。

控制者、处理者与 Subprocessor 边界

针对每个外部模型、向量数据库、可观测平台、客服工具和评测供应商,记录:

  • 服务与法律实体;
  • 各处理目的下的角色;
  • 接收的数据类别;
  • 是否用于训练或产品改进;
  • 保留与删除能力;
  • 存储和处理位置;
  • Subprocessor 及变更通知;
  • 国际传输机制;
  • 安全与事件条款;
  • 权利请求协助能力;
  • 配置证据与合同版本。

“不训练”开关只处理一个目的。它不能证明 Zero Retention、无人审查、区域内处理、支持删除,也不能证明不存在 Subprocessor。

发布门禁

新 AI 功能

  1. 每个处理目的的矩阵都已批准。
  2. 数据流与血缘图和实现一致。
  3. 原始内容日志默认策略已评审。
  4. 供应商角色、保留、训练、区域和 Subprocessor 已记录。
  5. 权利工作流覆盖主存储与派生存储。
  6. 删除和更正测试覆盖缓存、向量、导出与处理者失败。
  7. 保留任务能够产出可验证证据。
  8. 访问控制和 Break-glass 使用可审计。
  9. 隐私告知与产品内控制符合实际行为。
  10. 风险评估有负责人和复审触发器。

新评测或训练数据集

  1. 每个样本都有来源与目的。
  2. 服务交付数据默认不复用。
  3. 法律依据与告知分析已记录。
  4. 敏感和特殊类别处理明确。
  5. 去重和脱敏不能替代权利支持。
  6. 数据集快照不可变,并关联模型/评测版本。
  7. 删除能够生成新数据集版本。
  8. 能识别受影响的下游模型。

常见失败模式

说法或设计 为什么失败 更好的控制
“不训练,所以隐私已解决” 日志、供应商、Trace 和权利仍存在 治理每个处理目的
一个同意覆盖全部 AI 用途 目的和法律依据不同 分开服务、安全、分析、评测、训练
Embedding 已匿名 转换可能保留可关联性 保留血缘并评估风险
删除账户等于删除全部数据 派生和外部副本仍存在 按图执行删除
请求入队后即把 DSAR 标为完成 处理者可能失败或超时 要求逐系统完成证据
供应商 Region 等于数据驻留 支持、日志和 Subprocessor 可能不同 记录完整处理边界
备份删除等于立即覆盖 不可变备份可能延迟过期 隔离、定期到期、阻止普通恢复

常见问题

Prompt 是否必须保存?

不必须。很多稳定性和成本信号都能在不保存原文的情况下记录。只有针对明确目的,并具备最小化、访问、保留和权利处理时才保存内容。

同意是否总是最安全的法律依据?

不是。同意必须满足法律要求且可撤回;如果处理并非真正可选,同意可能不合适。应由法律顾问按目的选择依据。

删除向量是否会删除源文件?

不会。源文件、Chunk、Embedding、索引副本、缓存和导出是不同对象。必须关联它们,并定义删除顺序与验证。

删除训练数据集后,能否宣布模型匿名?

不能。删除数据集不等于证明模型匿名。应执行 EDPB 所述的个案评估,并测试提取和可识别风险。

权利请求需要多少身份验证?

应执行该请求类型和风险对应的获批规则。过度验证会收集更多数据并阻碍权利,验证不足则可能向错误的人披露信息。

一手资料

关联学习路径

总结

删除姓名、关闭训练或发布隐私政策,都不足以实现 AI 隐私安全。系统需要约束每个目的的处理矩阵、覆盖派生与外部数据的血缘图,以及能够返回证据而不是乐观状态的权利履约工作流。

这些控制应在生产数据扩散到向量、Trace、评测集和模型版本之前完成。等删除请求或监管调查到来后再补血缘,成本更高、可靠性更低,也更难证明。