Prompt工程师的日常:约束堆叠的诱惑

你写过这样的Prompt吗?

“请用JSON格式输出这段代码的摘要,语气要专业,要有数据支撑,控制在200字以内,明天早上前给我。”

三个约束:格式(JSON)+ 人设(专业)+ 紧迫性(明天早上前)。听起来合理对吧?

问题是:当你这样写的时候,你其实在做一个未经检验的假设——这些约束会线性叠加。论文里的实验数据告诉你,这个假设在GPT-4o上可能错得离谱。

这是今天要拆解的论文的核心问题:当你给LLM叠加多个约束时,性能退化是”1+1+1=3”,还是”1+1+1<3”?如果小于3,退化是否可以用各个约束的独立效果来预测?还是说存在超加性(super-additive)退化——组合效果比各部分加在一起还要差?

答案是:GPT-4o家族存在严重的超加性退化,最严重的情况比预测多损失了12.2个百分点


研究方法:3×3×3 全因子实验设计

论文的实验设计相当扎实。三个维度:

  • 格式约束:无约束、JSON格式、Markdown表格
  • 人设约束:无约束、初级开发者、专家开发者
  • 紧迫性约束:无约束、低紧迫性、高紧迫性

组合起来是 3×3×3 = 27种Prompt变体

测试集是 HumanEval+(164道编程题),覆盖5个模型:GPT-4o、GPT-4o-mini、GPT-4.1、o3-mini、Claude-sonnet-4-20250514。

总计 22,140次评估(27×164×5)。这个规模的 factorial study 本身就是对”叠加效应”问题的系统性回答,而不是某个特定”技巧”的局部验证。

关键的方法论贡献:论文将格式失败(输出根本不是要求的格式)和推理失败(格式对了但代码逻辑错)分开统计。这很重要,因为这两类失败对应的能力维度完全不同。


核心发现:GPT-4o家族的超加性退化

超加性退化(Super-additive Degradation) 的意思是:当你把三个约束的效果加在一起预测最终损失时,实际损失比预测值还要大。换句话说,多约束的组合效应不是各约束效果的简单加总,而是更差。

具体数据(pass@1 相对下降):

  • GPT-4o-mini + JSON + 专家人设 + 高紧迫性:-12.2个百分点,这是全数据集最大的超加性效应
  • GPT-4o 家族整体:超加性退化为 3-12个百分点
  • GPT-4.1:基本不受影响,在相同条件下几乎没有超加性效应
  • o3-mini:模式不同,不是简单的退化更严重,而是呈现出非线性的交互模式

最重要的结论是:这不是”小模型更容易退化”的问题。GPT-4.1比GPT-4o-mini小得多,但几乎免疫;GPT-4o-mini和GPT-4o(同家族)都有严重退化。这说明是架构差异(architecture)而不是规模差异(size)在决定超加性退化的程度。


为什么是”架构依赖”而不是”规模依赖”

直觉上我们可能会认为:大模型能力强,所以抗干扰能力强;小模型能力弱,所以多约束更容易崩溃。

但数据不支持这个直觉。

GPT-4.1(较小的模型)在多约束场景下几乎不受影响,而GPT-4o-mini(更小的模型)反而退化最严重。如果只看参数量或能力排名,你无法预测谁会超加性退化。

论文作者指向的是架构层面的东西——可能是注意力机制在处理多任务约束时的交互方式,可能是指令遵循模块与代码生成模块之间的冲突,可能是不同模型家族对”约束优先级”的不同处理策略。

这意味着:当你从GPT-4o切换到Claude或GPT-4.1时,你不能假设同一个多约束Prompt会表现相同。”换个模型试试”不是解决超加性退化的方法——你需要重新测试你的Prompt组合。


对Prompt工程的实际意义

这里有一个让人不舒服的推论。

大多数Prompt工程的实践是在做什么?找一堆”技巧”——加个”Think step by step”、加个”输出格式示例”、加个角色设定——然后在某个特定问题上测试一下效果。如果变好了,就认为这个技巧”有效”,然后把这个技巧加入自己的Prompt模板。

这种recipe tuning的方法,在单约束场景下可能work。但当你组合多个”有效”约束时,超加性退化意味着:你以为在改进,实际上可能在引入新的损失。

论文的隐含建议是:Prompt工程需要从recipe tuning转向因子回归(factorial regression)——系统性地测试约束之间的交互效应,而不是假设它们线性叠加。

但坦白说,这很难执行。22200次评估是学术研究可以承受的代价,普通开发者负担不起。所以论文更务实的建议可能是:在你的实际用例上,每次只改变一个约束,观察效果是否线性,然后对那些你觉得可能存在交互的约束组合做额外测试。


总结:对”再补一句”说的不

回到文章开头那个例子。当你写:

“请用JSON格式输出,要有数据支撑,明天早上前给我。”

你实际上是在同时测试三个变量,而你只有一次实验机会(Prompt发出去,模型回复回来)。

这篇论文告诉我的是:在GPT-4o家族上,这种做法存在真实的、可量化的风险。最坏情况下,你预期的3个百分点退化可能变成12个百分点——不是因为某个约束本身有问题,而是因为它们组合在一起产生了额外损失。

所以,下次你想”再补一句约束”的时候,也许先问自己:这一句加上去,是帮我,还是在帮我挖坑?

至少在GPT-4o上,这个问题的答案比你想象的更不确定。