
从应用用户交互构建训练数据集
您的应用已经在生成微调所需的训练数据。如何收集、清洗和格式化用户交互,将其转化为能产出高质量端侧模型的数据集。
AI 模型最好的训练数据来自您自己的应用。用户的真实交互、真实问题和真实内容恰恰代表了您的模型需要学习的领域。没有合成数据或公开数据集能比得上来自实际用例的数据质量。
本指南介绍如何收集、清洗和格式化这些数据以用于微调。
什么算训练数据
应用中的每一次用户交互都是潜在的训练样本:
| 应用类型 | 原始数据 | 训练样本 |
|---|---|---|
| 客户支持 | 用户问题 + 客服回复 | 问答对 |
| 笔记应用 | 用户笔记 + 自动生成摘要 | 摘要对 |
| 金融 | 交易描述 + 分配的类别 | 分类对 |
| 邮件 | 收到的邮件 + 用户的回复 | 回复生成对 |
| 电商 | 产品 + 用户评价 | 情感分析对 |
| 健康 | 症状描述 + 分诊结果 | 分类对 |
模式:任何输入-输出对,其中"正确"输出是已知的(来自明确的用户操作或专家判断),就是一个训练样本。
数据收集策略
被动收集(推荐的起步方式)
记录自然产生输入-输出对的用户交互:
- 搜索查询 + 点击结果: 被点击的结果就是"正确"答案
- 分类操作: 当用户为内容分配类别时,这就是一个标注样本
- 修正: 当用户编辑 AI 生成的回复时,编辑后的版本就是"正确"输出
- 接受: 当用户接受一个建议时,这就是一个正样本
// 记录用户修正作为训练数据
function onAiResponseEdited(original: string, edited: string, context: string) {
logTrainingExample({
input: context,
output: edited, // 用户的修正是训练目标
source: "user_correction",
timestamp: Date.now(),
});
}
主动收集
提示用户提供直接产生训练数据的反馈:
- 对 AI 回复点赞/踩: 筛选点赞的回复作为正样本
- 修正界面: 让用户修正 AI 回复;记录修正内容
- 模板使用: 当用户选择并使用模板时,填充后的模板就是训练样本
合成数据补充
用合成样本补充真实数据:
- 取您最好的真实样本
- 使用更大的模型(GPT-4o、Claude Sonnet)生成变体
- 对照真实样本验证合成样本
- 混合合成和真实数据(目标至少 30% 真实数据)
隐私与同意
法律要求
在收集任何用户数据用于训练之前:
- 更新隐私政策 披露匿名化的交互数据可能用于改进 AI 功能
- 获取同意 在必要时(GDPR 要求处理个人数据需获得明确同意)
- 提供退出选项 给不希望其交互用于训练的用户
- 匿名化数据 在用于训练之前。移除姓名、邮箱、电话号码和其他 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
端侧收集
最安全的方式:在设备上收集训练数据,只传输匿名化的聚合数据。原始交互留在用户手机上。只有匿名化的训练样本离开设备。
数据清洗
原始交互数据充满噪声。清洗是流程中最重要的步骤。
质量过滤
- 移除过短样本: 输入少于 10 个字符或输出少于 20 个字符的样本很少包含有用信号
- 移除重复: 完全重复和近似重复的样本会增加噪声
- 移除错误: 应用崩溃或用户中途放弃的交互
- 移除离题内容: 不匹配目标任务的交互
- 移除遗漏的 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 个类别) | 200 | 500-1,000 | 2,000+ |
| 问答(有限领域) | 300 | 1,000-2,000 | 3,000+ |
| 对话(多轮) | 500 | 2,000-3,000 | 5,000+ |
| 摘要 | 300 | 1,000-2,000 | 3,000+ |
| 内容生成 | 500 | 1,500-3,000 | 5,000+ |
质量比数量更重要。500 个精心筛选的样本胜过 5,000 个嘈杂的样本。
完整流程
- 为应用添加埋点 记录交互(需用户同意)
- 积累数据 正常使用 2-4 周
- 导出并匿名化 记录的交互
- 清洗和过滤 使用上述质量标准
- 格式化 为聊天 JSON 结构
- 拆分 为训练集(90%)和评估集(10%)
- 微调 使用 Ertas 等平台:上传格式化的数据集,选择基础模型,使用 LoRA 训练,导出 GGUF
- 评估 在留出集上评估
- 部署 GGUF 模型到设备端
- 迭代 收集更多数据并定期重新训练
您的应用现在就在生成训练数据。问题在于您是否在捕获它。
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

Llama 3.2 for Mobile Apps: Fine-Tuning and On-Device Deployment
A complete guide to using Meta's Llama 3.2 1B and 3B models in mobile apps. Fine-tuning with LoRA, exporting to GGUF, and deploying on iOS and Android via llama.cpp.

Gemma 3 for Mobile: Fine-Tuning and On-Device Deployment
How to use Google's Gemma 3 models for on-device mobile AI. Model selection, fine-tuning with LoRA, GGUF export, and deployment via llama.cpp on iOS and Android.

API Logs to Training Data: Using Your Cloud AI History to Fine-Tune
Your existing cloud AI API logs are a ready-made training dataset. How to extract, clean, and format API interaction logs into fine-tuning data for an on-device model.