增加模态是一次隐私分类事件,而非简单的功能开关
一位产品经理在周二联系了 AI 团队:“客户想在支持代理中粘贴截图。这应该是件小事,对吧?模型已经支持图像了。” 工程主管检查了 SDK,确认视觉端点接受 JPEG 和 PNG,在功能开关(feature flag)后发布了更改,并向 10% 的用户推送。两周后,法务团队转来了一封监管机构的信函,询问为什么用户的银行账单、驾照照片以及包含另一位客户订单 ID 的截图都出现在了该代理符合训练条件的日志中。AI 团队中没人标记这次模态变更(modality change),因为没人认为模态变更 算是一次 变更。批准文本代理的隐私审查从未针对图像变体重新运行——而图像变体最终适用的授权、留存和驻留规则完全不同。
这不是一个关于粗心工程师的故事。这是一个关于大多数团队发布 AI 功能时内置的范畴错误的故事。文本输入是一个已知的、具有稳定威胁模型的细分数据类别:用户输入,用户看到他们输入的内容,工程团队在记录什么和丢弃什么方面有多年的习惯。图像是一个具有不同威胁模型的不同数据类别——它们夹带了用户看不到的元数据,捕捉了用户并非有意分享的周边内容,并以其自身的驻留和合同条款创造了存储和处理足迹。将“现在支持视觉”视为一次 UX 迭代,而它实际上是一个隐私分类事件,这就是团队如何根据监管机构的要求发现他们的 PII 清单将实际暴露程度低估了一个数量级的原因。
图像实际上携带了什么
当用户“只是粘贴一张截图”时,到达你的推理提供商的字节包含至少四个不同的负载,其中只有一个是用户自觉选择发送的。
第一种是可见的图像内容——即他们想要分享的内容。第二种是 EXIF 和嵌入式元数据:具有米级精度的 GPS 坐标、设备序列号、拍摄时间戳、他们使用的照片编辑软件,以及在某些相机应用上的用户云账号标识符。手机在某些分享路径上会剥离其中一些数据,而在其他路径上则不会;从 iOS 上的“文件”应用拖入的图像保留的数据,比通过“照片”选择器分享的同一张图像要多。你的应用程序无法知道用户采取了哪条路径。
第三种是用户没有注意到的相邻内容。错误消息的截图还会捕获浏览器标签栏、书签栏、刚刚弹出的带有双重身份验证(2FA)代码的通知覆盖层,以及角落里无关的 Slack 私聊。纸质发票的照片还会捕获桌上下一份文件的角落。与你自己的产品聊天的截图还会捕获该聊天中的先前对话——在消费级消息应用上,这还包括其他联系人的标识符和消息预览。最近关于多模态推理的研究表明,前沿模型仅通过对街道布局、标牌 和建筑线索的推理,就能将用户上传的图像定位在几公里范围内——这意味着即使是“无害”的图像,其去匿名化的方式也是用户无法预料的。
第四种是用户“只是为了测试”而上传的内容。每一个发布图像输入的团队在第一个月内都会发现,有些用户会粘贴他们的驾照、护照、医疗账单或身份验证应用的截图,看看 AI 会用它做什么。这种“测试上传”模式是普遍存在的,你无法通过提示词(prompting)来规避它。
这些负载中的每一个都具有不同的敏感性、不同的留存影响和不同的授权要求。你的功能的文本版本只管辖了其中的一个。
授权和留存规则并不相同
大多数 AI 团队从他们为文本编写的授权流程中继承了数据处理规则。该授权通常会说:“我们处理你的消息以提供和改进服务。消息可能会保留 30 天,用于滥用和质量审查。” 用户将“消息”理解为“我输入的东西”。当你在此流程下添加图像输入时,这种心理模型在三个地方失效了。
首先,数据类别本身不同。根据 GDPR,包含可识别面孔的图像属于生物识别数据,可能属于需要明确、单独授权的特殊类别。身份证件的图像在不同的司法管辖区触发不同的规则——有些要求如果你存储它们,就必须通知监管机构。由 AI 系统处理的儿童照片已在 GDPR 和美国州级法律下引发了罚款。涵盖“你输入的文本消息”的授权几乎肯定不涵盖“你决定上传的任何照片或截图,包括从未同意你的服务的第三方的照片”。
其次,留存的影响规模不同。30 天的文本消息留存几乎不产生费用,且很少重新浮现。在同样的用户规模下,30 天的图像留存可能意味着数 PB 的存储空间、在不同司法管辖区的 CSAM 和非法内容法规下的特定图像扫描义务,以及如果存储被泄露,其受影响范围(blast radius)要大得多。过去一年中发生的几起重大事件涉及 AI 图像服务在配置错误的存储桶中保留了用户上传的内容;留存窗口与他们的文本日志相同,但泄露的后果却严重了几个数量级。
第三,推理提供商的合同可能因模态而异。许多提供商提供文本专用的零留存模式,这些模式不扩展到图像端点,或者将图像流量路由到具有不同子处理器的不同区域。你与提供商签署的 DPA 与端点范围密切相关。在你的调用图中添加一个新的端点是一个合同事件,而不只是一个代码更改。不检查这一点的团队会在采购审计期间发现,他们的图像流量是在他们对企业客户的数据驻留承诺中明确排除的区域处理的。
图像预处理层真正需要做的事情
一旦你接受了图像输入是一个不同的数据类别,工程层面的应对就不再是“添加验证”。而是在用户上传和推理调用之间建立一个预处理层,该层承担着在文本路径上完全没有对应项的几项职责。
在字节离开你的信任边界之前去除元数据。 通过一个程序重新编码每个上传的图像,丢弃 EXIF、ICC 配置文件、XMP 以及任何嵌入的缩略图。即 使你的推理提供商声称忽略元数据,你也要这样做,因为你自己的日志和任何下游训练筛选都会看到你存储的内容。重新编码还可以规范化文件格式,从而消除一类“多重解析器文件”(polyglot-file)攻击,即一个文件既是有效的 PNG 图像,又是另一个解析器中的有效脚本。
检测并处理邻近内容模式。 这比去除元数据更难,正确答案取决于你的产品。选项范围从轻量级(运行一个小分类器标记截图,并提醒用户“我们注意到这看起来像一张截图 —— 请确认它不包含其他人的信息”)到重度(对每次上传运行 OCR,扫描提取出的文本以查找 PII 模式,然后进行脱敏或拒绝)。权衡点在于延迟、成本、误报率与影响范围缩小之间的平衡。对于高风险领域,OCR 扫描路径正日益成为基本要求;Microsoft Presidio 的图像脱敏工具和 Azure 的图像分析 OCR 流水线之所以存在,正是因为每个发布视觉输入的团队都会重新发现这种需求。
将身份证件和人脸作为单独的处理类别对待。 在推理前运行人脸检测器和文档分类器,可以让你将这些输入路由到更严格的流水线 —— 或者如果你的产品没有业务理由接受它们,则直接拒绝。最容易陷入麻烦的团队是那些因为“模型可以处理”而接受任何内容的团队,然后事后发现“处理”包括模型将用户的社会安全号码总结到了下游系统的日志中。
记录你存储的内容,而不仅仅是你处理的内容。 图像输入的审计追踪必须记录图像的哈希值、所做的预处理决策、应用的脱敏操作以及存储区域 —— 而不仅仅是发送到模型的最终 token。当监管机构询问你在特定日期持有过哪些图像时,“我们没有保存那份信息”在大多数司法管辖区都不是一个可以接受的答案。
发布前必须构建的审计切片
文本智能体通常通过抽样对话和阅读转录文本进行审计。图像智能体需要一个平行的审计切片,几乎没有团队会在发布前构建它,而几乎每个团队在发生第一次事故后都会匆忙构建。
这个切片分为三个部分。首先,对入站图像进行抽样审查,由人工查看用户实际上传的内容 —— 不是模型的解释,而是原始字节。你的合规团队第一次这样做时,他们会发现身份证件、竞争对手内部工具的截图、医疗记录照片,以及至少一张来自另一家公司办公室的白板图像。这不是假设;这是每个运行审计的团队在前 100 个样本中都会发现的情况。
其次,是元数据泄漏审计,以确认预处理层确实在发挥作用。运行定期检查,从存储的图像样本中重新提取 EXIF,并在发现任何 GPS、设备或用户标识符字段仍然存在时发出警报。预处理流水线会静默失效 —— 库升级改变了默认行为,路由规则将某些流量绕过了去除程序,或者新的上传路径完全绕过了该层。
第三,跨模态一致性检查。文本智能体和图像智能体共享一个模型、一个记忆和一个工具库。如果用户上传了另一个客户数据的截图,而智能体将其视为权威信息并据此行动,你就同时制造了一个隐私和完整性事故。定期进行红队演练,测试“当图像与所在的对话内容不一致时,智能体该如何反应”,这应该是常设项目,而不是一次性的发布检查。
