Back to blog
    端侧内容生成:离线也能用的 AI 草稿功能
    content generationon-device AIdraftingmobile AIimplementationsegment:mobile-builder

    端侧内容生成:离线也能用的 AI 草稿功能

    如何构建无需互联网即可运行的 AI 草稿功能。邮件回复、消息建议、笔记扩展和内容模板,全部在用户设备上本地生成。

    EErtas Team·

    邮件回复建议、消息自动补全、笔记扩展、社交帖子草稿。这些功能有一个共同模式:用户提供简短输入,AI 生成更长、更精练的输出。

    内容生成是端侧 AI 最自然的应用场景之一(仅次于分类)。它充分发挥了语言模型的优势,同时保持在移动设备硬件的性能预算之内。

    端侧生成擅长处理的场景

    短文本内容(200 词以内)

    应用场景输入输出模型大小
    邮件回复收到的邮件 + "接受"2-3 句回复3B
    消息建议对话上下文3-5 个回复选项(每个 1 句话)1-3B
    笔记扩展要点列表段落3B
    社交文案照片上下文 + 关键词1-2 句文案1-3B
    评论回复帖子 + 用户情感1-2 句回复1-3B
    表单填充字段标签 + 上下文建议值1B

    短文本生成是最佳应用场景。模型生成 50-200 个 token(1-3 句话到一个短段落),3B 模型耗时 2-5 秒,1B 模型耗时 1-3 秒。

    中等长度内容(200-500 词)

    应用场景输入输出模型大小
    邮件草稿主题 + 要点完整邮件正文3B
    会议摘要会议记录摘录摘要段落3B
    产品描述产品名称 + 特性营销文案3B
    博客大纲主题 + 受众结构化大纲3B

    中等长度内容在 3B 模型上需要 5-15 秒。当用户主动请求草稿(点击"起草邮件"按钮)时这是可接受的,但对于内联建议来说太慢了。

    架构模式

    一键起草

    参与度最高的模式。向用户展示一个按钮,根据上下文生成完整草稿:

    [收到关于安排会议的邮件]
    
        [接受]  [拒绝]  [建议替代方案]
    
        > 点击"接受"
    
        草稿:"感谢您的来信。周二下午 2 点对我来说没问题。
        我会发送日历邀请。期待与您的会面。"
    
        [发送] [编辑]
    

    AI 根据用户选择的操作生成草稿。无需打字。用户审阅后发送(或先编辑)。

    内联自动补全

    当用户打字时,提供补全建议:

    用户输入:"感谢更新。我会查看这个..."
    建议(灰色文字):"...文档,并在周五之前给您回复。"
    [按 Tab 接受]
    

    自动补全要求最低延迟。建议必须在用户停顿后 200-300 毫秒内出现。在旗舰设备上使用 1B 模型可以实现(35-50 tok/s = 200 毫秒内生成 7-10 个词)。

    模板扩展

    用户选择模板,AI 填入上下文细节:

    模板:"会议后跟进"
    上下文:与 Sarah 关于 Q3 预算审查的会议
    
    生成内容:
    "Sarah 您好,感谢今天关于 Q3 预算审查的富有成效的讨论。
    如约定,我会在下周三之前准备好修订后的预测。
    如有其他需要,请随时告知。"
    

    实现方式

    生成接口

    // iOS:草稿生成
    class DraftGenerator {
        private let model: LlamaContext
    
        func generateReply(
            incomingMessage: String,
            action: ReplyAction,
            onToken: @escaping (String) -> Void
        ) async -> String {
            let prompt = buildPrompt(message: incomingMessage, action: action)
            var fullResponse = ""
    
            await model.generate(prompt: prompt, maxTokens: 256) { token in
                fullResponse += token
                onToken(token) // 流式输出到 UI
            }
    
            return fullResponse
        }
    
        private func buildPrompt(message: String, action: ReplyAction) -> String {
            return """
            Write a brief reply to this message. Action: \(action.rawValue)
    
            Message: \(message)
    
            Reply:
            """
        }
    }

    多条建议

    生成 2-3 个替代草稿,让用户选择:

    // Android:生成多条建议
    suspend fun generateSuggestions(
        context: String,
        count: Int = 3
    ): List<String> {
        return (1..count).map {
            model.generate(
                prompt = buildSuggestionPrompt(context),
                maxTokens = 64,
                temperature = 0.8f // 更高的温度以产生多样性
            )
        }
    }

    建议之间使用 0.7-0.9 的温度以获得多样性。当需要单一一致的高质量草稿时,使用较低温度(0.1-0.3)。

    上下文管理

    好的草稿需要好的上下文。为模型提供:

    • 被回复的内容(邮件、消息、帖子)
    • 用户的操作或意图(接受、拒绝、提问)
    • 相关元数据(发件人姓名、主题、日期)
    • 用户的写作风格(来自训练数据)

    保持总上下文在 500 个 token 以内以确保快速生成。

    内容生成的微调

    基础模型生成通用内容。微调模型生成符合您应用风格和特定用例的内容。

    训练数据来源

    1. 现有用户内容(经授权):您的用户目前如何撰写邮件、消息和笔记?他们的风格就是训练目标。
    2. 合成示例: 使用更大的模型生成训练对,然后验证质量。
    3. 基于模板的生成: 为常见场景创建模板并生成变体。

    训练重点领域

    领域训练示例数影响
    语气/风格一致性200-500高(让输出更自然)
    领域词汇100-300高(使用正确术语)
    格式遵循200-500高(每次生成结构正确)
    长度控制100-200中(保持在目标长度内)
    边缘情况处理100-200中(优雅降级)

    总计:700-1,700 个训练示例即可获得一个调优良好的内容生成模型。

    Ertas 等平台处理完整流程。上传您的训练对话,使用 LoRA 微调,导出 GGUF。模型学习您应用的内容风格,生成感觉原生的草稿。

    性能预期

    生成速度(3B 模型,Q4_K_M)

    设备短草稿(50 token)中等草稿(200 token)
    iPhone 16 Pro1.5-2.5 秒6-10 秒
    iPhone 152-3.5 秒8-14 秒
    Galaxy S241.5-2.5 秒6-10 秒
    中端 Android3-5 秒12-20 秒

    生成速度(1B 模型,Q4_K_M)

    设备短草稿(50 token)建议(20 token)
    iPhone 16 Pro1-1.5 秒0.4-0.6 秒
    iPhone 151.5-2 秒0.5-0.8 秒
    Galaxy S241-1.5 秒0.4-0.6 秒
    中端 Android2-3 秒0.8-1.2 秒

    内联自动补全使用 1B 模型。完整草稿生成使用 3B。

    质量考量

    幻觉管理

    内容生成模型可能会编造细节。对于草稿,这意味着生成上下文中不存在的姓名、日期或事实。

    缓解措施:

    • 在提示中提供完整上下文(不要期望模型知道未给出的事实)
    • 利用微调模型遵循训练模式的倾向(微调模型在领域内任务上的幻觉更少)
    • 在 UI 中添加"发送前审阅"步骤

    长度控制

    使用目标长度的示例进行微调。如果您希望生成 2-3 句的回复,就用 2-3 句的示例训练。模型从训练数据而非指令中学习预期的输出长度。

    重新生成

    始终提供"重新生成"按钮。如果第一次草稿不理想,用户可以获取新的。当温度大于 0 时,每次生成都会产生不同的输出。

    即时生成、离线支持和零使用成本的组合,使端侧内容生成成为任何需要用户写作的应用中的高价值功能。

    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