直接回答
ML Kit Translation 有两个相关但不同的生命周期。Translator 是按源语言和目标语言配置的客户端对象;官方 Android 指南要求调用 downloadModelIfNeeded 并等待任务完成,再调用 translate。另一个 RemoteModelManager 可枚举已下载的 TranslateRemoteModel、查询指定模型是否已下载,并删除指定远程模型。应把下载任务成功、模型登记状态和实际翻译结果作为不同观察:前两者都不能证明输出符合任务验收标准。 官方文档将翻译资源描述为按语言关联、按需下载的模型。TranslateRemoteModel 表示与一种语言相关的模型;其官方参考明确说明 English 是内置的,不应作为可下载或可删除模型。不要推断每个源语言/目标语言组合一定对应两个独立文件,也不要用一个登记项证明翻译方向可用。应检查实际登记状态,再用准确的 TranslatorOptions 翻译一条新样本。 客户端清理不是模型管理 API。ML Kit 要求 Translator 对象不再使用时调用 close;删除远程模型则是独立的 RemoteModelManager.deleteDownloadedModel 操作。不能用 close 证明语言模型已删除,也不应仅因界面或客户端关闭就删模型。如果存储策略确实要求删除,应明确执行模型删除并重新查询登记状态。不要删除 English,因为 TranslateRemoteModel 官方参考说明它是内置模型。 严谨流程记录源/目标语言、TranslatorOptions、DownloadConditions、downloadModelIfNeeded 的结果或异常,以及删除前后的 RemoteModelManager 登记状态。之后关闭普通网络连接,用一条新的、非缓存的翻译请求检查已准备好的流程。模型出现在登记表中,不等于证明语言质量、语言对支持或离线任务成功。删除模型后,应在预期网络条件下测试下一次翻译的行为;没有观察前,不承诺自动重下载或固定错误提示。 公开模型 API 提供操作及与语言关联的模型对象,不是应用可用的私有模型文件路径或密码摘要接口。不要读取 ML Kit 的私有目录,也不要依据这些 API 将其资源标成已通过哈希验证。ARCH-01 定义推理执行位置;PRIVACY-01 提醒,本地推理不证明应用没有其他网络请求。模型准备下载、应用遥测与翻译请求是不同的数据流,应分别测试和说明。 本方法仅适用于引用的 ML Kit Translation Android API 及其当前文档,不描述 Cove 自有 ModelDownloader、LiteRT-LM 模型文件,也不声称 Cove 集成了 Translator。检查公开客户端与远程模型操作,验证所需模型状态,断网后完成一条新的翻译任务,并记录限制。不要仅凭 API 表面发布通用模型大小、语言覆盖、翻译质量或设备兼容结论。
Translator 界面关闭后语言资源仍然存在
Android 团队用 ML Kit Translation 开发文本翻译界面。Fragment 为一个语言方向创建 Translator,在 Wi-Fi 下准备模型、翻译新句子,并在界面结束时关闭客户端。存储审查询问:模型是否也因此删除,以及重新打开界面后同一离线任务能否继续工作。
决策
分别跟踪 Translator 客户端生命周期与 SDK 管理的模型状态。检查已下载模型登记;只有明确需要移除模型时才调用文档化删除操作;重新打开后在预期网络条件下运行一条新翻译。
预期结果
团队可以分别报告客户端关闭、模型登记状态和翻译任务结果;不从 close 推断模型已删除,也不从登记表推断离线任务已通过。
需要收集的证据
只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:
- ARCH-01:端侧 AI 指推理在用户设备执行;下载阶段与任务推理仍应分别记录。
- PRIVACY-01:本地推理不证明应用没有其他网络请求,语言资源下载和翻译请求不能混成一个网络结论。
- MLKIT-TRANSLATION-MODELS-2026-10:官方文档区分 Translator 客户端、按需模型下载和 RemoteModelManager 的资产操作。
收到完整字节流还不够;最终落盘、完整性、运行时加载和恢复路径也必须验证。
实施流程
- 固定库版本与任务配置. 记录准确的 ML Kit Translation 依赖、Android 构建、源语言和目标语言以及 TranslatorOptions。针对该 API 版本使用官方文档;不要把 LiteRT-LM 或其他 Google 模型服务的行为移植过来。
- 准备所需翻译资源. 创建 Translator 并以选定的 DownloadConditions 调用 downloadModelIfNeeded。只有记录任务成功或失败后才开始翻译;进度界面消失或上一次会话成功都不能代替准备状态核验。
- 检查 SDK 的模型登记. 用 RemoteModelManager.getDownloadedModels 查询 TranslateRemoteModel,并在需要时对某个远程模型调用 isModelDownloaded。记录与语言关联的对象;English 是内置模型,不要将它列为可下载资源。
- 运行一条新的翻译任务. 确定预期网络状态后,用准确 TranslatorOptions 提交新的合成文本。分别记录翻译成功、异常和任务验收,不把下载任务完成或模型登记当成翻译结果。
- 关闭客户端并复核模型状态. 客户端不再使用时调用 Translator.close,随后再次查询模型登记。不要把关闭客户端当作模型删除;检查 SDK 模型是仍存在还是发生了其他已观察到的状态变化。
- 只通过模型管理器删除目标资源. 若存储策略明确要求移除模型,针对目标非 English 模型调用 RemoteModelManager.deleteDownloadedModel,等待完成并再次查询登记状态。随后在断网和联网条件下分别测试新翻译;不要假设自动下载行为或固定修复提示。
让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。
验收标准
- 记录 ML Kit Translation 依赖、TranslatorOptions、DownloadConditions 与准确任务,而不只写一个笼统语言对。
- 下载任务完成、RemoteModelManager 登记、Translator.close、显式模型删除和新翻译成功分别记录。
- 依官方 TranslateRemoteModel 参考把 English 视作内置模型;不从源/目标标签推算资产数量,也不承诺所有语言对都受支持。
- 没有额外证据时不声称私有模型路径、哈希验证、通用模型大小、语言兼容、翻译质量或 Cove 集成 ML Kit Translator。
决策对照表
| 维度 | 选择或证据 | 解读方式 |
|---|---|---|
| Translator 客户端 | 针对所选 TranslatorOptions 创建,不再使用时关闭 | 管理客户端/会话资源;不能将 close 等同删除语言模型文件。 |
| 远程模型登记 | 查询 TranslateRemoteModel 对象及具体模型状态 | 显示 SDK 报告的已下载模型状态;不证明翻译任务或质量。 |
| 显式删除模型 | 对目标模型调用 RemoteModelManager.deleteDownloadedModel | 这是独立于客户端生命周期的管理动作;应等待完成并复核登记。 |
| 新的离线翻译 | 资源准备后断网并提交一条新文本 | 验证所选配置的真实工作流;既有模型状态或缓存翻译本身不足以证明。 |
需要避免的失败模式
- 把 Translator.close 当成语言模型已从设备删除的证据。
- 仅凭 Source/Target 标签推算下载了几个模型文件,或把 English 当作普通可下载模型。
- 把模型登记状态等同于新翻译任务可离线完成或具有某种质量。
还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。
最小复现记录
| 层级 | 记录内容 |
|---|---|
| 设备 | 厂商、型号、芯片、内存档位、操作系统版本 |
| 软件 | 应用版本和 Git 提交号 |
| 模型 | 系列、变体、版本、格式、文件长度、摘要、量化方式 |
| 运行时 | 名称、版本、请求后端及实际后端证据 |
| 工作负载 | 样例版本、输入摘要、提示词摘要、输出策略 |
| 结果 | 完成、失败、取消、回退及保护隐私的诊断信息 |
发布检查表
- ☐ 主要搜索问题已回答,且没有未经支持的数字。
- ☐ 所有模型文件和运行时版本均已固定。
- ☐ 代表性任务和失败处理策略均有说明。
- ☐ 生命周期、取消、清理和回退均已测试。
- ☐ 用户内容与网络边界均有说明。
- ☐ 结论只适用于被记录的配置。
- ☐ 新增测试结果时链接到原始方法或证据。
来源与相关证据
- 端侧 AI 架构概览
- Google ML Kit:Android 上使用 Translation API
- Google ML Kit API 参考:RemoteModelManager
- Google ML Kit API 参考:TranslateRemoteModel
中文部署与排错专题见。奇连 AI 端侧专题。
常见问题
Translator.close 会删除已下载语言模型吗?
文档把 close 作为 Translator 对象的清理方式,并另行通过 RemoteModelManager.deleteDownloadedModel 提供模型删除操作。应把两者分开记录,查询登记状态,而不是从客户端关闭推断删除。
每个源语言和目标语言组合都需要下载两个文件吗?
不要从语言对推算文件数量。API 提供与语言关联的 TranslateRemoteModel 对象,并说明 English 是内置模型。查看 SDK 实际登记状态,再测试所配置的翻译方向。
模型已下载是否证明离线翻译成功?
不能。登记状态只是一个观察点。准备好对应 Translator 后断网、提交新文本,单独记录翻译成功或失败;不要把旧缓存结果计作新任务。
我能读取或计算 ML Kit 私有模型文件的哈希吗?
引用的公开模型管理 API 提供已下载状态和删除操作,没有公开的私有文件路径或摘要契约。不要访问 SDK 私有目录,也不要把登记状态称作密码学完整性验证。