最近在用AI辅助开发时,发现了一些有意思的现象。这些现象背后,藏着当前模型架构的一个核心缺陷——注意力机制的"视野限制"。
最近某头部模型升级了,从5.0到5.1,我发现推理模式变了:
旧版(5.0):
推理阶段只思考条目
输出阶段才生成代码
输出token需求低
新版(5.1):
推理过程中就把代码"想出来"
推理条目附带代码片段
输出token需求暴增(10k→100k)
这不是"能力升级",而是用空间换算力。
传统算法优化是让代码更内聚、更高效。但新版的策略是:把代码生成过程"摊平"到推理链条里,用更多token来换取"看起来想得更细"的体验。
这就像——
传统优化:压缩算法,用更少空间存更多东西
新版策略:解压缩,把东西摊开占更多空间
代价:用户需要10倍的输出token配额,才能完成同样的任务。
这是能力提升还是token通胀?你需要自己判断。
在测试过程中,我发现了一个反直觉的现象:
关闭自动压缩工具,手动控制上下文窗口大小,效果反而更好。
具体来说:
我测试的模型在120k上下文时效果最佳
太少(40k):推理质量下降
太多(200k):推理质量也下降
注意:这个数值是我在某个模型上测试出来的,不同模型的最优窗口可能不同。你可以按这个思路自己测试:从40k开始逐步加大,找到"推理质量开始下降"的那个临界点。
压缩工具会把代码"摘要化",破坏了代码的自然结构:
视觉层次(缩进、空行、模块边界)
逻辑边界(函数头→函数体→函数尾)
上下文连贯性(变量定义→使用→修改的链路)
模型训练时学的是完整代码结构,压缩后的碎片化结构和训练素材差异太大。这就像你习惯了读完整段落,突然被塞了一堆碎片化的关键词——理解难度反而上升了。
太少(40k)→ 依赖不足:
变量定义、函数调用链被截断
模型只能"猜"缺失的部分
太多(200k)→ 注意力稀释:
注意力机制要"看"所有token
关键信息淹没在大量代码中
模型的注意力被"稀释"到无关代码上
正好(甜蜜点)→ 注意力最优覆盖:
足够覆盖关键上下文
又不至于让注意力分散
Transformer的自注意力机制是全局均匀的:
每个token要和所有其他token计算注意力
没有内置的"重点区域"
这看起来很公平,但在代码任务上反而是个缺陷。
自然语言:
关键信息稀疏,大量"水词"
注意力可以"扫过去",找到几个关键词就行
就像看一张海报,扫一眼就知道在说什么
代码:
关键信息密集,每一行都可能关键
变量定义、类型声明、函数签名、调用关系
注意力需要"精细扫描",不能"粗略扫"
就像看一张密密麻麻的表格,需要仔细找才能定位
所以代码任务对注意力的要求更高,反而不能开太大的上下文窗口。
这就像人的视觉——视野太大,反而看不清细节。
面对注意力机制的缺陷,有两条路可以走:
核心思路:在送进模型之前,先把上下文"修剪"成模型能处理好的样子。
具体手段:
手动控制窗口大小:找到模型的甜蜜点
关闭自动压缩:保留自然结构
分批处理:把大任务拆成小对话
语义检索预处理:用RAG先筛出相关代码块
优点:
不改模型,工程可行性强
现在就能用,立竿见影
缺点:
需要人工经验
可能丢失潜在有用的信息
核心思路:让模型自己学会"该看哪儿"。
现在的多头注意力:
python
复制
# 每个头都要看所有token
attention = softmax(Q @ K.T) @ V
# 所有头都在"全场扫描"
理想的"路由注意力":
python
复制
# 先判断"这个头该不该激活"
route_gate = sigmoid(W_route @ context)
# 只有激活的头才计算注意力
if route_gate > threshold:
attention = softmax(Q @ K.T) @ V
else:
attention = skip # 跳过这个头
类比MoE(专家混合模型):
MoE:不同的专家处理不同类型的token
路由注意力:不同的头处理不同类型的上下文
现状:工程优化是在弥补算法层的不足。等算法成熟了,这些经验可能就不需要了。
这是我在使用过程中最深刻的感悟。
评估 → 推理 → 输出
评估:这个问题该不该解?解的方向对不对?现在的进度够不够?
推理:开始具体思考
输出:给出结果
人会"跳出语境"——能停下来问"我现在的方向对吗?"
推理 → 输出
没有评估环节
直接开始概率游走
直到碰到结束符(EOS)
AI只能"在语境里"——沿着概率链条一路走到黑。
人有"目的先验":
预设了奖励函数(我知道我要解决什么问题)
预设了注意力先验(我知道哪些信息相关)
预设了终止条件(我知道什么时候该停)
AI只有"概率链条":
没有预设的目的
没有主动的评估
只能被动碰撞结束符
这就像:
人开车:知道目的地,知道什么时候该停下来
AI开车:只知道往前开,直到撞到墙(结束符)
之前看到过用图神经网络自动拟合路径做辅助推理的研究,相当于给模型装了一个"外部评估器",但后来没怎么看到进展了。这块可能还是开放问题。
如果有一天,模型能在推理过程中"跳出来"评估自己的方向,那才是真正的推理能力突破。
基于这些发现,我总结了一个代码任务的上下文配置策略:
| 场景 | 推荐上下文 | 原因 |
|------|-----------|------|
| 单文件修改 | 40-60k | 注意力聚焦在当前文件 |
| 多文件重构 | 80-120k | 需要跨文件依赖,但不过度 |
| 大型项目分析 | 分批处理 | 避免一次性开太大窗口 |
核心原则:
不要迷信"上下文越大越好"
代码任务需要的是"注意力密度",不是"注意力广度"
宁可分多轮对话,不要一次性塞太多代码
关闭自动压缩,保留代码的自然结构
这些现象背后,其实都是同一个问题:当前的注意力机制缺乏"任务级约束锚点"。
没有预设的目的,所以推理漫无目的
没有主动的评估,所以只能概率游走
没有路由的机制,所以注意力被稀释
我们现在做的工程优化(控制窗口、关闭压缩),本质上是在用工程手段弥补算法缺陷。
但这不是长久之计。真正的突破,需要算法层的改进——让模型学会"该看哪儿",学会"该什么时候停"。
在那之前,我们能做的就是理解这些限制,在工程层面找到最优解。
本文是"AI推理系列"的第三篇。三篇文章形成了"理论-认知-工程"的完整链条。