Back to blog
    离线 AI: 构建无需互联网即可工作的移动端功能
    offline AIon-device AImobile developmentllama.cpparchitecturesegment:mobile-builder

    离线 AI: 构建无需互联网即可工作的移动端功能

    如何构建无需互联网连接即可工作的 AI 功能。端侧模型、离线优先架构模式,以及离线 AI 不可或缺的使用场景。

    EErtas Team·

    云端 AI 有一个硬性依赖: 互联网。当连接断开时,功能就中断了。对于许多移动端使用场景,这不仅仅是不方便,而是致命的缺陷。

    一个没有漫游数据就失效的旅行翻译应用。一个在信号不稳定的建筑工地停止工作的现场服务助手。一个在偏远诊所无法处理数据的健康应用。一个在飞机上失去 AI 功能的笔记应用。

    对于这些应用来说,离线 AI 不是锦上添花,而是核心需求。通过端侧推理,这完全可以实现。

    哪些场景离线 AI 是必需的

    旅行和国际出行

    国际旅行的用户通常会避免漫游数据费用。机场 WiFi 不可靠。翻译、导航辅助和旅行规划需要在没有网络连接时也能工作。一个只有连接 WiFi 才能翻译的语言应用,在用户最需要它的时刻恰恰无法使用。

    现场作业

    建筑工地、农田、矿山作业、偏远巡检。这些环境经常没有或只有很差的蜂窝网络覆盖。使用移动应用进行文档记录、测量、质量检查或报告的工作者需要 AI 功能在现场就能工作。

    医疗

    出于隐私和法规原因(HIPAA、GDPR),患者数据不应离开设备。临床决策支持、笔记转录、医疗编码。这些功能必须在 WiFi 可能受限或不可靠的诊所环境中工作。

    发展中市场

    全球超过 30 亿人的互联网接入是断断续续的。面向这些市场的应用不能假设始终在线的连接。支持离线工作的 AI 功能拥有大得多的潜在市场。

    日常中断

    地铁、电梯、飞机、地下室、农村地区。即使在发达市场,连接中断也是常态。在这些时刻显示加载动画或错误的 AI 功能会训练用户不再依赖它。

    架构: 离线优先 + 端侧推理

    关键的架构洞察是: 不要构建云端优先加离线回退(这很脆弱),而是构建离线优先加可选的云端增强。

    模型交付

    GGUF 模型文件需要在 AI 功能工作之前就在设备上。两种方案:

    与应用捆绑: 将模型包含在应用二进制文件或应用资产中。用户随应用一起下载。对于 200MB 以下的模型最简单(符合蜂窝下载限制)。对于更大的模型,使用 iOS App Thinning 或 Android Asset Delivery。

    安装后下载: 应用安装时不含模型。首次启动时,检测缺失的模型并提示用户通过 WiFi 下载。这保持了初始应用下载的小体积,同时在需要之前交付模型。

    // iOS: 检查模型并提示下载
    func ensureModelAvailable() -> Bool {
        let modelPath = FileManager.default
            .urls(for: .documentDirectory, in: .userDomainMask)[0]
            .appendingPathComponent("model.gguf")
    
        if FileManager.default.fileExists(atPath: modelPath.path) {
            return true
        }
    
        // 显示下载 UI
        showModelDownloadPrompt()
        return false
    }

    本地推理

    模型在设备上后,推理完全在本地进行。llama.cpp 使用设备的 CPU 和 GPU(iOS 上的 Metal, Android 上的 Vulkan)处理计算。无需网络调用。

    推理流程:

    1. 用户提供输入(文本、语音转录等)
    2. 输入在本地进行 token 化
    3. 模型逐 token 生成响应
    4. Token 被解码并在 UI 中显示

    每一步都在设备上发生。不涉及互联网。

    有连接时同步

    对于受益于云端连接的功能(分析、模型更新、用户数据同步),使用排队-同步模式:

    • 在本地排队分析事件(SQLite、Core Data、Room)
    • 当连接恢复时,将队列同步到你的后端
    • 在有连接的应用启动时检查模型更新
    • 永远不要在网络可用性上阻塞用户体验

    哪些功能可以离线工作

    功能离线可行?所需模型大小备注
    文本分类1B (~600MB)快速,小模型即可
    聊天助手3B (~1.7GB)高质量生成需要 3B
    摘要3B (~1.7GB)3B 质量良好
    翻译1-3B取决于语言对
    内容起草3B (~1.7GB)邮件回复、笔记、消息
    自动补全1B (~600MB)速度重要, 1B 够快
    情感分析1B (~600MB)简单分类任务
    命名实体提取1-3B结构化输出任务
    网络搜索N/A需要实时互联网数据
    实时数据检索N/A需要服务器连接
    图像生成部分1-2GB+可能但内存消耗大

    规律是: 任何处理用户输入并从模型的训练知识生成输出的任务都可以离线工作。需要外部实时数据的任务则不行。

    离线优先的模型管理

    版本检查

    // Android: 应用启动时检查模型版本
    suspend fun checkModelUpdate() {
        if (!isNetworkAvailable()) return
    
        val manifest = fetchModelManifest() // 从你的 CDN 获取 JSON
        val currentVersion = prefs.getString("model_version", "")
    
        if (manifest.version != currentVersion) {
            // 排队后台下载
            scheduleModelDownload(manifest.url, manifest.checksum)
        }
    }

    存储管理

    GGUF 模型大小在 600MB-1.7GB。存储管理很重要:

    • 下载前检查可用空间
    • 下载前向用户展示模型大小
    • 允许用户删除并重新下载模型
    • 在 iOS 上,标记模型文件使其不备份到 iCloud(可以重新下载)
    • 处理低存储警告,提供移除模型的选项

    完整性验证

    下载后始终验证模型文件:

    // SHA256 验证
    func verifyModel(at path: URL, expectedHash: String) -> Bool {
        guard let data = try? Data(contentsOf: path) else { return false }
        let hash = SHA256.hash(data: data)
        let hashString = hash.compactMap { String(format: "%02x", $0) }.joined()
        return hashString == expectedHash
    }

    离线 AI 的 UX 模式

    模型下载状态

    • 下载过程中显示清晰的进度指示器
    • 允许暂停和恢复
    • 网络重新连接时自动恢复
    • 开始前显示下载大小

    功能可用性

    • 当模型尚未下载时,显示清晰的消息说明 AI 功能为何不可用以及如何启用
    • 当模型已加载就绪时,不显示特殊指示器。离线 AI 应该感觉像原生功能。
    • 永远不要显示"离线模式"标记或降级的 UI。端侧模型就是功能本身。

    优雅降级

    对于同时使用端侧和云端 AI 的混合应用:

    • 所有支持的任务默认使用端侧
    • 如果有连接且任务超出端侧能力,可选择路由到云端
    • 当端侧可以处理时,永远不要因为云端不可用而让用户请求失败

    构建离线优先流程

    通向离线 AI 的路径:

    1. 选择你的模型: 简单任务(分类、自动补全)用 1B, 生成和聊天用 3B
    2. 在你的领域上微调: 使用你应用的数据训练一个在你特定任务上表现出色的模型。Ertas 等平台提供可视化微调流程,直接导出适合移动端部署的 GGUF 文件。
    3. 集成 llama.cpp: 将推理库添加到你的 iOS 或 Android 项目
    4. 实现模型交付: 捆绑或安装后下载
    5. 构建离线优先: 设计每个 AI 交互都能在无网络时工作,仅在必要时添加云端增强

    最终结果是一个无论用户去哪里都能工作的 AI 功能。地铁、飞机、建筑工地、偏远诊所。没有加载动画。没有错误消息。只有即时、私密、可靠的 AI。

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading