关键词:多轮对话、数据蒸馏、Self-Chat、User Simulator、Self-Distillation
阅读对象:想搞懂开源对话模型(Vicuna/Zephyr 之流)的多轮对话数据都是怎么来的同学
0. 先搞清楚"多轮对话数据蒸馏"在解决什么问题
单轮指令蒸馏很简单:给教师模型一个 prompt,拿到一个回答,组成 (x,y)(x, y)(x,y) 训练对就完事了。但多轮对话不一样,它是一条交替进行的序列:
C={(u1,a1),(u2,a2),…,(uT,aT)}
\\mathcal{C} = \\{(u_1, a_1), (u_2, a_2), \\dots, (u_T, a_T)\\}
C={(u1,a1),(u2,a2),…,(uT,aT)}
| utu_tut | 第 ttt 轮用户(user)说的话 |
| ata_tat | 第 ttt 轮助手(assistant)的回答 |
| C\\mathcal{C}C | 一整条多轮对话 |
| TTT | 对话总轮数 |
难点在于:utu_tut 也需要被"生成"出来——真实世界里,用户会追问、会纠正、会换话题,这种"人味儿"很难凭空编。而且要让 ata_tat 依赖前面 u1,…,ut−1,a1,…,at−1u_1,\\dots,u_{t-1},a_1,\\dots,a_{t-1}u1,…,ut−1,a1,…,at−1 的完整上下文,不能像单轮数据那样简单拼接。于是"多轮对话数据蒸馏"要回答的核心问题就是:
怎么低成本地、大规模地、自动地造出高质量的 C\\mathcal{C}C,并且尽量还原真实多轮交互里那些"人来疯"的特性(追问、纠错、话题跳转)?
下面五篇论文,分别从"左右互搏"“双智能体分工”“推理链路显式化”“用户模拟器”"自己纠正自己"五个角度回答了这个问题。
┌─────────────────────────────┐
│ 多轮对话数据蒸馏五种范式 │
└─────────────────────────────┘
│
┌──────────┬──────────────┼──────────────┬──────────┐
│ │ │ │ │
Baize UltraChat DOCTOR PlatoLM FiC
左右互搏 双智能体分工 推理链显式化 用户模拟器 自蒸馏纠偏
(同一模型) (提问/回答分离) (先想后说) (专门学"怎么问") (single→multi)
1. 论文一:Baize——让 ChatGPT 自己跟自己聊天
《Baize: An Open-Source Chat Model with Parameter-Efficient Tuning on Self-Chat Data》(Xu et al., EMNLP 2023, arXiv:2304.01196)
1.1 核心思路:Self-Chat(左右互搏)
不需要真人,也不需要两个不同的模型,只用一个 ChatGPT,靠一份模板 prompt 逼它同时扮演"用户"和"AI"两个角色,自问自答生成一整条多轮对话:
种子问题 q0 →ChatGPT 自我扮演 u1,a1,u2,a2,…,uT,aT
\\text{种子问题 } q_0 \\;\\xrightarrow{\\text{ChatGPT 自我扮演}}\\; u_1,a_1,u_2,a_2,\\dots,u_T,a_T
种子问题 q0ChatGPT 自我扮演u1,a1,u2,a2,…,uT,aT
种子问题 q0q_0q0 来自 Quora、StackOverflow 等平台的真实提问,保证话题够真实、够多样;之后整条对话由模型"一口气"生成,不需要每轮单独调用 API,成本很低。
1.2 进阶技巧:Self-Distill with Feedback(SDF)
光靠 self-chat 生成的数据仍有噪声,Baize 又加了一步"自我蒸馏+反馈":让 ChatGPT 对已生成的回答给出反馈/打分,再据此筛选或修正数据,相当于加了一道质检工序:
(ut,at) →ChatGPT 反馈 score(at) ⇒ 保留/丢弃/重写
(u_t, a_t) \\;\\xrightarrow{\\text{ChatGPT 反馈}}\\; \\text{score}(a_t) \\;\\Rightarrow\\; \\text{保留/丢弃/重写}
(ut,at)ChatGPT 反馈score(at)⇒保留/丢弃/重写
最后用 参数高效微调(LoRA) 把这份自建语料喂给 LLaMA,得到 Baize 模型。
一句话总结:不用两个模型、不用真人参与,靠一份精心设计的角色扮演模板,就能让一个模型"左右互搏"出大规模多轮对话数据。
2. 论文二:UltraChat——把"提问"和"回答"拆给两个 AI 智能体
《Enhancing Chat Language Models by Scaling High-quality Instructional Conversations》(Ding et al., EMNLP 2023, arXiv:2305.14233)
2.1 双智能体设定
跟 Baize"一人分饰两角"不同,UltraChat 用两个独立的 ChatGPT 实例分工合作:
Agentuser→utAgentassistant→atAgentuser→ut+1⋯
\\text{Agent}_{user} \\xrightarrow{u_t} \\text{Agent}_{assistant} \\xrightarrow{a_t} \\text{Agent}_{user} \\xrightarrow{u_{t+1}} \\cdots
AgentuserutAgentassistantatAgentuserut+1⋯
- 一个实例专门负责扮演"用户",在给定的话题/意图框架下不断追问、深挖;
- 另一个实例专门负责扮演"助手",尽力回答。
这种角色分离让"用户"这一方也能被系统性地设计——UltraChat 精心设计了三大类话题(通用知识问答、创作与写作、辅助改写与生成),并为每一类设计单独的对话生成框架,而不是让模型"随便聊"。
2.2 规模与效果
- 最终生成 150 万条(1.5M) 高质量多轮对话,规模上远超同期的 Baize(10万条量级);
- 论文从"规模、平均长度、多样性、连贯性"等多个统计维度证明了 UltraChat 数据集的质量优势;
- 微调出的 UltraLLaMA(即 UltraLM)在评测上超过了当时的 SOTA 开源模型 Vicuna。
一句话总结:Baize 是"一人分饰两角",UltraChat 是"两个专职演员对戏"——角色分离带来了更好的可控性和更大的规模。(顺带一提,后来大名鼎鼎的 Zephyr-7B 用的正是 UltraChat 的过滤版本。)
3. 论文三:DOCTOR——多轮对话里,常识推理不能"想都不想就说"
《Dialogue Chain-of-Thought Distillation for Commonsense-aware Conversational Agents》(Chae et al., EMNLP 2023, arXiv:2310.09343)
前两篇解决的是"怎么造对话",这篇解决的是"造出来的对话回答质量够不够聪明"——具体来说,是多轮对话里的常识推理(commonsense reasoning)问题。
3.1 问题:证据散落在好几轮对话里
人类聊天时经常"话里有话",要听懂弦外之音,得把散落在好几轮对话里的隐含信息拼起来:
证据1∈u1, 证据2∈a2, 证据3∈u5 ⟹ 推理出弦外之音 ⟹ a6
\\text{证据}_1 \\in u_1,\\, \\text{证据}_2 \\in a_2,\\, \\text{证据}_3 \\in u_5 \\;\\Longrightarrow\\; \\text{推理出弦外之音} \\;\\Longrightarrow\\; a_6
证据1∈u1,证据2∈a2,证据3∈u5⟹推理出弦外之音⟹a6
哪怕是大模型,要在"单跳(single-hop)"内做到这种跨轮次证据整合都很吃力,更别说小模型了。
3.2 解法:把"怎么想"显式蒸馏出来
DOCTOR(以及配套方法 DONUT)的做法是:先让大模型显式地把"推理链条"写出来(相当于对话版的 Chain-of-Thought),再把这条推理链和最终回答一起作为蒸馏目标,教小模型不仅要学“说什么”,更要学“怎么想”:
(u1,a1,…,ut⏟对话历史) →大模型显式推理 rt⏟中间推理链 → at
(\\underbrace{u_1,a_1,\\dots,u_t}_{\\text{对话历史}}) \\;\\xrightarrow{\\text{大模型显式推理}}\\; \\underbrace{r_t}_{\\text{中间推理链}} \\;\\xrightarrow{}\\; a_t
(对话历史u1,a1,…,ut)大模型显式推理中间推理链rtat
学生模型蒸馏的目标不再只是 (x,at)(x, a_t)(x,at) 这种"输入-输出"黑盒映射,而是 (x,rt,at)(x, r_t, a_t)(x,rt,at)——把中间推理过程也当成监督信号的一部分。
一句话总结:多轮对话不能只蒸馏"说了什么",还要把"怎么把好几轮的线索串起来想明白"这件事本身显式地教给学生模型。
4. 论文四:PlatoLM——与其造"回答",不如先学会造"像人一样的提问"
《PlatoLM: Teaching LLMs in Multi-Round Dialogue via a User Simulator》(Kong et al., ACL 2024, arXiv:2308.11534)
这篇论文的洞察很有意思:大家都在拼命优化"助手模型"怎么回答得更好,却很少有人认真优化"用户模拟器"怎么问得更像真人——而后者其实同样关键,甚至更关键。
4.1 反过来训练:先做用户模拟器 Socratic
论文提出一个"反过来"的训练顺序:
真实人机对话语料 →只抽取其中的用户提问 ut 训练用户模拟器 Socratic
\\text{真实人机对话语料} \\;\\xrightarrow{\\text{只抽取其中的用户提问 } u_t}\\; \\text{训练用户模拟器 Socratic}
真实人机对话语料只抽取其中的用户提问 ut训练用户模拟器 Socratic
Socratic →生成大量拟人化多轮提问 SocraticChat 数据集 →再喂给答案模型 PlatoLM
\\text{Socratic} \\;\\xrightarrow{\\text{生成大量拟人化多轮提问}}\\; \\text{SocraticChat 数据集} \\;\\xrightarrow{\\text{再喂给答案模型}}\\; \\text{PlatoLM}
Socratic生成大量拟人化多轮提问SocraticChat 数据集再喂给答案模型PlatoLM
关键区别在于:Vicuna、UltraLM 这类工作,训练数据里的用户提问要么直接抄真实语料、要么由模型"角色扮演"生成;而 PlatoLM 专门为"提问"这件事训练了一个独立模型(Socratic),让它学会真实用户那种带追问、带纠错、带话题跳转的"人味儿"提问模式。
4.2 效果
- 用 Socratic 生成的 SocraticChat 数据训练出的 PlatoLM,在 MT-Bench 上取得了同期 LLaMA-based 7B 模型中的 SOTA 表现;
- 论文的消融实验证明:换成更像人类的提问模式,比换更强的回答模型对多轮表现的提升更大——这也解释了为什么"回答模型选型"不该是多轮对话优化的唯一发力点。
一句话总结:多轮对话数据蒸馏里,“怎么问"和"怎么答"同样重要——甚至,专门训练一个模型来学习"像人一样提问”,投入产出比可能更高。
5. 论文五(最新):Found in Conversation——不靠外部教师,自己纠正自己的多轮短板
《Found in Conversation: LLMs Teach Themselves to Close the Multi-Turn Gap》(Chen et al., 2026, arXiv:2605.24432)
前四篇都依赖一个更强的外部教师(ChatGPT/GPT-4)。这篇很特别:它指出的问题是——就算是最前沿的模型,也存在明显的"多轮不如单轮"现象(“Lost-in-Conversation”),既然找不到更强的外部教师来"兜底",那就只能自己教自己。
5.1 问题现象
同一份任务信息,一次性单轮给模型 vs. 拆成好几轮逐步透露给模型,后者的表现明显更差——这是 2025 年一篇相关工作(LLMs Get Lost In Multi-Turn Conversation)首先系统证实的现象,多个任务上平均降幅可达 39%。
5.2 核心方法:View-Asymmetric Self-Distillation(视角非对称自蒸馏)
FiC 的关键洞察是:同一个模型,自己在"单轮视角"下的表现,天然比"多轮视角"下强——那不如直接拿模型自己的单轮能力,来纠正它自己的多轮短板:
πθ(⋅∣单轮、信息一次性给全)⏟教师视角(强) ⟶ 蒸馏 ⟶ πθ(⋅∣多轮、信息逐步透露)⏟学生视角(弱)
\\underbrace{\\pi_\\theta(\\cdot \\mid \\text{单轮、信息一次性给全})}_{\\text{教师视角(强)}} \\;\\longrightarrow\\; \\text{蒸馏} \\;\\longrightarrow\\; \\underbrace{\\pi_\\theta(\\cdot \\mid \\text{多轮、信息逐步透露})}_{\\text{学生视角(弱)}}
教师视角(强)πθ(⋅∣单轮、信息一次性给全)⟶蒸馏⟶学生视角(弱)πθ(⋅∣多轮、信息逐步透露)
注意这里"教师"和"学生"其实是同一个模型的两种视角(view):一个看到的是任务信息一次性给全的单轮 prompt,另一个看到的是同样信息被拆散成多轮、循序透露的欠说明(underspecified)prompt。用这种"左右互搏但视角不对称"的方式做自蒸馏,模型不需要外部更强的老师,就能把自己在单轮场景下展现出的能力,迁移、找回到多轮场景里——这也是论文标题 Found in Conversation 的由来:能力本来就在模型自己身上,只是在多轮场景下"丢"了,现在把它"找回来"。
一句话总结:当外部已经没有更强的老师可以蒸馏时,"自己的强视角教自己的弱视角"是最后一张能打的牌——这也是"数据蒸馏"这个概念本身的一次有趣延伸:蒸馏的对象不一定是另一个模型,可以是同一个模型的另一面。
6. 五篇论文横向对比表
| Baize | 2023(EMNLP) | 怎么低成本造多轮对话 | 单模型 Self-Chat + 自我反馈修正(SDF) | 需要(ChatGPT) |
| UltraChat | 2023(EMNLP) | 怎么规模化、可控地造多轮对话 | 双智能体分工(专职提问 vs 专职回答) | 需要(ChatGPT ×2) |
| DOCTOR/DONUT | 2023(EMNLP) | 多轮里的隐含常识推理教不会 | 显式蒸馏"推理链"而不只是答案 | 需要(大模型显式推理) |
| PlatoLM | 2024(ACL) | "提问"质量被严重低估 | 单独训练"用户模拟器"Socratic | 需要(真实人机对话作为提问语料) |
| Found in Conversation | 2026 | 前沿模型自身也有多轮短板,找不到更强教师 | 视角非对称自蒸馏(单轮教多轮) | 不需要,自己教自己 |
时间线也很说明问题:2023 年集中解决"怎么造数据"(Baize、UltraChat)和"数据里该有什么"(DOCTOR 的推理链、PlatoLM 的拟人提问);到了 2026 年,连"谁来当教师"这个前提都被打破了(FiC 证明可以不需要外部教师)。





