1715 字
约 5 分钟
0
Chat Template + SFT:大模型终于学会「说话」

一句话速览

从"只会续写文字的补全机器",到"会跟你聊天、听你指挥的对话助手",中间差的不是更聪明的模型,而是一套训练范式:先用 Chat Template 把对话统一成一种格式,再用 SFT(指令微调)让模型专门学会在这套格式下说话。

OpenAI 只是约定了一套格式,再专门针对这套格式把模型"调教"一遍——大模型,就真的会说话了。

开场:补全机器 vs 对话助手

我们之前讲过,大模型的本质是**"Token 推 Token"的补全机器**——你给它开头,它顺着概率把后面接完。但这里有个问题:

  • 你输入"从前有座山",它接"山里有个庙",这叫补全,像自动补全输入法。
  • 你输入"帮我写一封辞职信",它回答"好的,以下是您需要的辞职信……",这叫对话,像真正的助理。

同样是预测下一个字,为什么前者像"续写",后者却像"听懂人话"?关键就在于一套叫 Chat Template + SFT 的训练范式。 这篇文章把它一层层拆开。

一、先统一对话格式:Chat Template

要让模型"听懂"对话,第一步不是教它说话,而是先约定对话长什么样。不然模型根本分不清哪句是你说的、哪句是它该回的。

OpenAI 的做法,是借鉴一个叫 Jinja 的模板语言,定义了两个特殊的记号(special token):

  • <|im_start|>:一条消息开始
  • <|im_end|>:一条消息结束

(不同模型记号名不同,GPT 系是 im_start/im_end,Llama 系是 <|start_header_id|> 等,思路完全一样。)

把三种角色拼成一段文本

对话里有三种角色,系统把它们拼成一段没有换行的文本,送进模型:

<|im_start|>system
你是一个乐于助人的助手。<|im_end|>
<|im_start|>user
帮我写一封辞职信。<|im_end|>
<|im_start|>assistant

看出门道了吗?最后一行停在 assistant 的开始处——模型的任务就是接着往下写,把 assistant 该说的话"补全"出来。

而这一切怎么组装、用什么记号包,就是 Chat Template(对话模板)。它是连接"人类对话"和"模型输入"的翻译器:

  • 发给模型的:永远是"系统提示 + 历史消息 + 当前问题"拼好的一段文本。
  • 模型的职责:从 <|im_start|>assistant 开始往后补全。

二、再教它怎么在这套格式下说话:SFT

光有格式还不够。如果你把一个只会"续写百科"的模型直接丢进这套格式,它大概率会乱写。所以第二步是 SFT(Supervised Fine-Tuning,指令微调):

用**海量"格式化对话数据"**继续训练模型,让它学会"在这种格式下,我该扮演 assistant,按 user 的要求给出回答"。

SFT 的数据长什么样

就是大量人工写好的高质量问答对,套上上面的模板:

  • user:"用一句话解释什么是光合作用"
  • assistant:"光合作用是植物利用光能,把二氧化碳和水转化为有机物并释放氧气的过程。"

模型的任务依然是"预测下一个 Token",只不过这次的"标准答案"从"百科原文"变成了"符合对话格式的优质回答"。训练数据告诉它:当遇到 <|im_start|>user 时,别再续写百科了,要像助理一样回答。

这一步为什么叫"指令微调"

因为它让模型学会了**"听懂指令并照做"**——你让它写诗它写诗,让它翻译它翻译,让它总结它总结。模型不再是"顺着文字乱接",而是"顺着指令办事"。

三、大力出奇迹:为什么 GPT-3 之后才"会说话"

其实 Chat Template + SFT 这套思路早在 GPT-3 时代就有雏形(比如 InstructGPT 的论文),但为什么真正"炸开"是在 ChatGPT?

答案四个字:大力出奇迹(Scale Up)。

  • 模型越来越大:GPT-3(1750 亿参数)→ ChatGPT → GPT-4(传闻万亿级),底座越强,微调出来的对话效果越好。
  • 数据越来越多:对话训练数据从几万条,涨到百万、千万、上亿条,覆盖的场景越来越全。
  • 效果指数级提升:底座模型"补全能力"强,加上足够多的"对话示范",模型才真正从"会接话"质变成"会聊天"。

一句话:SFT 是"教法",模型规模和数据量是"学生天赋 + 刷题量"。教法再好,学生太小、题太少也白搭;三者叠加,才诞生了 ChatGPT。

四、整套流程串一遍

环节 做什么 类比
预训练 PreTraining 在互联网海量文本上学会"接龙" 通读万卷书,掌握语言
Chat Template 统一对话格式,定义角色与记号 定好"该用什么称呼、怎么开口"的规矩
SFT 指令微调 用格式化对话数据训练"按指令回答" 专门练"怎么当助理"
对齐(RLHF 等) 进一步让回答更符合人类偏好 学会"什么话该说、怎么说更好听"

预训练给了它"语言能力",Chat Template + SFT 给了它"对话能力",后续的对齐给了它"讨人喜欢的能力"。

五、为什么说这是"学会说话"的那一步

回到开头的问题:从补全机器到对话助手,差的到底是什么?

  • 差的不是"更会预测下一个字"——底座模型本来就很会。
  • 差的是"在什么样的上下文中预测"——Chat Template 把"用户指令"和"助理应答"的关系明确写进了输入;SFT 则用海量示范,把"看到指令→给出答复"这个行为刻进了模型。

所以 OpenAI 的贡献,不只是做出更大的模型,更是找到并验证了"格式化 + 指令微调"这套让模型开口说人话的范式。后来的 Llama、Claude、Gemini,走的都是同一条路。

结语

  • Chat Template:一套对话格式约定,让模型分得清 system / user / assistant。
  • SFT:用海量格式化对话训练模型,让它学会"按指令作答"。
  • Scale Up:模型更大、数据更多,这套范式才真正"大力出奇迹"。

下次你看到大模型"一本正经地帮你写邮件",可以想一下:它其实只是在 <|im_start|>assistant 之后,顺着概率把话接完而已——只不过,有人专门教会了它"该怎么接"。

Chat Template + SFT:大模型终于学会「说话」
https://www.clxhxhhr.top/posts/4608/
作者
clxstart
发布于
2026-10-10
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。