一句话摘要
解释 Agent 对话变长后失忆的上下文工程原理。
Context Engineering: Why Your Agent Forgets Everything After Message 50 July 15, 2026 · 7 min read · View source ↗ Marketing AI
你的智能体在第 5 条消息时还很聪明。它知道目标,遵守你的规则,记得计划。到第 55 条消息,它就变成了另一个东西。它开始重复自己。它忘掉了一开始你设的一条约束。它自信地反驳十步之前自己说过的话。
什么都没坏。模型没有变笨。你撞上了那堵杀死几乎所有长程智能体运行的墙,而几乎没人说出它的名字:上下文窗口被填满了,重要的东西被挤了出去。
下面讲清楚到底发生了什么,以及修好它的四招。
那个谎言:"它记得我们的对话"
它不记得。模型在轮次之间没有记忆。每一条消息,到目前为止的整个对话都会被当成一大块文本重新发给模型。那一大块就是上下文窗口。模型从头读一遍全部内容,回答,然后在它完成的那一刻忘掉一切。
所以"记忆"是一个靠每一轮重新喂转写稿造出来的幻觉。这在第 5 条消息时很好用。转写稿很短,什么都装得下,模型把它全部看得清清楚楚。到第 50 条消息,转写稿巨大,三件事同时出错。
为什么第 50 条消息是一堵墙
三股力量同时打过来,而且它们会叠加。
第一,窗口被填满。每个窗口都有一个硬上限。漫长的来回、工具输出、粘贴的文件、错误日志。加起来很快。一旦你接近天花板,总得牺牲点什么,而最旧的内容第一个被丢。你在意的那条早期指令?没了。
第二,迷失在中段(lost in the middle)。即使一切都还装得下,模型也不会均匀地读一段很长的上下文。它把最多的注意力放在开头和结尾,中段变成一滩泥。这是被测量出来的效应,不是感觉:研究者在证明了模型会漏掉放在长上下文中部的事实之后,给它取名为"lost in the middle"。你第 12 条消息里的那条约束,现在正埋在模型读得最差的那个精确位置上。
第三,指令漂移。你在开头设的规则,每一条消息过后都离模型的"现在"越来越远。最近的 token 占主导。于是智能体慢慢漂向你说得最近的东西,漂离那些本该贯穿全程的系统级规则。
合起来看:窗口溢出,中段模糊,旧规则褪色。这就是为什么你的智能体在第 50 条消息之后会遗忘。这是结构性的,不是随机的。
修法不是更大的窗口
最直观的反应是"那就用那个超大上下文窗口的模型"。这救不了你。更大的窗口推迟那堵墙,而不是移除它。lost-in-the-middle 会随着上下文变大而变得更糟,而不是更好。成本和延迟随你携带的每一个 token 攀升。而且你依然控制不了模型实际关注什么。
塞更多东西进去才是问题。真正的技能是决定模型在每一步该看到什么,以及同样重要的,不该看到什么。那个技能就是上下文工程(context engineering)。下面是四招。
第 1 招 - 把记忆外化成一个状态文件
别再拿聊天日志当你的记忆。把重要的东西写进一个智能体能重新读的文件:目标、硬性约束、已做的决策、它上次进行到哪了。
# state.md - re-read at the top of every run
GOAL: migrate the billing service, no downtime
HARD RULES: never touch the payments table; all changes behind a flag
DECIDED: use the new schema v2; keep v1 read-only until cutover
DONE: steps 1-4 verified
NEXT: step 5, backfill user rows
现在这条约束待在一个永久的地方,而不是漂向一个即将溢出的窗口顶部。智能体每次都先读这个文件,目标永远不会从边缘掉下去。
第 2 招 - 按计划压缩,别等它溢出
别让窗口撞上天花板再随机丢内容。有目的地压缩。在一个设定好的点(比如 70% 到 80% 满时),把到目前为止的历史总结成一份紧凑的 brief,保留这份总结,丢掉原始的来回。
诀窍在于你保留什么。一次好的压缩会保住目标、未决的决策和任何约束,扔掉闲聊。一次偷懒的压缩会把氛围总结出来,然后悄悄丢掉那条唯一要紧的规则。把总结当成活下来的记忆来对待,就照这个标准去写。
第 3 招 - 在使用点上检索,别前置加载
本能是把每一个文档、每一个文件、每一个 spec 都提前贴进去,"好让智能体拥有它"。这恰恰是把重要的部分埋进中段。反着来。让窗口保持精瘦,只把当前步骤需要的那块具体内容拉进来。正在编辑的那一个函数。问题所指向的那一份文档。现在相关,现在进窗口。其他一切都留在磁盘上,直到它挣得一个位置。
第 4 招 - 把长程子任务隔离进它们自己的窗口
有些活儿就是长:读二十个文件、测十个用例、爬一个巨大的日志。如果这发生在你的主窗口里,它会把其他一切都淹没。所以把它交给一个带着自己干净上下文的子智能体。它在隔离里干完那 20 步的脏活,然后回传一个简短的结论。主智能体永远看不到那团乱麻,只看到总结。它的窗口保持锋利。
这仍然会咬你的 3 种方式
静默的约束丢失。第 3 条消息里的一条规则在一次压缩里消失,智能体开始做你明令禁止的那件事。修法:把硬规则放在状态文件里,而不是聊天里,每次运行都重读它们。
总结腐烂。每一次压缩都在总结上一次的总结,细节一代代地磨损,直到目标变成一滩泥。修法:永远从状态文件加上最新窗口来总结,绝不要总结一份总结。
检索漏掉。当智能体不知道某个文档存在时,在使用点上拉取就会失败。修法:在状态文件里留一份短索引——一个"有什么可用、在哪"的清单。
这周该做什么
你不需要一个框架。你需要停止把聊天日志当成记忆。
为你的下一个长任务建一个 state.md。把目标和硬规则放在最上面。
让智能体在每次运行开始时重读它。
设一个压缩点,在那里写一份真正的总结,从状态文件来,而不是从氛围来。
把又大又乱的子活儿挪进子智能体,让它们永远不污染主窗口。
要点
你的智能体会遗忘,不是因为它弱。是因为它从一开始就没有记忆,只有一个你不断塞满的窗口。上下文工程就是有目的地花掉那个窗口的纪律:外化重要的东西,在溢出之前压缩,在使用点上检索,隔离长活儿。做到了,那个在第 55 条消息崩掉的智能体,在第 500 条消息还能接得住主线。
如果这对你有帮助,关注我。我每周拆解 AI 系统和预测市场,没有废话。 Tags: # X # Marketing # AI # Thread Related articles How to create AI ads for apps that make $10,000/mo (EASY MODE) The AI revolution is here, and it has completely changed the way I grow apps. Mobile Apps Advertising AI Marketing
原文参考:https://maxed.wiki/posts/context-engineering-why-your-agent-forgets-everything-after-message-50/ (Maxed.wiki,本页为站内中文整理)