墨问群里有使用 DeepSeek-V4 的朋友反馈过一类现象:同一个问题,昨天答得挺像回事,今天换个说法再问,质量就掉了一大截。提示词明明没怎么动,模型却像换了个人。
偶尔出一次偏差不算什么,但如果反复出现,那就该是不确定性里藏着某种确定性了。昨天读了一篇文章,讲的是字节 Seed 团队的一项发现,恰好为这种位置相关的不稳定提供了一个工程层面的解释。急着看结论的朋友可以跳到文末的实用技巧部分。

论文在这里: https://ultimatejupiter.github.io/blog/periodic-weak-spots/
研究团队发现,在特定的检索和代码补全测试中,DeepSeek-V4 系列模型的表现会随着输入信息所在位置,以 4 个 Token 为周期规律地上下波动。在 128K 长上下文的检索测试里,Flash 基础模型最好位置组与最差位置组的准确率差距达到 40.2 个百分点。这确实能解释一种位置相关的波动,但还不足以断定群友遇到的问题就一定源于此。
40 个百分点有多大?用考试打个比方,30 分和 70 分之间,恰好隔着 40 分。当然,这里测的是一组检索任务的准确率差值,不能直接换算成日常聊天的质量感受,但量级上的意思很明确。
为什么会出现这个现象?我和 AI 讨论了几轮,大致理清了缘由。DeepSeek-V4 采用分块 KV Cache 压缩技术来降低长上下文的开销,其中 CSA 使用 8 个 Token 的压缩窗口,每隔 4 个 Token 启动一个新窗口。窗口之间有重叠,不同位置的信息在压缩和检索的过程中,能被保留下来、再被完整找回来的能力存在系统性差异。
打个比方:班里同学排成长队,老师每次把连续八个人的情况浓缩记在一张纸上,然后往前走四个人,再写下一张。摘要之间互相重叠,但每个人的信息未必都记得一样清楚。等模型稍后需要调取某个人的信息时,这个人站在摘要纸里的哪个位置,就可能直接影响查找效果。
这就是所谓的“相位敏感性”。这里的“相位”,指的是 Token 位置除以压缩步长后的余数。在研究测试的模型和任务中,弱点会沿着这个相位规律地重复出现。下面这张示意图可以帮我们建立直观概念:

压缩窗口和步长示意:周期与步长对应,图中仅展示 CSA 的分块关系。
研究还提到,后训练确实能提高准确率、缩小差距,但在已测试的版本中,周期性差异依然存在。比如 Flash 后训练版的差距降至 19.1 个百分点,Pro 后训练版为 14.8 个百分点。DeepSeek-V4.1-Flash 在该测试中的差距进一步收窄到 6.1 个百分点,不过其周期也随压缩步长变成了 2 个 Token。

同一检索实验中的位置组差距:40.2 个百分点来自 Flash 基础模型,后训练版本差距明显较小。
看到这里,自然会有新的疑问:其他模型会不会也有类似的毛病?
原理解释上看,采用类似分块 KV Cache 压缩的模型,理论上也可能出现同类问题。这口锅不该只让 DeepSeek 来背,因为研究者们在从头训练的小模型中也复现了这一现象。长上下文场景下,KV Cache 的内存开销实在太大,降低内存和注意力计算开销是业界常见的优化方向:有的按块压缩,有的用稀疏注意力,有的上滑动窗口。这几种机制并不等同。
固定分块可能带来位置相关的差异,但具体会不会显现、强弱如何,还要视架构和训练方式而定,不能仅凭“切块”两个字就匆忙下结论。
DeepSeek-V4 的波动之所以呈现规律的 4 Token 周期,是因为它与压缩步长直接对应:窗口大小是 8,步长是 4。别家的实现不同,表现出的周期和强弱可能并不一样,甚至压根没有明显周期性。
就这个问题,我还咨询了做模型的朋友。他说,哪怕不用分块压缩,模型大概率也会对位置敏感。
学术界早就有“Lost in the Middle”的说法:在所测试的模型和任务中,相关信息出现在长上下文的开头或结尾时,模型通常利用得更好;放在中间位置时,表现往往下降。人似乎也差不多,读文章时印象最深的经常就是头尾。这种现象在未采用上述分块 KV 压缩的模型中也曾出现过,但它和每隔几个 Token 就重复一次的相位弱点,是两种不同的位置现象,不能简单归结为注意力机制必然带有这个缺陷。
滑动窗口也不能一概理解成窗口之外的信息全都丢了。单层局部注意力确实无法直接访问窗口外的位置,但多层网络能够间接传递更早的信息,混合架构还可能保留其他记忆路径。具体能记住多少,要看模型的具体设计。
回到日常使用层面,我们真正能做的,是让关键信息更容易被模型捕捉到,再验证模型是否真的用对了地方。我总结了几条:
-
重要内容优先放开头或结尾。 在长文档、长代码或长对话中,把最关键的指令和相关信息安排在这些位置,是有研究依据的经验做法。不过效果仍取决于具体模型和任务,不能保证彻底消除分块压缩引起的相位弱点。
-
关键信息可以简洁地说两遍。 开头提一次,结尾呼应一次,以少量 Token 成本换取模型对重点的更好把握。重复内容要保持一致,别越说越复杂,也别指望重复就一定奏效。
-
对结果不满意时,不必急着“PUA”模型,可以挪挪关键信息的位置再问一次。 很多人看到 AI 事没办好,第一反应是改提示词,结果越改越复杂。这项研究说明,小幅调整信息位置也可能改变结果。需要注意,相位是按 Token 计算的,挪动一两句话之后,可能进入了不同相位,也可能仍停留在原相位。
-
关键结论要做交叉验证。 这一点我之前就写过,尤其在做 Coding 时,一次做到 95% 完成度的场景很少见。让模型自己多跑几轮 review,或者调用多个模型交叉检查,质量会可靠不少。
顺带一提,这类缺陷有可能随着训练方法和架构迭代逐步缓解,但什么时候消失、能否完全消失,目前还没有明确答案。今天总结的这些技巧,也可能随着模型更新而逐渐失效。这大概是 AI 时代技巧类内容的一种宿命:保质期难以预测,有用的时候也得看具体场景。