上下文续上了,任务为什么还是断了?

2026年7月17日 · 1985

我在使用 Claude Code 和 Codex 时有个习惯:上下文窗口用到一半左右,就主动做一次压缩。这倒不是因为上下文真的装不下了,而是使用时间一长,我总感觉模型对早期信息的把握开始变得不那么可靠。一个模型声称支持很长的上下文,并不意味着其中每一部分信息都能在后续推理中被同等有效地利用。窗口有多大,和模型真正能稳定用好多少上下文,可能是两件不同的事。

我最初把这种压缩类比成人的睡眠:人工作了一整天需要休息,把白天杂乱的信息整理、压缩,只留下更重要的部分,然后再开始新的一天。这个类比可能不太严格,人的工作记忆远没有十几个小时那么长,睡眠也不只是一次简单的上下文压缩,但它指出了一个直观的道理:一个想要持续工作的系统,不能只是无限积累历史,还需要不断把已经发生的过程转化成更精简、更有用的状态。

从这个角度看,Agent 的自动压缩其实一直在做一件事:给下一个自己写交接文档。压缩之前的 Agent 经历了完整的讨论、尝试和修改;压缩之后的 Agent 并没有重新阅读所有历史,只拿到一份总结就继续工作了。只要这份总结保留了目标、进度和关键决策,任务似乎就可以一直延续下去。

但我后来遇到的一次经历,让我意识到事情没有这么简单。

一次没有报错的任务中断

我用过一个叫 Maestri 的软件,它可以让多个终端里的 Agent 相互通信。在某次开发任务中,我让 Claude Code 负责具体执行,让 Codex 负责规划、验收和提交,并在任务开始前分别向两个 Agent 交代了协作方式:Claude Code 完成一个阶段的工作后,通过 Maestri 通知 Codex;Codex 验收代码并提交,再向 Claude Code 派发下一阶段的任务。

最初,这套协作方式运转得没有问题。但 Claude Code 在执行过程中经历了几轮自动压缩,等它完成当前阶段的修改后,它没有再通知 Codex,而是停在了那里。Codex 不知道工作已经完成,自然也没有开始验收和提交,更不会派发下一阶段的任务。

表面上看,这中间没有任何一个环节“出错”:代码没有报错,Agent 没有崩溃,Maestri 的通信功能也没有失效,Claude Code 甚至还记得自己正在做什么,并且完成了相应的修改。但整个任务还是中断了。最后我不得不手动通知 Codex,让它接续验收和提交,重新和 Claude Code 强调协作关系,这个任务才重新运转起来。

上下文连续,不等于任务连续

回头看这次经历,Claude Code 忘记的并不是任务本身,而是任务之间的关系。“需要修改什么代码”是当前阶段反复被引用的高频信息,压缩时自然容易被保留下来;而“完成后要通知 Codex 验收”在整个执行阶段几乎不会被用到。它只是任务开始时的一项约定,要等到工作完成的那一刻才会重新变得重要。于是经过多轮压缩,这项约定就逐渐从上下文中消失了。压缩机制天然偏向保留“正在被使用的信息”,而恰恰对“将来才会生效的信息”缺乏感知。

这让我意识到,自动压缩虽然可以让对话继续,却不一定能让任务继续。它可能很好地保留了“过去发生了什么”和“现在正在做什么”,却丢掉了“未来还有什么必须发生”。而长程任务恰恰充满了后一类信息:完成修改后要通知另一个 Agent,验收通过后才能提交代码,某个条件满足后才能进入下一阶段,等待用户确认之后才能继续执行。这些事情还没有发生,所以很难成为工作摘要里的重点;但它们又恰恰决定了任务能否从一个阶段进入下一个阶段。

换句话说,Agent 记住了自己做过什么,却忘了自己还答应做什么。

想起了之前还有一个很有意思的例子:在 CLAUDE.md 中约束一个对用户的称呼,如果某轮任务后 Claude 不再以这个称呼和你对话时,说明已经开始有关键信息在执行中被丢失了,得开个新会话了。

长期记忆和长程任务记忆

如今许多 Agent 已经开始拥有某种形式的记忆:它们可以记录用户的偏好、习惯、项目规则和长期事实,让下一次对话不必从头认识用户。但这类记忆解决的是“下一次见面时,Agent 是否还认识你”;而一次长程任务需要的记忆并不相同,它要回答的是:任务为什么开始,目前进行到了哪里,哪些事情已经完成,哪些承诺仍未兑现,以及下一阶段应该由谁继续。前者更接近一位长期助理的记忆,后者则关乎一个任务能否跨越多次压缩、多轮会话甚至多个 Agent,仍然保持同一个方向。

因此,长上下文、长期记忆和长程任务的连续性,或许是三个不同的问题:更长的上下文解决的是能不能放进更多历史,长期记忆解决的是能不能跨越不同任务保留稳定的信息,而长程任务的连续性关心的是,一件尚未完成的事情,能否在时间中持续保持它的目标、关系和未兑现的承诺。

记得过去,也要记得未来

我们通常把记忆理解为对过去的保存,但对 Agent 来说,真正影响长程任务的,可能不只是它能回忆多少历史,还包括它能否记住那些尚未发生、却必须在未来发生的事情(认知科学里把这种“记住将来要做什么”的能力称为前瞻记忆)。一个 Agent 可以拥有很长的上下文,可以在压缩后准确复述已完成的工作,也可以记住用户长期以来的偏好,但只要它在某次压缩后忘记了任务完成时该做什么,整个流程仍然可能悄无声息地停下来。

它不像一次明显的失败:没有错误提示,没有异常退出,也没有人明确宣布任务无法继续。每一个局部步骤看起来都没有问题,只是再也没有下一个步骤发生。

也许未来成熟的 Agent,不仅要能在上下文压缩后继续回答,还要能让一个任务穿过多次压缩、会话切换和 Agent 交接,仍然保持完整的意图。这会通过什么方式实现,现在还很难说。可能来自更可靠的压缩,可能来自新的记忆方案,也可能来自某种设计的更加优秀的 Harness、Agent 架构等。但从使用者的角度,我们真正期待的结果或许很简单:

上下文可以被压缩,过去的细节可以被遗忘,但一件尚未完成的事情,不应该因此失去它的下一步。

上下文续上了,任务为什么还是断了?