注意力
如今支持超长上下文 (1M) 开源模型普遍采用稀疏注意力机制,在生成下一个词时,模型的“查询”(query)能接触到的信息是经过筛选的。常见的做法是:通过一个索引器挑出最相关的若干块(top-k),或者对原始 token 进行压缩后再精读。这一方面大幅降低了计算复杂度,另一方面也让模型对上下文的召回能力在某些场景下变得略显模糊。
以下举两个近期热门的开源模型的注意力机制的例子。
常见开源模型的注意力机制
1. DeepSeek V4
首先是国模之光 DeepSeek V4。大家对其评价为该模型具有非常强的执行力,但由于该模型后训练较差,不太适合许愿式编程/出设计方案/代码审计。
DeepSeek V4 采用了 CSA (压缩稀疏注意力) + HCA(重度压缩注意力) 的机制,对上下文的印象来源于(假设当前上下文长度为 1M):
- HCA,原文每相邻 128 token 为一组压缩为 1 token1 的 78122 token 的信息,全部注入
- CSA,原文每相邻 4 token 为一组压缩为 1 token(共 ~250K token),再由 Indexer 从中精选出 1024 个 token 注入
- SWA,距离当前 query 最近的 128 token 的无损信息
总计约 8964 个 token 的信息参与决策 (在 1M 上下文填满的情况下)。
值得留意的是,DeepSeek 的一个 query 对历史上下文的读取中,唯一无损的部分只有当前最近的那 128 个 token,其余信息都是经过压缩的。
2. GLM 5.2
GLM 5.2 沿用了 GLM 5 的注意力机制。与应用在 DeepSeek-V3 的 DSA 类似,会使用 Indexer 选出与当前最相关的未压缩的 2048 token 信息,加上离当前 query 最近的 4096 token。
总共大约 6144 token 的无损原始信息。
压缩注意力可能带来的问题
知道了这些开源大模型有可能会对上下文进行压缩表达之后,你就应该理解在某些情况下让部分大模型做大海捞针型的上下文召回任务是比较困难的,例如 DeepSeek V4 对上下文的所有认知都是经过压缩的,你不太应该指望它在一些从大段文本里找到某个数字、或者跨段落多跳精确召回的任务里表现得有多好了。
另外压缩注意力还可能在一定程度上增加负向指令(如告诉模型不要干 XX)遵循度下降的风险,如果将语义相近的 token 合并,否定词的独特性可能会被抹平,与此同时,目标词本身的语义特征非常强烈,导致模型忘了这是一个否定句,只记住了后面的实体词。当然所有注意力机制对负向指令的遵循度都表现不佳,这是由模型的 Decoder-Only 架构决定的。
Decoder-Only 架构
除了上述注意力机制带来的问题,目前主流 LLM 普遍采用的 Decoder-Only 架构使 LLM 本质呈现为一个极其复杂的条件概率公式 $P(Next | Context)$。在刚开始生成时,面临的词汇宇宙有几十万种可能。但是,随着 Prompt 中的前几个词或模型自己生成的前几句话落下,整个概率分布空间会发生不可逆(当然除非你手动整理上下文)的坍缩。只要 Prompt 或前文出现过某个概念,相关的参数通路就会被高度激活。这种高强度的激活会形成一种语义惯性。模型在生成后续内容时,会不自觉地顺着被激活的语义网络滑行,从而表现出强烈的“先入为主”的行为。
一个比较典型的例子可以是在一个长任务中 LLM 发现自己原来的思路有误(或者由人类纠偏),但在后续的步骤中却依旧按错误的思路执行,就如同从未意识到错误一样。实际上上文中提到的负向指令遵循度差的问题与这个问题的原理是一样的。
这里比较好的解决方案可能需要工程的介入,例如假设 LLM 在探索过程中产生了错误见解,最好是有机制能将这段上下文抹去,或者使用 agent 隔离,以使错误思路不会污染模型的激活参数。另外对于负向指令的遵循度问题,尽量避免在 prompt 中使用 “不要 XXX” 的句式,
训练导致的模型偏好
后训练流程中的 RLHF 会使得模型不可避免地学到讨好人类的策略,当模型已经顺着用户的错误预设或者自己生成的错误前文往下走时,它会倾向于维持连贯与顺从。
所以,不要预设观点、或弱化你的观点假设,也许能降低模型盲从的概率。
情绪
情绪也可能会影响模型的输出质量。
- Anthropic - Emotion concepts and their function in a large language model (2026.04)
- Emotional Framing in Prompts Modulates Large Language Model Performance (2026.03)
1) emotion vectors corresponding to desperation, and lack of calm, play an important and causal role in agentic misalignment
与“绝望”和“缺乏平静”相对应的情感向量,在智能体对齐失准中起着重要的因果作用2) desperation vector activation (and calm vector suppression) play a causal role in instances of reward hacking
“绝望”向量的激活(以及“平静”向量的抑制)在“奖励破解”(reward hacking)的实例中起着因果作用3) steering toward positive emotion vectors (e.g. happy, loving) increases sycophantic behavior, while suppressing these emotion vectors increases harshness
引导模型偏向积极的情感向量(例如快乐、充满爱意)会增加其阿谀奉承(讨好)的行为,而抑制这些情感向量则会增加其回复的严厉性(刻薄)
prompts framed with joy and apathy lead to consistently higher accuracy, with gains of up to 4.5 percentage points compared to fear-framed inputs
相比于带有“恐惧”情绪设定的输入,带有“喜悦”和“冷漠”情绪设定的提示词能带来持续更高的准确率,增幅最高可达 4.5 个百分点
建议在上下文中引导 LLM 保持平静/冷漠的情绪。
思维链
由于这种不同的 query 会注意到上下文前缀中有限的不同的 token 的机制,让 LLM 输出多一点 token 来注意上下文中不同的 token 以覆盖前文中尽可能多的信息往往能达成不错的效果。
这也属于思维链 (CoT) 的一部分作用。在 CoT 的过程中,每一个新生成的 token 都会作为全新的 query 去“扫描”并关注前缀中不同的局部信息,从而拼凑出更完整的上下文全貌。
当然思维链的作用不止于此,在混合专家模型中,模型每生成一个新的 token,都可能触发不同的路由策略去激活不同的专家网络,以赋予 LLM 更丰富的洞察能力与世界知识。而在稠密模型中,新的 token 也会引导隐藏状态在特征空间中游走,激活前馈网络中不同的知识子空间,达成一致的效果。
从这个角度来看,如果你的 System Prompt 质量不高,效果有时会不如 CoT 自行填充上下文3 。因为本质上你的 Prompt 其实并没有给模型提供新的知识,而是一种静态约束,告诉 LLM 去激活某些对应的参数来干活。而 CoT 则是让他自己填充自己的上下文,使其能够更加自主、平滑地寻址并激活解决问题所需的参数路径。
生成速度
用户能感知到的延迟来自两个阶段,一个是 Prefill,一个是 Decode。
Prefill 是指把当前所有输入装入 kv cache 的阶段,过程中要计算整个上下文每一个 token 之间的注意力得分,复杂度是 $O(n^2)$ 的。他影响着首 token 延迟 (TTFT) 的大小,也就是从你按下回车键到第一个 token 出来的时间。如果 infra 做的好,kv cache 还没有过期,那 prefill 的大部分计算量都会被省去。并且由于每一层注意力计算中 token 与 token 之间 QKV 没有前后依赖性,所以可以做并行计算,效率比 Decode 高。
Decode 指的是增量生成阶段,就是模型吐字的阶段,过程中要计算最新的 query 对上下文中需要注意的 token 之间的 QKV,每生成一个新 token 的复杂度是 O(n)。
这里要注意 Decode 和 Prefill 要计算的东西本质上都是一样的,只不过 Prefill 可以并行计算所以更快。
前文提到的稀疏注意力可以极大的减少 Prefill/Decode 的计算量,将每个 token 的计算由 $O(n)$ 变成 $O(k)$。以 1M 上下文的 Prefill 为例,满注意力 (Full Attention) 需要 $10^{12}$ 的计算量,而 DeepSeek-V4 无论前缀多长,参与计算的只有固定的 HCA + CSA + SWA 选出的 8964 个 token,计算量约为 $10^8$,快了一万倍。