直接回答
用户通过侧载或文件选择提供的模型,在应用确认它可读取、属于明确支持的格式、符合资源限制并满足产品启用政策之前,都应按不可信输入处理。适合该场景时,应使用 Android 由用户主动触发的文档选择机制,而不是申请宽泛文件系统访问。应用通过获得授权的 URI 读取内容,再将字节流放到由应用控制的候选目录,校验实际格式、可用清单与版本信息,然后再决定能否激活。文件名、扩展名、Provider 返回的 MIME、复制成功,都不能证明模型身份、结构安全、真实性、许可证或运行时兼容。 侧载和检查已知远程工件不是同一个任务。配置好的远程下载可能有固定版本、可信清单、预期大小或摘要;用户提供的文件可能没有可信清单、被重新命名、来源不完整,或者属于应用不支持的格式。界面需要明确说明已验证什么、仍然未知什么。当前 Cove 事实卡指出模型配置中的 SHA-256 值为空,因此内容不能声称 Cove 已验证分发模型的摘要。指南可以说明通用安全流程,但不能暗示 Cove 支持模型导入或已经发布某个文件。 应把选择、检查和激活拆开。选择只说明用户选中了一个文档;检查阶段读取流并解析元数据;验证阶段比较现有的身份字段、大小限制、支持格式与运行时要求;激活阶段才改变推理系统可能加载的模型。任何前置阶段失败,都应让原有活动模型保持不变。用户选择的文件不能立即触发主线程上的原生解析,也不能直接覆盖当前可用工件。应先写入候选路径并执行明确的资源上限;成功、失败、取消等所有出口都要关闭输入流;用户取消或验证失败时,只清理应用拥有的临时模型文件。 Android 文档 Provider 的行为并不完全相同。它可能只返回通用 MIME、缺少文件大小、提供云端文档,或者仅通过 URI 公开内容而不是本地路径。因此应把 Provider 元数据视为界面提示和初步过滤条件,而不是最终内容证明。通过获得授权的 ContentResolver 打开 URI,处理权限撤回和 Provider 失败;不要把不透明 URI 拼成猜测出来的路径。如果应用要保存 URI 持久权限以便稍后访问,应向用户解释并测试撤回行为。如果选择复制到应用专属存储,应说明额外空间占用与删除政策,确保候选文件由应用控制,且清理范围不会意外触及其他数据。 验证需要分层。首先设置最大字节数作为产品安全上限,而不是设备兼容性承诺;然后检查文件签名,或使用维护中的格式解析器读取实际模型容器。扩展名和 MIME 标签都不够。只提取格式能安全提供的元数据,并将模型 ID、版本、架构或 tokenizer 元数据与已批准清单比较。如果格式是压缩容器,还要验证内部路径,拒绝路径穿越、重复条目、异常文件、长度矛盾以及超出资源限制的解压行为。不要在拥有敏感权限或网络访问的上下文中解析任意字节。解析成功仍然不能证明运行时能加载,因此激活前还需在受控流程中进行兼容与加载检查。 完整性和来源证明也需要分别说明。密码学摘要可以判断字节是否与独立可信的期望摘要相同;若期望值来自同一个不可信文件,就无法证明其来源。下载使用 TLS 可以保护连接,却不等于已确认第三方模型许可或兼容。论坛附带的校验值也不能自动成为信任锚点。清单应记录期望值来自哪里、对应哪一个具体版本、是否实际执行了对比。若没有可信期望摘要,只能如实记录:格式解析通过、长度在限制之内、可用清单身份相符、运行时加载成功或失败;不能把结果称作“真实来源已验证”或“模型绝对安全”。 许可证与用户授权是另一条独立边界。文件存在于设备上,不等于用户拥有使用或再分发权。若产品要基于许可状态决定启用策略,应从模型提供者或发布者取得适用许可,并将证据与模型元数据关联。公开下载链接不自动代表可商用;技术摘要校验也不是许可证校验。如果无法确认必要的许可条件,应说明限制,并按政策要求禁止激活。除非产品另行披露数据流并取得明确授权,否则不要上传用户选择的模型文件进行验证;如果产品承诺在本地验证,就应维持本地处理边界。
从本地文档提供器选择模型
用户选择的文件来自 Android 文档提供器,MIME 通用且大小未知;应用已有一个能正常工作的活动模型。
决策
通过用户选择 URI 读取并隔离候选字节,分别检查真实格式、清单来源、许可信息和运行时兼容性。
预期结果
用户能看到哪些事实已验证、哪些未知;不合格或不支持的字节不会进入活动推理路径。
需要收集的证据
只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:
- 事实卡 COVE-MODEL-02、ANDROID-PRIVACY-01、PRIVACY-01;当前模型配置中的 SHA-256 字段为空。
- Android 官方 Storage Access Framework、应用专属存储和安全最佳实践文档。
收到完整字节流还不够;最终落盘、完整性、运行时加载和恢复路径也必须验证。
实施流程
- 规定可接受格式. 列出解析器实际支持的容器格式、最大字节、必要元数据、运行时要求,以及是否必须有可信清单或摘要。没有安全解析器的格式应解释并拒绝。
- 通过明确选择访问文档. 只在用户操作后读取平台文档选择器返回的 content URI。处理 Provider 失败、元数据缺失、权限撤回和取消,不申请无关的宽泛存储访问。
- 隔离复制候选文件. 将流复制到唯一且归应用所有的临时位置,并在读取时实施字节上限。所有退出分支都关闭描述符,文件复制或解析期间不得让活动运行时打开候选。
- 分开检查格式和信任. 解析真实字节,与批准清单比较可用版本与架构,记录期望摘要来源,并单独核验许可证。MIME、文件名、伴随摘要和链接均不足以证明全部属性。
- 在目标运行时加载检查. 受控地尝试目标运行时初始化,只有兼容检查通过才能替换活动模型。格式解析成功但运行时或目标任务失败时,继续保留原模型。
- 呈现未知项并清理. 明确展示通过、失败和未知检查;提供重新选择文件的路径;只按政策清除应用所有的候选字节,并验证撤销 URI 权限不会误删用户数据。
让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。
验收标准
- 只有用户明确选择文件后才访问获授权 URI;实现不猜测路径或申请无关的广泛存储权限。
- Provider MIME 和文件名只作提示,实际字节在运行时访问前通过解析与资源限制。
- 候选文件只有在身份、适用来源/许可政策和运行时检查通过后才能替换活动模型。
- 界面区分事实与未知来源、摘要缺失、许可证未审和兼容状态;文件内容不会被上传或写入日志。
决策对照表
| 维度 | 选择或证据 | 解读方式 |
|---|---|---|
| 固定远程工件 | 使用可信配置清单标识期望版本。 | 响应内容、摘要和运行时兼容仍要单独检查。 |
| 用户选择的文档 | Android 授予了对用户所选 URI 的访问。 | 选择本身不证明来源、格式、许可证或推理兼容。 |
| 应用包内资源 | 构建包包含了一个资产文件。 | 包内存在不等于运行时支持,也不自动证明所有用途获许可。 |
需要避免的失败模式
- 不得把文件名、扩展名、Provider MIME 或同一来源附带的摘要当作真实性证明。
- 不得声称 Cove 当前支持任意模型导入、提供特定下载文件或完成了哈希验证。
还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。
最小复现记录
| 层级 | 记录内容 |
|---|---|
| 设备 | 厂商、型号、芯片、内存档位、操作系统版本 |
| 软件 | 应用版本和 Git 提交号 |
| 模型 | 系列、变体、版本、格式、文件长度、摘要、量化方式 |
| 运行时 | 名称、版本、请求后端及实际后端证据 |
| 工作负载 | 样例版本、输入摘要、提示词摘要、输出策略 |
| 结果 | 完成、失败、取消、回退及保护隐私的诊断信息 |
发布检查表
- ☐ 主要搜索问题已回答,且没有未经支持的数字。
- ☐ 所有模型文件和运行时版本均已固定。
- ☐ 代表性任务和失败处理策略均有说明。
- ☐ 生命周期、取消、清理和回退均已测试。
- ☐ 用户内容与网络边界均有说明。
- ☐ 结论只适用于被记录的配置。
- ☐ 新增测试结果时链接到原始方法或证据。
来源与相关证据
中文部署与排错专题见。奇连 AI 端侧专题。
常见问题
文档提供器 MIME 足以接受模型吗?
不够。Provider 可能仅提供通用类型或不提供类型。MIME 和扩展名只能初筛;必须解析实际字节并在运行时打开前执行大小与结构限制。
SHA-256 能证明侧载模型来自可信发布者吗?
只有期望摘要来自独立可信来源并对应同一版本时才有意义。若摘要与不可信文件来自同一渠道,它不能单独证明模型来源。
解析器成功后就能立刻切换活动模型吗?
不能保证。格式可解析不证明所选运行时能加载或执行目标任务。应先完成受控的运行时检查,并在该门禁通过前保留原模型。