你让文心一言「写得详细」,同一份提示里又写「全文不超过一百字」,两条要求没法同时满足,输出却往往照样出现。指令冲突时模型怎么选,是提示工程里很实际的问题,这篇从原理讲到落地。
先说机制:模型没有一张「冲突裁决表」,它在生成每个词块时同时参考所有指令,冲突的两条要求各自把概率往不同方向拉,最终的输出像两股力的合力。哪股力更强,取决于三个因素:指令所处的位置,越靠系统区越强;指令的表述强度,具体数字比模糊形容强;指令与当前生成内容的距离,越近越容易被照顾。换成讯飞星火、Kimi 也大体如此,差别只在权重细节。
用一个实例走一遍。提示里同时有「面向小学生」和「输出带完整术语表」两条要求:前一条拉向浅白表达,后一条拉向密集术语,两股力最终妥协出一种奇怪的中间态——正文很浅白,末尾却挂着一张没人看得懂的术语表。这就是合力式输出的典型样子:哪边都没完全赢,哪边也没完全输。
冲突最常见的三种来源
一是时间造成的:改到第五版提示时忘了删第一版的老要求,新旧两条并存。二是层次造成的:示例与文字要求矛盾,比如文字说只要要点、示例却给了全文。三是表达造成的:「详细一些」和「控制在三百字」未必冲突,但「详细一些」遇上「一句话说清」就必冲突。写完提示做一次通读,三类来源各扫一遍,能消掉大半。
三类来源的成因、例子和排查入口各不相同。
| 冲突来源 | 怎么形成的 | 本篇的例子 | 扫一遍时看什么 |
|---|---|---|---|
| 时间 | 改版时旧要求没删,新旧两条并存 | 改到第五版,第一版的老要求还留着 | 新旧版本的要求是否都还在 |
| 层次 | 示例与文字要求互相矛盾 | 文字说只要要点,示例却给了全文 | 示例与文字要求是否口径一致 |
| 表达 | 两个模糊形容顶在一起,没法同时满足 | 「详细一些」遇上「一句话说清」 | 有没有写明「以哪条为准」 |
帮模型减少犹豫的办法
落地做法有四条。一,改版提示时全文重读一遍,删掉被覆盖的老指令;二,把优先级写明白,例如「以字数要求为准」,给模型一个显式的裁决规则;三,让示例与文字要求口径一致,示例是隐形的强指令;四,长对话里在新消息开头简要重申关键要求,抵住逐轮稀释。四条里第二条见效快,成本也低。
举例说,你只想改第一条规则,就在编辑时顺手翻一遍全文;你发现输出偶尔忘了格式,就在新消息开头补一句「仍按第一轮的表格格式回复」。这两个小动作覆盖了大部分日常冲突场景,比重新写一份长提示划算。
冲突没消干净的样子
冲突没消干净会有什么表现?常见三种:输出在两种要求之间来回摇摆、开头守规矩后头放飞、两条要求各执行一半。看到这些迹象,先别怪模型不听话,回头查提示里是否有两条要求在打架,大多数「不听话」都能在提示里找到根。记录每次改动时顺手标注删掉了哪条要求,下一次排查就能少翻一轮旧版本。
冲突排查三步
- 新旧版本的要求是否都还在?
- 文字要求与示例是否口径一致?
- 有没有写明「以哪条为准」?
第三步最省力也最见效,一句裁决规则能省掉大量来回。
冲突处理和角色设定也有关系,角色自带的行为习惯可能与你列的规则相抵,机制见角色设定;系统区指令为什么通常占上风,见系统提示;长度类要求与其他要求相撞的情形,见回答长度;一类特殊的反向拉扯是负面指令,它的失效方式详见负面指令;示例先后带来的倾向变化,见示例顺序。
换个问法再问指令冲突三句
- 模型会明确告诉我它发现了冲突吗?:有时会,多数时候它默默选边,输出里看不出犹豫,需要你主动检查。
- 两条冲突指令,后出现的那条总是赢吗?:不一定,位置靠前但在系统区的指令往往更强,就近效应只在其他条件相近时占优。系统区的分量在多数产品里都更重。
- 写「必须严格遵守」有用吗?:有一点,但治标不治本,删掉冲突源才是根本办法,加码措辞只是把矛盾往后推。


