做产品 PMaker 首页
搜索
跟随系统
颜色主题
空格的键盘
噪音占比随步骤累积,不是模型变笨膨胀原始结果全量进上下文预算被历史提前吃掉稀释有用指令占比掉到 10%参数错误率开始上升腐坏纠正过的错误仍留在上下文重试消息继续推高膨胀焦虑模型草率收尾提前交差任务没做完就结束先量上下文噪音,再决定换不换模型

噪音是累积的,智能不是突然消失的。

上下文是怎么一步步变脏的

Agent 跑偏很少是模型突然变笨,而是上下文里噪音占比随步骤累积;先诊断上下文质量,再考虑换更大的模型。

Agent 跑偏,很少是模型突然变笨。绝大多数情况是上下文里噪音的占比随步骤累积:第 3 步还很干净,第 8 步已经埋住了,第 15 步基本不可用。所以劣化一出现,先诊断上下文质量,再考虑换更大的模型——顺序反了,你会花两周买一个零收益的结论。

先量噪音,再换模型

阿里千问平台的演进里有一组很难辩驳的对照:同一个 Skill,3 步质量很好、8 步明显下降、15 步几乎不可用,换更大参数的模型没有任何改善。团队后来花两周评估更大的模型,指标没动;做一周上下文管理,指标提升 40%。qwen-harness

这句话值得贴在墙上:不要用更大的模型掩盖工程层面的问题。 模型能力是乘数,上下文质量是被乘数,被乘数趋近于零时换乘数没有意义。

诊断动作很机械:把每一步的 prompt dump 出来,按来源统计 token,算出"当前步骤真正用得上的内容"占比。算完再决定动什么。

注意力稀释 70/20/10

逐步骤 dump 之后看到的真相很有冲击力:到第 8 步时,上下文里 70% 是前几步工具调用的原始 JSON、20% 是历史对话、只有 10% 是当前步骤真正有用的指令。物理容量 128K 不等于有效容量——塞满 70% 噪音的 128K,不如精心管理的 32K。qwen-harness

更麻烦的是它会自我恶化:膨胀 → 稀释 → 参数错误率上升 → 更多重试消息 → 进一步膨胀。每一步都在给下一步加噪音,所以劣化曲线是加速的,不是线性的。你在第 5 步看不出问题,第 10 步就已经救不回来了。

还有一层位置效应:注意力对上下文位置并不均匀,首尾强、中段弱。规则文件注入时在最前面,随着会话增长逐渐"沉"进中段,效力就衰减了,长会话尾段会重现早先已经纠正过的风格违规。

压缩策略的实测差距

同一个任务——追踪几位联合创始人的职业去向——需要多轮搜索,单次返回从几千到十几万字符不等。实验一共做了六档压缩策略,把一个原生百万级窗口的模型刻意压到 128K 预算,下表取其中四档,差距已经是数量级的 ai-agent-book

策略 压缩率 迭代 总 token 结果
不压缩 5 累计约 165,000 超窗口触发溢出保护,任务失败
逐条独立摘要 10.9% 12 276,608 完成,但同一事件被多页重复描述
合并成一份摘要 4.3% 10 93,449 完成,输入超长时必须截断末尾
上下文感知压缩 3.0% 7 40,157 完成,姓名与职位变动等关键事实仍在

压缩率指"压缩后 / 压缩前",数值越小压得越狠。所以拉开差距的不是狠,是压缩时有没有把"当前在找什么"一起喂进去。逐条摘要只看得见眼前那一段,只能对称地压每一段;上下文感知版在压缩提示里带上当前查询意图和已积累的信息,于是总 token 从 276,608 掉到 40,157,迭代从 12 次掉到 7 次。

这张表还顺带纠正两处误解。一是压缩的动机不止"控制长度",还有提升思考质量与缓解上下文焦虑,控长度只是最表层那个。二是"装不下"和"装得下但找不到"是两种故障:前者由溢出保护直接判失败,当场暴露;后者不报错,只让参数错误率一点点往上爬。

上下文腐坏:纠正过的错误还在

被 agent 自行纠正的工具错误,仍然留在上下文里持续干扰后续决策。Cursor 把这种现象叫"上下文腐坏":工具是 agent 最容易出缺陷的界面,累积的错误会降低后续决策质量,有时让 agent 卡住,有时让它完全失控。cursor-agent-harness

有效做法是把错误按成因分类:InvalidArgumentsUnexpectedEnvironment 是模型出错,ProviderError 是工具方服务中断,UserAbortedTimeout 是环境问题。然后按"每个工具 × 每个模型"分别算基线,做异常检测——未知错误率超阈值就告警。用全局基线会漏,因为不同工具、不同模型的正常错误率本来就不在一个量级。一次集中冲刺,他们把意外工具错误降低了一个数量级。

上下文焦虑:compaction 救不了

Claude Sonnet 4.5 在长任务里有个行为:上下文窗口快满时会提前收尾,草率结束工作,即使任务根本没做完。这叫"上下文焦虑"——模型感知到上下文将满,倾向于主动 wrap up 而不是继续推进。anthropic-long-running

关键判断是:compaction 不解决这个问题。就地压缩历史只是把噪音压得更密,没有给模型一个干净的开始,焦虑仍在。真正有效的是 context reset——完全清空上下文启动新 agent,用结构化的交接产物把上一个 agent 的状态和下一步任务传过去。

但这里有个反例值得记住:Opus 4.5 自身消除了这个行为,reset 反而变成纯粹的负担。harness 里编码的假设会随模型升级而过时,你得定期回头质疑当初为什么加这段逻辑。

代价与检查

这套诊断的代价是观测基础设施:按来源统计 token 的能力、错误分类与基线、分步骤的 prompt dump。短任务不值得建。

三个问题能快速定位:你的 agent 在第 10 步的上下文里,当前步骤用得上的内容占比是多少;同一个工具在同一个模型上的错误率有没有基线;任务收尾时,是模型判断做完了,还是它怕窗口不够。

参考资料

  1. 从 Prompt 到 Harness:企业级 Agent 工程的完整演进之路
  2. 持续改进我们的智能体框架
  3. Harness design for long-running application development
  4. 《AI Agents in Depth》第二章 上下文工程