大模型原理 · 产品下面的模型

Chat Template + SFT

Jinja 格式、指令微调,大模型终于学会说话

本页解决的问题

先给结论

「Chat Template + SFT」要解决的关键问题是什么?

Jinja 格式、指令微调,大模型终于学会说话

判断标准

让这个结论先证明自己值得留下。 把这一页当成决策工具,而不是需要背下来的定义。把概念连到一个真实任务、一个可观察结果,以及一个能改变你判断的失败上。

下一步

写下一个问题:试完这个方法后,你能用什么证据回答它?

常见误区

结论听起来很完整,却没有检查最关键的假设。

OpenAI 约定好一套格式,然后专门针对这套格式再训练模型,大模型就真的会说话了
从补全到对话的演进
1
统一对话格式(Chat Template)
借鉴 Jinja 模板语言,定义 special token:<|im_start|> / <|im_end|> 包裹每条消息
2
按格式组装所有消息
system / user / assistant 三种角色,拼成一段没有换行的文本,送给模型
3
SFT(指令微调)
用海量「格式化对话数据」继续训练模型,模型学会了在这套格式下做助理,不再只是续写文本
4
大力出奇迹(Scale Up)
模型越来越大,训练数据越来越多:GPT-3 → ChatGPT → GPT-4,效果指数级提升
Chat Template 与 SFT 对比
点击切换视角
<|im_start|>system← 系统提示词角色标记 你是一个有帮助的 AI 助手。← System Prompt 内容 <|im_end|>← 结束标记
<|im_start|>user← 用户消息开始 紫霞仙子是谁? <|im_end|>
<|im_start|>assistant← 模型从这里开始补全 (模型补全区域)← SFT 训练模型如何在此处输出 <|im_end|>
SFT 之前(Base 模型)
用户:紫霞仙子是谁?
紫霞仙子是哥哥,哥哥你喜欢我,你说你喜欢我…
(继续按语料风格续写,完全不像在回答问题)
SFT 之后(Chat 模型)
用户:紫霞仙子是谁?
紫霞仙子是电影《大话西游》中的人物,由朱茵饰演。她是至尊宝命中注定的爱人,为了他付出了一切。
(懂得什么是回答,以助理身份作答)
SFT(Supervised Fine-Tuning)本质上还是 Token 预测,只是训练数据换成了「格式化对话 + 高质量回答」
模型学会了在 <|im_start|>assistant 之后输出像样的回答,不再续写语料。
这一刻,「补全机器」进化成了「对话助手」

「从补全到对话的演进」如何改变一次回答

「Jinja 格式、指令微调,大模型终于学会说话」说明,模型处理的不是我们眼中的“字数”,而是一段段 Token。Token 的切分方式会影响输入长度、上下文能放下多少内容,以及一次请求要花多少计算。

长度、信息量和上下文不是一回事

当「Jinja 格式、指令微调,大模型终于学会说话」变长时,先要分清三件事:文字被切成多少 Token、哪些内容真正参与当前判断、以及旧内容是否已经超出上下文窗口。删掉重复说明通常比单纯把窗口开得更大更有效。

先保留会改变判断的内容

可以用「Jinja 格式、指令微调,大模型终于学会说话」做一次对照:保留同样的问题,分别删掉重复背景、压缩格式和移除无关历史,比较答案质量、延迟与 Token 数量。

从「从补全到对话的演进」走到「点击切换视角」

「从补全到对话的演进」先把问题落在「1 统一对话格式(Chat Template) 借鉴 Jinja 模板语言,定义 special token: / 包裹每条消息 2 按格式组装所有消息 system / user / assistant 三种角色,拼成一段没有换行的文本,送给模型 3 SFT(指令微调) 用海量「格式化对话数据」继续训练模型,模型学会了在这套格式下做助理,不再只是续写文本 4 大力出奇迹…」上;到了「点击切换视角」,讨论继续推进到「Chat Template SFT 前后对比 ↺ 重播 system ← 系统提示词角色标记 你是一个有帮助的 AI 助手。 ← System Prompt 内容 ← 结束标记 user ← 用户消息开始 紫霞仙子是谁? assistant ← 模型从这里开始补全 (模型补全区域) ← SFT 训…」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。

把这条判断带到下一个场景

处理长文本时,先保留会改变结论的内容,再决定如何压缩格式和历史;上下文更长只有在新增信息真正有用时才值得付出代价。

  • 「从补全到对话的演进」:1 统一对话格式(Chat Template) 借鉴 Jinja 模板语言,定义 special token: / 包裹每条消息 2 按格式组装所有消息 system / user / assistant 三种角色,拼成一段没有换行的文本,送给模型 3 SFT(指令微调) 用海量「格式化对话数据」继续训练模型,模型学会了在这套格式下做助理,不再只是续写文本 4 大力出奇迹…
  • 「点击切换视角」:Chat Template SFT 前后对比 ↺ 重播 system ← 系统提示词角色标记 你是一个有帮助的 AI 助手。 ← System Prompt 内容 ← 结束标记 user ← 用户消息开始 紫霞仙子是谁? assistant ← 模型从这里开始补全 (模型补全区域) ← SFT 训…

最后的「最后把结论落到实践」把讨论落到「Jinja 格式、指令微调,大模型终于学会说话」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。

标记为已学完 阅读进度会自动记录
← 上一篇下一篇 →

继续阅读

同一条线上的下一篇。

文章讨论

读到这里,留下一个判断。

把刚想明白的地方、还没想通的问题,留给下一位一起学习的人。

正在讨论 Chat Template + SFT 产品下面的模型
3条讨论文章讨论 · 与共学社区同步
在共学社区查看
AM
Asha Morgan内容编辑
观点实践记录

我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。

文章讨论7 有帮助
LH
Lin Harper独立开发者
观点观点

读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。

文章讨论5 有帮助
KM
Kiki Moore产品运营
问题问题

如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。

文章讨论4 有帮助