#it那些事儿# 《让 AI 更聪明的秘诀,是让它“忘得更快”》
我们都曾有过这种直观的感受:每个对话从零开始,在上下文大约 10万 tokens 之前,大模型工作良好。超过这个范围,大模型开始变笨。
TypeScript 大神 Matt Pocock 的“LLM有智慧区和愚蠢区”(如图一所示)说法看起来像经验主义,但背后其实对应下面三件事:
你可以把一个大模型想象成一个“同时盯着一整张白板思考的人”。
当白板上只有几行字的时候,他能看清每一条信息、能分辨什么是重点、能把前后逻辑串起来,这就是所谓的“智慧区”。
但当白板被写满——密密麻麻几万字、几十万字——情况会发生质变,而不是简单变慢。他会出现三个非常具体的退化现象:
第一层:他开始“看不过来”了(attention O(n²))
不是说他完全看不见,而是每多一行字,他需要额外花更多精力去“同时对比所有内容”。结果就是注意力被极度分散,思考成本急剧上升,反应变慢,甚至开始偷懒(用套路回答)。
第二层:重点被“淹没”(关键 token 稀释)
重要信息不会消失,但会“失去权重”。这就像一句话里有一个关键词,很容易抓住,但是一万句话里有同样一个关键词,几乎等于不存在。于是模型会忽略真正关键的约束,而去抓住一些“看起来合理但其实无关”的信息,输出“听起来对,但其实偏了”的答案。
第三层:信息开始“串味儿”(语义漂移)
这是最隐蔽、也是最致命的一层。当上下文很长时,里面其实混着三种不同类型的东西:你给它的指令(你要它做什么),中间过程(它自己推理过什么),事实信息(资料、数据)。在短上下文里,它能分清这些角色。
但一旦变长,就会开始出现:把“之前的推测”当成“事实”,把“旧指令”当成“当前目标”,把“例子”当成“规则”。
把这三点合在一起,你就能理解“愚蠢区”到底是什么了。不是模型突然变傻,而是他进入了一种“信息太多、注意力分散、重点消失、语义混乱”的癫狂状态。于是表现出来就是,答非所问、自相矛盾、开始胡编但语气很自信。
短上下文像桌上一页纸,思路清晰。长上下文像站在图书馆中央,被要求同时理解所有书。
不是他不聪明,而是这个任务本身既不是人类,也不是底层逻辑基于注意力机制的大模型所擅长的形态。
换句话说:LLM 并不是突然变笨,而是“注意力资源被噪声淹没”。
Matt Pocock 的解法不是“捏着鼻子用”,而是从结构上解决它。
他在 github.com/mattpocock/skills 设计了一套工作流(如图二所示),核心思路:不延长单次上下文,而是把大任务拆成一系列独立的“状态转换”,让模型每次都在最清醒的状态下工作。
流程是这样的:
/grill-with-docs 先把模糊想法追问成无歧义的执行计划——AI 不急着写代码,而是反问你:“你说的优化是速度还是质量?会影响哪些模块?”一个决策树就此成型。
/to-prd + /to-issues 把计划存成 PRD 文件,对话就此关闭。新对话只读这个小文件,省掉所有历史包袱。再拆成多个独立 GitHub Issue,每张卡片目标单一、可以并行处理。
/tdd 在全新干净的对话里,只聚焦一个 Issue。先写必然失败的测试,再写让它通过的最少代码,最后在测试保护下重构。任务完成,对话再次关闭。
另有 /diagnose 处理 Bug(强制走“复现→最小化→假设→验证”流程),/improve-codebase-architecture 每周对抗代码腐烂。
你可以直接用的三个习惯:
1)任何需求先过 Issue 化流程,变成一张独立卡片再动手;
2)每次对话只喂三样东西:一个 Issue + CONTEXT.md + 相关模块的决策记录;
3)功能完成就关对话,把关键变更总结进 CONTEXT.md,下一个任务开新窗口!
归根结底,Matt 用的是 Don Norman 那个设计原则:不是 AI 的错,而是环境没设计好。 既然模型在长上下文里会变笨,那就改变环境,让它不需要面对长上下文。
