Skip to content

什么是 SFT 指令微调?微调数据需要什么格式? ​

  • 标签:

🏛 业务架构师 ​

SFT(Supervised Fine-Tuning,指令微调/监督微调)是在预训练模型上,用"指令-期望输出"配对数据做监督训练,教会模型听懂指令、按范式作答——从"会续写文本"变成"会执行任务"。

微调数据格式,主流两种:

1. Alpaca 格式(单轮):

json
{"instruction": "将以下客户反馈分类为:售后/售前/物流/产品",
 "input": "快递三天了还没到,客服也联系不上",
 "output": "物流"}

2. ShareGPT/Messages 格式(多轮):

json
{"messages": [
  {"role": "system", "content": "你是电商客服助手"},
  {"role": "user", "content": "订单A1024到哪了"},
  {"role": "assistant", "content": "请问您需要我帮您查询物流轨迹吗?"},
  {"role": "user", "content": "是的"},
  {"role": "assistant", "content": "订单A1024当前已到达…"}]}

数据要求:几千到几万条起步;output 质量是天花板(答案错了模型学错);覆盖任务多样性(防走火);掺通用数据防遗忘。

业务价值定位:SFT 管"行为范式"——话术、格式、风格、流程习惯;知识注入交给 RAG。企业做 SFT 的最优数据源是业务沉淀的"黄金问答对"(客服标星记录、专家操作日志),这些私有数据才是微调的差异化价值所在。

🏗 系统架构师 ​

SFT(Supervised Fine-Tuning,指令微调)= 用"指令→期望回答"的监督数据继续训练预训练模型,教它听懂指令、按要求作答——从"续写机器"到"助手"的关键一步。

数据格式(核心):

Alpaca 风格:

json
{"instruction": "把这段话翻译成英文", "input": "今天天气很好", "output": "The weather is nice today"}

Chat 消息格式(主流,匹配对话模板):

json
{"messages": [
  {"role": "system", "content": "你是客服助手"},
  {"role": "user", "content": "怎么退款?"},
  {"role": "assistant", "content": "退款流程如下……"}
]}

多轮对话是 messages 数组里 user/assistant 交替;训练时只对 assistant 段计算 loss(user 段不参与损失),这是格式工程的关键细节。

格式之外的质量要素:样本要覆盖任务分布(指令多样性);output 是唯一学习信号——格式统一、事实正确、风格一致;配 5~20% 通用数据防遗忘。量级:几千条高质量可对齐行为(LIMA 结论),几万条是常见规模,质量 > 数量是铁律。

架构视角:SFT 数据管道 = 采集(业务日志/自蒸馏/人工)→ 清洗(去重、脱敏、质检)→ 格式化(统一 schema)→ 版本化,这个管道的工程成熟度决定微调业务能走多快。

💻 全栈开发专家 ​

SFT(Supervised Fine-Tuning,指令微调):用「指令-回答」对监督训练,把只会续写的基座模型变成能听懂指令、按对话协议交互的助手。

数据格式主流两种:

Alpaca 格式(单轮为主):

json
{"instruction": "把下面句子翻译成英文",
 "input": "今天天气很好",
 "output": "The weather is nice today."}

ShareGPT/OpenAI messages 格式(多轮,现在的事实标准,ChatML 模板):

json
{"messages": [
  {"role": "system", "content": "你是电商客服"},
  {"role": "user", "content": "退货流程是什么"},
  {"role": "assistant", "content": "1. 在订单页申请..."},
  {"role": "user", "content": "运费谁出"},
  {"role": "assistant", "content": "质量问题我们承担..."}
],
 "source": "faq_v3", "weight": [0,0,1,0,1]}

weight 字段控制哪些 assistant 轮参与 loss 计算(多轮里通常全部 assistant 轮都算)。

工程要点:

  1. 训练时 messages 会被套 chat template(<|im_start|>user\n...),模板必须和推理部署一致——模板不匹配是微调后效果崩的头号原因;
  2. loss 只算 assistant 部分,user/system 部分不参与(pad 成 -100);
  3. 数据量:风格/格式 1k~10k,领域任务 1w~10w,质量优先于数量;
  4. 拒答样本、安全样本要有意识地配比(各 ~10%)。

工具链:Axolotl/LLaMA-Factory 直接吃这两种格式,转好 JSONL 即可开训。