
我把一段提示词改了八遍。每次它答错我就回去改那句话换个说法、加个条件、再把务必两个字加重一点。改到第八遍我停下来想——它答错真是因为话没说清楚那天它给的答案里用到了一个三天前就已经删掉的字段。那个词不在我的提示词里在上下文里是几轮之前留下来的。我一直在改它听到的那句话它错在看见的那一整堆东西。上下文是有预算的Anthropic 的工程博客里有个词叫 context rot直译过来是上下文腐烂上下文窗口里的 token 越多模型准确回忆其中信息的能力反而越弱。这个说法最早来自 Chroma 的一份技术报告他们一口气测了十八个模型包括几家的旗舰结论是所有模型的性能都会随着输入变长而往下滑——而且是渐进地滑不是撑到某个点才突然断崖。Anthropic 引用这个结论的时候补了一句自己的判断上下文必须被当成一种有限的资源它的边际收益是递减的。这不是哪家模型没做好是这类架构的通性。原因也不复杂——注意力机制里每个 token 都要和其他所有 token 算一遍关系你塞进去的每一个 token 都在分走它有限的注意力预算。所以填得越满和懂得越多是两回事。Andrej Karpathy 把大模型比作一台操作系统模型本身是 CPU上下文窗口是内存。顺着这个类比往下想——你开一堆程序把内存占满机器不会因此变聪明只会变卡。从怎么说到让它看见什么Anthropic 给的定义是上下文工程是在推理过程中持续挑选和维护那批最优 token 的策略集合。说人话提示词工程琢磨措辞上下文工程安排它此刻看见什么。一个是在改句子一个是在排货架。网上有句话叫提示词工程已死我觉得说得夸张了。措辞依然重要只是它从全部变成了整个上下文里的一小块。四个动作现在主流的做法可以归成四类这四个词是我见过最好记的框架写 —— 把东西放到窗口外面去。装不下的就别硬装中间结果写进文件跨会话的东西存成记忆项目规矩写成规则文件Claude Code 的 CLAUDE.md、Cursor 和 Windsurf 的 rules 都算这一类。上下文窗口是工作台不是仓库。选 —— 用到什么拿什么。别在开场就把整个仓库灌进去。Claude Code 的做法是CLAUDE.md 这种稳定的东西预加载具体文件用 glob、grep 现用现查。工具也是同一个道理——工具描述一旦重叠模型就开始挑错工具有研究试过改成按需检索工具描述工具选择的准确率提升到了原来的三倍。压 —— 只留还需要的。对话一长必然累积。Claude Code 在上下文用到 95% 的时候会自动压缩整段历史压缩之后通常只保留最近访问的那五个文件。你也完全可以手动做这件事把上一阶段的结论写成一份摘要其余扔掉。隔离 —— 别让它们互相污染。研究阶段翻过的那几十个文件到了实现阶段就只剩噪音。多 agent 的本质就是给每个子任务一个干净的窗口。代价也得说清楚Anthropic 自己报告过多 agent 的 token 消耗最高能到普通聊天的 15 倍。它不是什么免费的优雅习惯。我现在自己在做的四件事第一件出错了先看它看见了什么别急着改措辞。把这轮的上下文整个翻一遍多半一眼就能看出问题——一个早就过期的字段、一堆用不上的工具返回或者它根本就没拿到那份文件。第二件工具按需开。我图省事把所有 MCP server 一起开着的那段时间它反而在几个名字很像的工具之间来回试探半天选不对一个。第三件长任务切成阶段。上一阶段的产出写成一个摘要文件新任务开新窗口只带这一份进去。这是目前我试过最省心的一招。第四件示例挑三个别挑三十个。Anthropic 的原话是不要往提示词里塞一份边缘情况的清单要挑能代表期望行为的典型例子。堆量解决的是你的焦虑不是它的准确率。今天就能做的一件事挑一个你最近骂过它怎么这么笨的任务把喂给它的完整上下文打印出来看一眼。多数时候你会看到同一个画面真正有用的那两三句被埋在一大片跟当前任务无关的东西中间。模型能记住多少我管不了。但它这一刻看见了什么是我能安排的。