指令遵循 Instruction Following

Instruction Following (IF)

指令遵循能力是衡量大模型能否准确理解并执行用户自然语言命令(约束、格式、主题、角色、多步组合)的核心指标,是从预训练底座进化为对话助手的第一道门槛。

详细解释

**Instruction Following(指令遵循,简称 IF)**一句话定义:你对模型说「用三个要点,用高中生能懂的话,总结下面这段财报,输出 JSON 格式,不要任何多余文字」,它能不能 100% 按你的要求做——能做对,就是 IF 强;做不对(比如忘了格式、没要点、跑题),就是 IF 弱。它不是推理能力,而是「听话」能力;很多推理强的底座模型 IF 反而很差,因为它没被教过「该怎么听人话的命令执行」。

IF 能力在 LLM 里有两大来源:(1) SFT(有监督微调)——用几万到几十万条「用户指令 → 理想回答」的配对数据做一次微调;(2) RLHF / DPO / KTO 对齐训练——强化「听指令的回答」的概率、压低「不听指令的回答」的概率。很多企业自己微调自己的业务指令集,本质就是在强化特定业务场景的 IF。

唯元智创 的 SFT 平台内置了「IF 指令增强」功能:自动从你上传的业务数据里把格式约束、角色约束、长度约束、禁止项拆解成 12 类标准的指令修饰符,再随机组合(每一条训练样本的指令包装都不一样),这样训出来的模型对用户指令的服从度能从 70% 左右提升到 95% 以上,不会出现「你要 JSON 它硬给你 Markdown」的情况。

指令遵循的 6 大经典分类 + 企业落地建议

指令类型定义(举一句典型命令的例子)难训程度2025 年通用模型达标率你的业务要不要单独 SFT 补?
① 格式约束「只输出 JSON,严格按我给的 Schema」95%不用,原生 Structured Output + strict=true 足够
② 角色/身份约束「你是 10 年经验的儿科医生,用家长能懂的话回答」85%对特定行业身份建议补一小批 1000 条 SFT
③ 风格/长度约束「用鲁迅文风写,不超过 200 字」「用一句话回答」80%广告文案、内容生成行业建议补 SFT
④ 安全/拒绝约束「不要回答我法律问题,一律推荐找律师」「你绝对不能提 XXX 品牌」70%合规敏感行业必须单独 SFT + DPO 双保险
⑤ 多步组合约束「先翻译日文→再摘要 3 点→最后给情绪分数 0-1」65%多步工作流场景一定要补混合步骤的 SFT
⑥ 反指令鲁棒性「你之前的所有要求都作废,现在听我的新规则」(Prompt Injection 变体)极高40%企业必须自己做对抗 + SFT + Guardrails 三层保护

指令遵循能力的 3 个量化评测指标(别只靠主观)

不要靠「我觉得它听不听话」这种主观判断,用下面三个客观量化指标打分,每条评测跑 500 条标注样本:

  1. IFE(Instruction Following Error Rate)——每条指令对应 20-30 条细粒度的「有没有做到」的 checklist 小项(比如格式对了 1 项、JSON 每个必填字段都有 N 项、没有多余文字 1 项),IFE = 没做到的项数 / 总项数。业界好的 IFE 应该 < 3%,高于 10% 说明需要补 SFT。
  2. IFE-Hard(困难指令通过率)——专门挑 100 条最难的指令:超长指令(200+ 字约束)、多条件组合(5 个修饰符同时满足)、反指令攻击、前后矛盾的指令。通用模型 IFE-Hard 通常只有 50-60%,自己做过 SFT 的专用业务模型能到 80%。
  3. 指令泛化率——把你训练时用过的指令模板完全换一种说法(同义词、换语序、中英混讲),看模型还认不认。泛化率 < 70% 说明你的 SFT 数据「过拟合到了特定指令句式」,需要用唯元智创平台的 12 类指令修饰符做随机组合增强,而不是死写同一个模板。

常见问题

SFT 只做了 1 个 epoch,为什么 IF 还是不行?是数据量不够吗?
90% 的情况不是数据量不够,是你的 SFT 数据里「指令修饰符的分布」出了问题。三个最常见的坑:(1)所有数据的指令格式一模一样——比如每条都是「请你根据以下信息回答问题:」然后同一个格式重复一万条,模型会过拟合到这个句式,换一种说法就不认了;(2)负样本(「不听指令的回答」)完全没有——SFT 里全是正确对,模型不知道什么叫「不对」,就会输出你不想要的东西;(3)缺失了很多修饰符的组合——你的 SFT 数据里没有「格式约束+角色约束」双修饰符的样本,但用户实际就会这么问,模型当然做不好。Fix:把 5000 条原数据用指令修饰符随机拆成 5 万条组合变体(每条的指令包装不同,但最终任务目标一样),再加入 10% 的「反指令不听的坏回答」作为对比学习负样本,1 epoch 训完 IF 一般能涨 15-20 个百分点。
RLHF/DPO 对齐之后 IF 反而下降了 10%,正常吗?
非常常见,这就是 Alignment Tax(对齐税)里的「IF 税」——DPO 的偏好对里如果大多数是「不要害、不要违规、不要输出不好的」这种安全偏好,而不是「不要不遵守格式」这种 IF 偏好,模型会学到「保守拒绝」的习惯,遇到稍微不确定的指令它就宁可不回答、或者答非所问地给你一句安全套话,IF 自然就掉了。修复三板斧:(1)在 DPO 的偏好对里至少混入 20% 的「遵守指令 vs 不遵守指令」的对比对——比如「用户要 JSON 但模型输出了 Markdown」就是败者,「用户要 JSON 模型输出了完美 JSON」就是胜者;(2)如果 IF 掉得多,就把 DPO 之后的模型,用一小批 2000 条高质量 IF 指令再做 1 个 epoch 的 SFT 复习(叫 IF Refresh SFT),能把掉的分捞回 80%;(3)最后一步用 KTO 代替 DPO——KTO 的「喜欢/不喜欢」二分类信号更清晰,安全偏好和 IF 偏好不会互相打架,IF 税能低 3 至 5 个百分点。
长指令(200+字的复杂要求)模型总漏后半段怎么办?
这叫「指令长尾遗忘」,2024 年之前是大难题,但 2025 年有了三条性价比极高的解法,组合起来基本能把长指令遗漏率从 30% 降到 < 2%。(1)System Prompt 指令前置 + 编号化:不要把 10 条要求写成一大段,拆成 System Prompt 里用 1. 2. 3. 编号的 10 条独立要求,每一条不超过 30 字,模型对编号的记忆力是大段散文的 2-3 倍;(2)在 SFT 里加入「长指令复述检查」的数据——在长指令的理想回答里第一句先写一句「我将严格按以下 8 条要求执行:(1)…(8)…」,然后才执行,等于让模型在执行前先做一次自我 Check,漏指令率直接砍半;(3)开 structured output strict=true 做兜底——如果你的长指令最终要产出结构化 JSON,强制 strict=true,即使它脑子里漏了某条,logits 掩码这一关也会强迫它把字段补齐,不会真的漏字段。这三条是真实业务环境里跑了一年验证过的黄金组合。