Kratoq
← 全部 Bench Notes
POST B / 4·OUTPUT LENGTH·2026

长度不是你定的,是你的措辞定的

我们只改了一条长度指令的措辞,别的没动。输出从 340 字摆到 644 字——同样的证据,长度差了近一倍。而一个藏着的下限,一直在悄悄给单薄的 finding 注水。

modelclaude-opus-4-8
taskCh.1 Foundation synthesis
knoblength instruction
evidencefrozen · identical

我们以为自己在告诉模型每条 finding 该多长。其实我们只是在给它一个暗示,而这个暗示干了大部分的活。每次喂它一模一样的八条源,只改那句谈长度的话,输出的变化就比内容本身大得多。下面是同一份简报在四种措辞下的样子。

1 · 措辞定长度

same sources · default effort

"≤800,简洁" 给出的 finding 在 340 字上下。"400–800"——我们现在的 prompt——把它们拉到 400 左右。"≥400,按需要写多长" 推到了 ~520。把这条指令整个拿掉,模型停在 640 上下。这几种之间,证据没有任何变化。长度是由我们怎么问决定的,不是由有多少可说决定的。

Fig.B1mean chars / finding · by length instruction
200400600340≤800, concise401← current400–800519≥400, as needed644no instruction
光靠措辞就 1.9×。同样的源、默认档。那句描述长度的话把输出从 340 挪到 644 字——模型没有一个稳定的"自然"长度会显露;你暗示多长,它就写多长。

2 · 下限在悄悄注水

400–800 vs no floor

"400–800" 这个区间看着人畜无害。其实不是,因为它递给模型一个下限,模型就靠上去了。区间在时,finding 挤在 400 附近,很少低于 ~370,哪怕这个点很单薄。把下限拿掉,同样的 finding 落到自然的 340,有的低到 296。这个下限守的不是标准,是在逼模型写填充物去够那个数。

Fig.B2chars / finding · range + mean · default effort
400 floor369435with the 400 floor296399floor removed250300350400450
有下限去掉下限
下限买来的是注水,不是质量。点 = 均值,条 = 一份简报内各 finding 的最小–最大。有下限时,finding 停在 400 附近;去掉后整个分布下移 ~60 字,内容真单薄处会跌破 400。

3 · 一松手,长度跟着内容走

the upside of no bounds

去掉约束,做的不只是把东西变短。它让 finding 不再千篇一律。在 "400–800" 下,它们彼此只差 65 字上下——每条都差不多大,不管它要扛多少。松开约束,这离散度一下窜过 200。要覆盖很多的那条就写长,单薄的那条就保持短。这才是你真正想要的:长度在传递信息,而不是在填配额。它并非纯由内容驱动——模型仍会漂向一个惯用长度——但主导的是措辞,而真正在造成伤害的,是那个下限。

Fig.B3length spread within one brief · by instruction
10020066400–800103≤800111≥400215free
规则越紧,产出越齐。离散度 = 一份简报里最长和最短 finding 的字数差。它随约束放松而上升——完整 400–800 区间是 66、单边约束 ~105、无约束 215——最松的那档,才让每条 finding 按内容该有的长度去写。

三个旋钮,不是一个

separate what you fused

很容易把"答案有多长"当成一个设置。它其实是三个:模型想多少、说多少、以及界面能显示多少。我们把后两个焊成了一个 prompt 夹子。这夹子给单薄的答案注水、本会截断丰富的答案,还——像 effort 篇发现的那样——悄悄搅浑了我们另一个正在跑的实验。如果你非得给长度设界,用一个绑在真实布局上的上限,别用下限。剩下的交给内容决定。

Bench note · honest edges

单案例、单综合步骤、单模型。长度数字是默认档的单次均值;离散度是每份简报内的。模型即便自由也仍有个惯用长度——"无约束"是放大了变化,不是把长度纯交给内容。方向性的,不是研究。