指令位置问题:你在提示词中放置内容的位置,就是一个架构决策
你写了一个清晰的系统提示词。在测试环境中验证通过后,你将它部署上线了。三周后,一名用户发现你的安全约束并不能稳定触发——不是因为什么精妙的越狱手段,而是因为你在上个迭代中新增了一个400 token的上下文块,恰好把那条约束顶到了后面。模型就这样……忘了它的存在。
这就是指令位置问题——它不是你提示词里的一个bug,而是基于Transformer的模型处理序列的结构性属性。你提示词中的每一个token,并非获得相同的注意力权重。你放置指令的位置,以一种可量化的方式,决定着模型是否会遵从它。
大多数团队是通过莫名其妙的功能退化才发现这一点的。一个原本表现良好的提示词,在一次"只是增加了更多上下文"的常规更新后开始出问题。真正的原因——指令位置偏移——很少出现在事后复盘中,因为工程师们根本没有这样的心智模型去寻找它。
U形注意力曲线
长上下文LLM的研究已经持续揭示了一种被称为"中间丢失"(lost in the middle)的现象:当相关信息位于提示词的开头或结尾时,模型能正确使用它;而当它位于中间时,性能会显著下降。
在多文档问答任务中,将包含答案的文档从20个文档组的第1位移到中间位置,准确率会下降30%甚至更多。这一发现并非个例,它在GPT-3.5、GPT-4以及专为长上下文设计的模型上都得到了验证。扩大上下文窗口并不能解决这个问题——只是把悬崖推得更远而已。
根本原因在于位置编码的工作方式。现代LLM普遍采用的旋转位置编码(RoPE)引入了距离衰减机制:两个token之间的注意力会随着它们之间的距离增加而减弱。这是一个有意为之的设计选择——它让局部上下文比远端上下文更显著,这对语言建模很有用。但它有一个结构性的副作用:长序列中间的token所获得的聚合注意力,弱于序列端点的token。
结果就形成了一条U形的性能曲线。开头和结尾是可靠的,中间则不是。
指令遵从率随位置下降
"中间丢失"效应适用于检索任务。那么指令遵从呢?
同样的位置偏差在指令遵从基准测试中也有所体现。针对细微提示变体可靠性的研究发现,即使语义意图保持不变,现代模型在指令被改写或重新定位时,性能方差高达61.8%。行为约束类指令——也就是那些规定模型绝对不能做什么的指令——退化最为严重。
