在大型语言模型(LLM)的精调(Fine-tuning)中,SFT(Supervised Fine-Tuning)精调模式是最常用的方法之一,其核心是通过高质量的问答对数据指导模型学习特定任务或领域知识。以下是SFT精调数据的标准格式和关键要点:
一、SFT数据核心结构
1. 基础格式(JSON/JSONL/CSV)
{ "instruction": "客服场景:用户想修改收货地址", // 任务描述(可选) "input": "我的收货地址填错了,怎么修改?", // 用户输入/问题 "output": "请登录账号,在订单详情页点击...", // 期望模型输出的答案 "system": "你是一名电商客服助手" // 系统角色设定(可选) }
-
字段说明:
-
instruction
:明确任务类型(如摘要生成、客服回复等) -
input
:用户实际输入(必填) -
output
:期望的标准答案(必填) -
system
:角色设定(影响回答风格)
-
2. 多轮对话格式
[ { "role": "user", "content": "手机充不进电怎么办?" }, { "role": "assistant", "content": "建议先尝试更换充电线..." }, { "role": "user", "content": "换了还是不行" }, { "role": "assistant", "content": "可能是充电接口损坏,需到售后网点检测" } ]
二、字段设计原则
字段 | 必要性 | 要求 |
---|---|---|
input | 必选 | 需覆盖真实用户表达(含口语化问法) |
output | 必选 | 答案需准确、完整,避免模糊表述(如“请联系客服”) |
system | 可选 | 角色设定需具体(如“你是一名法律顾问”而非“你是一个AI”) |
metadata | 可选 | 添加业务标签(如{"intent": "退货", "scene": "售后"} ) |
三、数据质量关键点
-
一致性
-
相同问题对应答案需唯一(避免同一问题多个冲突答案)
-
示例:
// 错误示例 {"input": "怎么退款?", "output": "7天内可退款"} {"input": "怎么退款?", "output": "联系客服处理"}
-
-
多样性
-
覆盖同一问题的不同表达:
{"input": "如何退货?", "output": "..."} {"input": "商品不想要了怎么退?", "output": "..."}
-
-
领域聚焦
-
避免混杂无关场景(如客服数据中混入销售话术)
-
四、云平台适配格式
1. 阿里云PAI格式示例
{ "query": "订单多久发货?", // 对应input "response": "通常24小时内发货", // 对应output "category": "物流查询" // 业务标签 }
2. HuggingFace数据集格式
from datasets import Dataset dataset = Dataset.from_dict({ "instruction": ["客服场景:物流查询"], "input": ["订单多久发货?"], "output": ["通常24小时内发货"] })
五、数据准备工具推荐
-
标注工具
-
Label Studio(支持多人协作标注)
-
Doccano(轻量级文本标注)
-
-
格式校验脚本
def validate_sft_data(data): assert "input" in data, "Missing input field" assert "output" in data, "Missing output field" assert len(data["output"]) > 10, "Answer too short"
六、避坑指南
-
不要直接使用爬取的网页数据(需清洗为QA对)
-
避免答案包含敏感信息(如电话号码、地址)
-
建议保留10%数据作为验证集
案例:某电商客服SFT数据优化后效果对比
优化前:5000条未清洗数据 → 模型准确率62%
优化后:2000条高质量数据 → 模型准确率85%
通过规范化的SFT数据格式,可显著提升模型在垂直领域的表现。实际项目中建议结合业务需求添加自定义字段(如产品类别、用户情绪标签等)。