2025年6月20日

指令调优与对话调优

指令调优让模型学会「听从指令执行任务」,对话调优进一步让模型能在多轮对话中持续交互。

知识库大模型训练与对齐llmmodelsftinstruction-tuning

先说结论

指令调优让模型学会「听从指令执行任务」,对话调优进一步让模型能在多轮对话中持续交互。

为什么我会单独记这一篇

预训练模型只能「续写文本」,不能「回答问题」。指令调优弥合了「续写」和「执行指令」之间的差距,对话调优进一步让模型能维护上下文进行多轮对话。

先把核心脉络捋清楚

指令调优数据格式(Alpaca 格式)

{
  "instruction": "将以下英文句子翻译为中文。",
  "input": "The weather is beautiful today.",
  "output": "今天天气真好。"
}

对话调优数据格式(ChatML / OpenAI 格式)

{
  "messages": [
    {"role": "system", "content": "你是一个有帮助的AI助手。"},
    {"role": "user", "content": "什么是量子计算?"},
    {"role": "assistant", "content": "量子计算是利用量子力学原理..."},
    {"role": "user", "content": "能再简单解释一下吗?"},
    {"role": "assistant", "content": "好的!可以把它想象成..."}
  ]
}

各模型的特殊 Token

模型 格式
Llama 3 <|begin_of_text|><|start_header_id|>system<|end_header_id|>...
Qwen 2 <|im_start|>system\n...<|im_end|>
ChatGLM [Round 1]\n\nHuman: ...\n\nAssistant: ...
Mistral [INST] ... [/INST]

HuggingFace 的 tokenizer.apply_chat_template() 统一了这些差异。

原理拆开看

指令调优 = 单轮任务执行,每条数据独立 对话调优 = 多轮上下文维护,需要处理指代消解、话题管理

Loss 计算策略:

  • System 消息:不计算 loss
  • User 消息:不计算 loss
  • Assistant 消息:计算 loss

与相邻概念的区别

维度 指令调优 对话调优
目标 任务执行 多轮交互
轮次 单轮 多轮
上下文 无需维护 必须维护
数据格式 instruction/input/output messages(role-based)
代表数据集 FLAN, Alpaca, Dolly ShareGPT, UltraChat, OpenAssistant
训练难度 较低 较高
下游应用 任务型 API 通用聊天助手

设计时真正要权衡什么

  • Chat Template 统一性:训练和推理必须使用完全相同的 template,否则模型行为会不一致
  • 单轮 vs 多轮混合:实践中通常混合使用,先建立任务能力再用对话数据微调
  • 合成数据 vs 人工数据:GPT-4 合成数据量大但可能有偏差,人工数据质量高但成本高

容易踩的坑

  1. Template 不一致:训练用 Alpaca 格式,推理用 ChatML,模型行为异常
  2. 上下文截断:多轮对话超过模型长度时处理不当
  3. 数据偏差:合成数据中模型偏好强模型的风格

工程落地时我会怎么做

  • 指令调优适合垂直领域任务型应用(客服、文档处理、代码生成)
  • 对话调优适合通用 AI 助手产品
  • 工业中通常结合使用:先指令调优建立基本能力,再对话数据微调交互能力

如果要对外讲,可以怎么概括

"指令调优是让预训练模型学会听从自然语言指令,通常用单轮的 instruction-input-output 格式。对话调优进一步让模型能在多轮对话中维护上下文,使用基于角色的 messages 格式。关键点是 Chat Template 必须在训练和推理时完全一致,否则模型行为会偏离。现代做法是混合使用指令数据和对话数据进行多阶段 SFT。"

最后记几条

  1. 指令调优 = 任务执行,对话调优 = 多轮交互
  2. Alpaca 格式 vs ChatML 格式的区别
  3. Chat Template 训练/推理一致性至关重要
  4. LIMA 证明 1k 高质量数据可以超越 52k 低质量
  5. 合成数据(GPT-4 生成)成为主流但需注意偏差

延伸阅读

参考资料

  • FLAN (Wei et al., 2022) — 指令调优先驱
  • Alpaca (Stanford, 2023) — Self-Instruct 方法
  • HuggingFace Chat Templates 文档
  • LIMA (Zhou et al., 2023) — 少量数据对齐