隐私与数据边界

本地 AI 崩溃报告脱敏设计

诊断报告应记录执行边界,而不是用户私人内容。

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

直接回答

有用的本地 AI 崩溃报告应记录执行边界,而不是用户私人内容。可以记录应用构建、系统版本、运行时和制品标识、任务阶段、后端请求、取消状态、异常类别以及经过审查的资源元数据。不要未经评估就记录提示词、转写、图中文字、凭据、签名 URL、数据库行、模型响应或任意异常文本。Android 安全指导建议避免敏感 Logcat,并在生产日志中做净化。“模型在设备上运行”并不意味着诊断上传或共享日志也留在本地。 设计一个字段白名单诊断结构。用户内容优先记录长度、内容类型或稳定的合成样例标识,不要直接存内容。文件路径要清除用户名、内容 URI、令牌和查询参数。异常可保留类名和经过核验的错误码;堆栈可能包含本地路径、SQL 片段、输入值或模型路径,因此要在导出前判断哪些部分安全。若剩余字符串仍能识别人物或秘密,简单遮掉一段内容并不够。 开发诊断和生产遥测要分开。开发版可以开详细本地日志;生产日志应避免私人变量,尽量使用编译期常量或枚举类别。如果使用远程崩溃服务,要审核它自动捕获的内容、自定义键与面包屑、目的地以及保留期限。本地推理和崩溃报告是两条独立数据流。 分享诊断包前给用户预览,展示包含的类别,允许移除可选元数据,默认不加原始提示词或媒体。提供取消路径,并在发送或保存结束后清理临时导出文件。如果离线时无法发送,说明报告不会上传,直到用户主动操作;不能暗中排队,之后再传输私人诊断。 用合成敏感值测试脱敏:人名、类似电话和邮箱的字符串、复制内容、提示词、文件 URI、类似令牌的内容以及包含输入文本的异常消息。不要使用真实用户记录。分别检查 Logcat、保存的报告、分析事件和支持导出。只对最终压缩包做一次脱敏,不能证明早先日志和面包屑里没有数据。 报告仍应支持诊断:保留事件顺序、应用版本、模型修订、运行时版本、阶段变化、重试次数和是否发生回退。字段被省略时标记为不可用,不要从私人内容中反推。为报告结构记录 schema 版本。完整审核时先枚举 AI 任务接触的日志、崩溃 SDK、面包屑和导出路径;将字段划为必需、可选、敏感或禁止;用合成样例测试失败、超时、取消、加载错误和解析错误;分别检查每个输出面;最后说明报告留在本地、由用户分享还是可能上传,并让隐私说明与行为一致。合格报告能说明故障发生在哪个阶段,同时不携带导致故障的用户内容。

转写解析器遇到私人会议文字后崩溃

开发者需要定位端侧转写后的异常。默认日志语句包含原始响应,自动崩溃服务也可能把面包屑附加到远程报告。

决策

用白名单事件记录替代原文日志,并用合成文字检查本地和远程每个诊断面,再启用报告流程。

预期结果

团队保留故障阶段、版本和错误类别,同时避免泄露原始转写或提示词。

需要收集的证据

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

  • 日志、崩溃 SDK 与导出路径清单
  • 允许字段和敏感字段定义
  • 合成敏感数据的脱敏测试

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

实施流程

  1. 映射诊断数据路径. 列出 Logcat 调用、崩溃 SDK 附件、自定义键、分析、面包屑、本地调试文件和用户生成支持包,并标注目的地、触发条件、保留时间和默认包含内容。
  2. 定义字段白名单. 保留构建、系统、运行时、模型修订、阶段、事件顺序和核验后的错误类别。排除提示词、转写、模型输出、图像内容、凭据、用户路径、签名 URL 和未审查异常文本。
  3. 端到端运行脱敏样例. 注入合成姓名、邮箱形式、提示词、URI、令牌和异常消息,并分别检查 Logcat、面包屑、导出包和远程报告。测试需覆盖打包后的生产路径。
  4. 让分享由用户决定. 分享前预览可选诊断,允许取消,说明临时文件清理和网络行为。不要静默排队等待稍后上传私人报告。

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

验收标准

  • AI 日志包含足以复现阶段和版本的元数据,默认不包含原始用户内容。
  • 合成敏感样例在所有检查过的日志、面包屑、导出和远程报告中均不存在。
  • 任何外部诊断传输对用户可见、可控,且隐私文案说明准确。

决策对照表

维度选择或证据解读方式
记录原始提示和输出无过滤的详细跟踪可能暴露用户内容和秘密,生产环境应避免。
允许字段事件元数据阶段、版本、错误码和顺序通常足以定位问题,同时减少敏感数据。
用户预览的支持包可检查的可选导出用户控制分享内容和目的地后可补充必要上下文。

需要避免的失败模式

  • 把提示词写入 Logcat
  • 只在最终压缩包脱敏
  • 认为本地推理代表崩溃上报也是本地

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

最小复现记录

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

发布检查表

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

来源与相关证据

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

常见问题

Logcat 留在手机上,所以是私密的吗?

不能这样假设。Android 安全指导建议避免敏感 Logcat 内容;调试工具、特权组件、导出或崩溃 SDK 都可能扩大访问。只记录核验过的非敏感元数据。

可以只记录提示词哈希吗?

哈希仍可能被关联,短且可猜测的文字也可能被穷举。若足够,优先使用合成样例 ID 或粗略长度/类别,并说明任何可能关联会话的标识。

本地推理是否意味着崩溃上报也在本地?

不意味着。推理和诊断是不同数据流。描述崩溃报告前应检查 SDK 默认附件、面包屑、自定义字段、目的地、用户同意和保留期限。