隐私与数据边界

不采集用户内容的端侧 AI 遥测设计

让遥测只记录完成产品决策所需的有限状态,不把提示词、转录、图片、文档或模型输出混入后台事件。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-04 · Fact IDs: PRIVACY-01, PRIVACY-02

直接回答

端侧 AI 的遥测应回答明确的产品问题,而不是复制用户正在处理的内容。设计事件前,先写出团队要作出的决定,例如某类任务是否开始、走了哪条真实存在的执行路径、最终成功、取消还是在某个阶段失败。随后为每个字段注明用途、允许值、产生位置和版本。默认拒绝任意字符串。事实卡 `PRIVACY-01` 明确了本地推理只是无需把该次推理输入发送到远端推理服务器,并不能证明应用没有其他网络请求;`PRIVACY-02` 则把模型下载、购买验证、可选订阅和可选崩溃报告等边界分开记录。这些事实不是允许随意采集的授权。 把遥测当成数据流的一部分审查。开发者可能只想上传一个稳定错误类别,但异常对象、URL、文件名、模型路径或序列化后的请求可能被 SDK 自动附带。Android 安全文档提示不要在日志中暴露敏感信息;分析 SDK、崩溃处理器和自定义埋点也应逐字段检查。事件优先采用有限枚举和有界数值,不要默认使用自由文本。没有姓名也不自动等于匿名:固定安装标识、罕见任务组合、精确时间戳和文件路径都可能区分某次活动。如果某个指标不会改变产品决策,就不应为了“以后可能有用”而收集。 一个足够克制的开始事件可以包含事件名、任务类别、结构版本,以及仅在代码确有该路由时出现的 `local` 或 `remote` 状态。结束事件只需表达成功、取消或经审查的失败类别。不要放入原始提示、生成内容、转录、图片 URI、文档标题、展开后的模板、思维文本或自由格式错误消息。调试细节应留在开发构建,或通过用户明确打开、可以预览和编辑的诊断导出提供;不能悄悄变成后台遥测。字段设计要与代码和隐私说明一致,不能仅凭“使用本地模型”的产品标签推出任何别的数据流结论。 应当在多个边界验证实现。对事件编码器做单元测试,把唯一的合成金丝雀字符串分别放进成功、取消、初始化失败和解析失败的输入,再检查最终序列化内容中不出现这些字符串。随后在测试环境检查真实网络请求体,并检查发布构建的依赖和目的地。Android Studio Network Inspector 能展示被支持的 HttpsURLConnection 与 OkHttp 流量,但对其他网络库可能不可见;时间线没有条目并不能单独证明应用没有联网。应把源代码审计、依赖清单、端到端任务和网络捕获结合,并明确记录观察范围与遗漏限制。 控制开关也必须说实话。如果遥测是可选的,关闭后要在启动、失败和普通完成路径都停止相应事件。如果某项请求是某个功能本身所必需,应和可选分析分开说明,不要让一个按钮看起来像通用断网开关。保留周期、访问范围和服务设置要以已验证配置为准,不能凭空写时长。SDK、事件结构或请求路由改变后,重新运行金丝雀、载荷、目的地、离线任务和关闭遥测测试。测试通过只是当前构建与被检查路径的证据,不是对未来依赖或所有用户设备的永久保证。记录结构版本、应用构建、检查的目的地、测试结果和尚未观察到的路径,才能让“遥测不含用户内容”成为可复核的设计承诺。

失败仪表盘不能变成提示词档案库

团队希望统计端侧摘要任务是否启动、完成、取消,或在模型初始化阶段失败。第一版埋点提议把异常消息和完整请求对象一起上传,以便排障。

决策

改用带版本的封闭事件字段和稳定失败枚举;需要诊断内容时另设可预览、由用户主动选择的导出流程。

预期结果

仪表盘仍可区分任务结果,同时自动化测试能证明合成提示词和输出金丝雀没有进入事件载荷。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • PRIVACY-01:本地推理不等同于零网络请求
  • PRIVACY-02:Cove 已披露的网络边界类别
  • ANDROID-PRIVACY-01:Android 应用仍须负责数据控制

隐私声明需要数据清单和流量证据;“本地模型”标签本身不是证明。

实施流程

  1. 先写清楚要支持的决定. 为每个事件说明它要支持的产品决策和最少字段。不会改变决策的字段直接移除,避免“调试上下文”对象变成未记录的采集面。
  2. 定义封闭字段结构. 使用固定事件名、结构版本、有限任务类别和经过审阅的结果类别。默认禁止自由提示词、输出、异常文本、文件路径、内容 URI、账号标识和模型会话对象。
  3. 用金丝雀测试序列化. 把独特的合成字符串分别放入成功、取消、初始化错误和解析错误路径,检查最终请求体并断言字符串与敏感字段均不存在。还要评估嵌套异常和 SDK 自动上下文。
  4. 检查发布构建网络路径. 枚举依赖和请求目的地,完成一次端到端任务,用 Network Inspector 或等价测试代理捕获流量,再审阅其他客户端代码。记录 Inspector 无法观察哪些库,不能把空抓包当作零联网证明。
  5. 验证控制开关并在变更后复测. 分别测试启用和关闭遥测的启动、失败、完成路径。SDK、事件结构或路由变更后,重跑载荷和目的地检查并更新数据流记录。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 每个字段均有用途、允许值和负责人,不存在通用提示词、转录、图像、文档或原始异常字段。
  • 成功与失败路径的合成内容金丝雀均未出现在载荷中,发布依赖和目的地清单已记录。
  • 关闭遥测的测试覆盖所有列出的路径,文档只声明实际检查过的构建与网络范围。

决策对照表

维度选择或证据解读方式
运行事件有限任务和结果枚举按结果统计,不存储产生该结果的具体内容。
自由格式调试载荷提示词、异常或请求对象容易意外包含内容与标识,默认应拒绝。
用户审阅的诊断材料可预览、可删改的导出单独的显式操作,不等于后台遥测。

需要避免的失败模式

  • 发送原始异常消息
  • 把请求对象整个序列化
  • 把 Network Inspector 空白误当成无请求证明

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

本地推理是否表示应用没有遥测?

不是。本地推理说明某一步在哪里执行。分析、崩溃报告、购买、下载或可选表单可能有各自的网络行为,需要分别检查。上线前还应抽检真实发布构建中的请求字段。

错误代码可以自动认定为非敏感吗?

不能自动认定。稳定的应用自有枚举比原始异常文本更容易审查,但仍须说明字段用途、验证载荷并决定保留方式;是否收集还取决于具体用途。

Network Inspector 能证明没有任何请求吗?

不能。Android 文档说明它能查看部分受支持流量。需要结合代码与依赖审计,并说明抓包覆盖范围,也要核对其他客户端请求路径。