6 步把续写模型变成对话模型
很多人以为训练完的 base 模型就能对话。不能。你问它"你好",它可能续写成"你好,我是XX公司的销售"——它在续写,不在对话。
base 模型学的是"给定前文,续写最可能的下文"(互联网文本分布)。它没有"用户/助手"的角色概念。SFT 做的事:用对话模板(如 ChatML 的 <|im_start|>user...<|im_start|>assistant)把对话包成结构化样本,让模型学会"看到 user 标记就生成 assistant 回答"。
训练时只在 assistant 部分算 loss(user 部分不学),让模型专注学"怎么答"而不是"怎么问"。这就是 SFT 的核心:教格式 + 教行为,不是教知识。
nanochat 把 SFT 全流程拆成 6 步,点每步看具体在做什么、为什么这步重要。
一个常见坑:SFT 后模型回答很好但偶尔"续写跑出来"——多半是数据混了续写样本或模板没对齐。先查数据纯度和模板一致性,再调超参。