Back to blog
    从应用用户交互构建训练数据集
    training datadatasetfine-tuningdata collectionmobile AIsegment:mobile-builder

    从应用用户交互构建训练数据集

    您的应用已经在生成微调所需的训练数据。如何收集、清洗和格式化用户交互,将其转化为能产出高质量端侧模型的数据集。

    EErtas Team·

    AI 模型最好的训练数据来自您自己的应用。用户的真实交互、真实问题和真实内容恰恰代表了您的模型需要学习的领域。没有合成数据或公开数据集能比得上来自实际用例的数据质量。

    本指南介绍如何收集、清洗和格式化这些数据以用于微调。

    什么算训练数据

    应用中的每一次用户交互都是潜在的训练样本:

    应用类型原始数据训练样本
    客户支持用户问题 + 客服回复问答对
    笔记应用用户笔记 + 自动生成摘要摘要对
    金融交易描述 + 分配的类别分类对
    邮件收到的邮件 + 用户的回复回复生成对
    电商产品 + 用户评价情感分析对
    健康症状描述 + 分诊结果分类对

    模式:任何输入-输出对,其中"正确"输出是已知的(来自明确的用户操作或专家判断),就是一个训练样本。

    数据收集策略

    被动收集(推荐的起步方式)

    记录自然产生输入-输出对的用户交互:

    • 搜索查询 + 点击结果: 被点击的结果就是"正确"答案
    • 分类操作: 当用户为内容分配类别时,这就是一个标注样本
    • 修正: 当用户编辑 AI 生成的回复时,编辑后的版本就是"正确"输出
    • 接受: 当用户接受一个建议时,这就是一个正样本
    // 记录用户修正作为训练数据
    function onAiResponseEdited(original: string, edited: string, context: string) {
      logTrainingExample({
        input: context,
        output: edited,  // 用户的修正是训练目标
        source: "user_correction",
        timestamp: Date.now(),
      });
    }

    主动收集

    提示用户提供直接产生训练数据的反馈:

    • 对 AI 回复点赞/踩: 筛选点赞的回复作为正样本
    • 修正界面: 让用户修正 AI 回复;记录修正内容
    • 模板使用: 当用户选择并使用模板时,填充后的模板就是训练样本

    合成数据补充

    用合成样本补充真实数据:

    1. 取您最好的真实样本
    2. 使用更大的模型(GPT-4o、Claude Sonnet)生成变体
    3. 对照真实样本验证合成样本
    4. 混合合成和真实数据(目标至少 30% 真实数据)

    隐私与同意

    法律要求

    在收集任何用户数据用于训练之前:

    1. 更新隐私政策 披露匿名化的交互数据可能用于改进 AI 功能
    2. 获取同意 在必要时(GDPR 要求处理个人数据需获得明确同意)
    3. 提供退出选项 给不希望其交互用于训练的用户
    4. 匿名化数据 在用于训练之前。移除姓名、邮箱、电话号码和其他 PII。

    技术匿名化

    import re
    
    def anonymize(text: str) -> str:
        # 移除邮箱地址
        text = re.sub(r'\b[\w.-]+@[\w.-]+\.\w+\b', '[EMAIL]', text)
        # 移除电话号码
        text = re.sub(r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b', '[PHONE]', text)
        # 移除姓名(需要 NER 或姓名列表)
        text = replace_names(text, '[NAME]')
        return text

    端侧收集

    最安全的方式:在设备上收集训练数据,只传输匿名化的聚合数据。原始交互留在用户手机上。只有匿名化的训练样本离开设备。

    数据清洗

    原始交互数据充满噪声。清洗是流程中最重要的步骤。

    质量过滤

    1. 移除过短样本: 输入少于 10 个字符或输出少于 20 个字符的样本很少包含有用信号
    2. 移除重复: 完全重复和近似重复的样本会增加噪声
    3. 移除错误: 应用崩溃或用户中途放弃的交互
    4. 移除离题内容: 不匹配目标任务的交互
    5. 移除遗漏的 PII: 用更严格的模式进行二次过滤

    质量评分

    并非所有样本都同等有用。为每个样本评分:

    信号权重理由
    用户接受了 AI 回复直接的正面信号
    用户编辑后接受最高编辑内容是理想输出
    用户拒绝了 AI 回复低(谨慎使用)负面信号,可用于对比
    长且详细的交互为模型提供更多上下文
    常见查询模式高频模式最重要

    目标分布

    训练集应大致匹配生产环境的查询分布。如果 40% 的用户查询关于话题 A,10% 关于话题 B,您的训练集应反映这个比例。过度代表稀有话题会使模型产生偏差。

    微调数据格式化

    对话格式(标准)

    大多数微调框架期望对话格式:

    {"messages": [
      {"role": "system", "content": "You are an assistant for FitTracker app."},
      {"role": "user", "content": "How many calories in a banana?"},
      {"role": "assistant", "content": "A medium banana has about 105 calories, 27g carbs, 1.3g protein, and 0.4g fat."}
    ]}

    多轮对话

    对于聊天功能,包含完整对话:

    {"messages": [
      {"role": "system", "content": "You are an assistant for FitTracker app."},
      {"role": "user", "content": "What should I eat before a workout?"},
      {"role": "assistant", "content": "A light meal 1-2 hours before works best. Good options: banana with peanut butter, oatmeal, or a small smoothie. Focus on easily digestible carbs."},
      {"role": "user", "content": "What about protein?"},
      {"role": "assistant", "content": "Add a small amount of protein: a scoop of whey in your smoothie, Greek yogurt with your oatmeal, or a handful of almonds. Keep it under 20g to avoid feeling heavy during the workout."}
    ]}

    分类格式

    对于分类任务,格式更简单:

    {"messages": [
      {"role": "user", "content": "Classify: Morning run in the park"},
      {"role": "assistant", "content": "Cardio"}
    ]}

    数据集大小指南

    任务最少良好优秀
    分类(5-10 个类别)200500-1,0002,000+
    问答(有限领域)3001,000-2,0003,000+
    对话(多轮)5002,000-3,0005,000+
    摘要3001,000-2,0003,000+
    内容生成5001,500-3,0005,000+

    质量比数量更重要。500 个精心筛选的样本胜过 5,000 个嘈杂的样本。

    完整流程

    1. 为应用添加埋点 记录交互(需用户同意)
    2. 积累数据 正常使用 2-4 周
    3. 导出并匿名化 记录的交互
    4. 清洗和过滤 使用上述质量标准
    5. 格式化 为聊天 JSON 结构
    6. 拆分 为训练集(90%)和评估集(10%)
    7. 微调 使用 Ertas 等平台:上传格式化的数据集,选择基础模型,使用 LoRA 训练,导出 GGUF
    8. 评估 在留出集上评估
    9. 部署 GGUF 模型到设备端
    10. 迭代 收集更多数据并定期重新训练

    您的应用现在就在生成训练数据。问题在于您是否在捕获它。

    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