为什么Agent不能主动压缩?
2026-5-5
上下文压缩总是被当作Agent完成任务的障碍,我自己在实践中也有同样的感受。偶然一次测试中,我忘记打开Claude Opus 4.6 1M 的上下文窗口,让模型以 200K 的窗口运行测试。结果出乎意料,200K的窗口下,Agent测试结果出色,没有出现误报的问题。为什么?
我们可以先看看我的任务是什么。
我的任务是让Agent根据键盘可达性的规则,测试网页上是否所有的元素都可以通过键盘到达。比如网页上的"登录"按钮是可以通过操作键盘选中,并按下 Enter,完成登录?以往这个工作需要人来做,现在想尝试让Agent自动完成。
这个任务需要什么样的能力?
- 1M 的上下文窗口。因为Agent在测试过程中,上下文窗口满了自动压缩,会导致测试失败。
- 指令遵循的能力。整个测试任务包含多个阶段,每个阶段都有Agent需要完成的任务。对于这种跨阶段的长程任务,Agent的指令遵循能力会随着上下文的膨胀而下降。比如测试任务有五个阶段,当Agent执行到第四个阶段时,还能否按照最初制定的规则继续完成任务?
在实践过程中,Agent总是在最困难的阶段产生幻觉。首先,这里的困难指的是:第一,Agent在已有的Context压力下,根据刚测试任务开始制定的规则,继续一步一步完成测试任务,不要跳过;第二,在长程任务中Agent需要在经历一到两次的错误尝试后,仍然坚持探索。第三,Agent下的结论,需要有具体实验记录作为证据,不能凭空推断得出结论;其次,这里指的幻觉是,Agent认为自己当前的信息已经足够,不必再进行更进一步的实验,直接下结论。这里对Agent的定义是,Agent是模型和框架的组合。
最后,Agent能够稳定完成测试任务的原因是,我把"答案"给到了Agent,让Agent对于测试网页有足够多的领域知识,减少错误地尝试,减少因错误尝试产生的幻觉。Agent拿到"答案",能够稳定完成测试了,很开心。我对此却很难过。因为,我一直希望通过简单、通用的方式,让Agent具有能够完成大部分的测试任务,而不需要人工过多的调整,让Agent拥有所谓的"泛化性"。然而,我对这样一个单一的测试案例,就已经提前塞了一些"小抄"给Agent,让Agent能够完成测试任务,那接下来呢,我需要继续给Agent更多的小抄吗?有得必有失,我认为给Agent的东西越多,会随着模型能力的增强,而成为冗余,限制整体Agent的能力。
但是,就像我们开头提到的,200K 上下文窗口的 Opus 4.6 反而表现更好,这是为什么?当时,Agent 恰好在最困难的阶段前上下文窗口满了,进行了自动压缩。压缩后的Agent写出了对于当前阶段更加详细的任务清单(To Do List)。第一次,Agent 面对这个最困难的阶段,写出了详细的执行步骤。并且,Agent 一步一步按照任务清单做完了所有测试,没有跳过的情况。我认为原因可能有两个:第一个是Agent的上下文焦虑被缓解了。当Agent的上下文窗口快接近满了,或者当长程任务快结束了(这里需要定义什么是长程任务),Agent会非常着急想结束任务,表现是Agent总是说自己已经有足够多的信息,不需要再继续测试实验了,但实际上下的结论没有实验支撑,也没有说服力。模型会上下文焦虑的情况,第一次是在季逸超的访谈中了解到的,这是首次在实践中感受到。第二个是Agent有更详细的任务清单。这一点让我想到了Spec的工作模式,提前和Agent沟通好任务计划,制定详细的任务清单去执行。
那么如果Agent在长程任务中,总是完成的不够出色,会出现跳步,钻空子的行为,有没有可能在面对比较困难的问题或者阶段时,提前进行一次主动压缩,从而提高Agent完成任务的概率?