一句话速览
从"只会续写文字的补全机器",到"会跟你聊天、听你指挥的对话助手",中间差的不是更聪明的模型,而是一套训练范式:先用
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 之后,顺着概率把话接完而已——只不过,有人专门教会了它"该怎么接"。