上下文窗口是注意力机制而非数据库,向其中倾倒整个仓库、文档和聊天记录会稀释关键注意力。
凌晨三点。屏幕的微光洒满整个房间,你盯着终端窗口,看着 AI 编程 Agent 自信地重写了你刚让它修复的函数。问题是,新函数破坏了其他三个模块。你向上滚动聊天记录——这个 Agent 正在经历"数字痴呆"。四小时前你建立的架构约束,它已经忘得一干二净。
你叹了口气,开始输入新的提示词,试图提醒它规则。但你心里清楚真相:你的 AI 并不是因为缺乏智能而失败,而是因为它淹没在了自己的记忆里。
我们把上下文窗口当作无限的硬盘来用。我们把整个代码库、庞大的文档文件、大段的聊天记录全部塞进提示词,期待模型能完美地综合这一切。但上下文窗口不是数据库——它是一个注意力机制。而注意力是有限的、容易被稀释的资源。
如果你在使用 AI 编程 Agent,却感觉总是在与它斗争,我有个坏消息:你的 Agent 可能正在把一半的上下文窗口浪费在数字垃圾上。让我们来修复这个问题。
要理解这个问题,我们必须理解这些模型实际上是如何阅读的。当你把一个大型代码库喂给大语言模型时,它并不会在脑子里用一个整齐的小文件夹存储它。模型会用相同的初始权重处理每一个 token,然后注意力机制再去计算哪些 token 对当前预测是重要的。
当你的提示词有 90% 是不相关的样板代码、遗留代码和过时的聊天记录时,模型必须消耗大量算力来过滤噪声。信噪比急剧下降。模型开始产生幻觉,因为它试图连接的点实际上并不存在——真正的信号 token 被数千个噪声 token 包围着,模型被分散了注意力。
这就是"上下文腐化"。它是 AI 辅助开发的沉默杀手。你得到的输出很蠢,不是因为模型笨,而是因为你喂给它的是垃圾数据,却期待得到米其林星级的一餐。
修复的第一步是把你的上下文窗口当作物理工作空间来对待。想象一下,在一张堆满旧披萨盒、未付账单和乱成一团的电线的桌子上,试图组装一块精密的机械表。你会发疯的。你的 AI 正在经历完全相同的认知过载。
上下文卫生意味着无情地修剪你的提示环境。
首先,清除聊天历史。大多数 AI 编程工具允许你开始一个新会话或压缩之前的消息。不要害怕点击重置按钮。如果你从前端样式任务转向后端数据库迁移,开启一个新的聊天吧——前端任务的上下文现在只是噪声。
其次,总结并归档。在清除一个长对话会话之前,让 AI 生成一份关于所做决策、所涉及的文件以及项目当前状态的综合摘要。把那份摘要保存在一个 markdown 文件里。当开启新会话时,你喂给它的是那份简洁、高信号的摘要,而不是之前经历的数万 token 文字记录。
这是我们在 AI 自动化操作手册中强调的核心原则。自动化不仅仅是让机器盲目运行,而是要 curation 环境,让机器能够完美运行。在组装手表之前,先把桌面清理干净。
关于 AI 编程 Agent,有一个秘密:它们没有空间感知。它们不知道你的项目长什么样。它们只知道你恰好塞进提示词的那些特定文件。这就像给一位才华横溢的建筑师一块砖,让他设计一座大教堂。他能告诉你这块砖的情况,但完全不知道墙壁应该在哪里。
你需要给你的 AI 一张地图。
仓库地图是项目结构的高层、基于文本的表示。它不仅仅是原始的目录树——原始目录树是无用的噪声。仓库地图包含目录结构,同时附有每个文件夹和关键文件作用的简短一句话描述。
在项目根目录创建一个名为 REPO_MAP.md 的文件。用清晰的标题组织主目录。在 components 文件夹下注明它存放 React UI 组件,主要是展示性组件。在 hooks 文件夹下注明它存放用于状态和副作用的自定义 React hooks。在 api 文件夹下注明它存放 Axios 实例和端点定义。
当你开始一个新任务时,你不需要把整张地图喂给 AI。你只需要告诉它先读取地图。这给了模型一个空间锚点。它突然就理解了项目的拓扑结构。当你让它创建一个新的认证 hook 时,它知道去 hooks 目录查找并使用 api 工具函数,而不是凭空发明一个新的文件夹结构。
这种精确的技术是《Claude Code playbook》的基石章节。我们教导开发者:给 AI 一种"场所感",能把幻觉的文件路径和冗余代码减少一个数量级。它把 AI 从一个盲目的打字员转变为一个有空间感的工程师。
开发者喜欢雄心勃勃。我们想输入一条庞大的提示词,然后看着 AI 端到端地构建整个功能。我们让它同时更新数据库 schema、编写 API 路由、构建前端组件——一气呵成。
这是对上下文的巨大浪费。
当你要求太多时,AI 在编写代码的同时,必须在活跃上下文中保持整个功能的架构计划。当它写到前端组件时,早已忘记了五分钟前写的数据库 schema 的具体约束。上下文窗口被它自己的中间推理填满了,没有留下实际执行的空间。
你需要拥抱"限定作用域的提示词"。把庞大的功能拆分成微任务。
任务一:编写数据库迁移脚本。完成后并验证,然后清除上下文或总结它。任务二:根据新的 schema 编写 API 路由。任务三:构建前端组件。
通过限定提示词的作用域,信噪比保持在极高的水平。AI 每次只需要为一个特定的、定义良好的任务保持上下文。它可以把全部注意力投入到为这个单一任务编写完美的代码上,而不是把注意力分散到整个功能上。你成为指挥家,AI 成为各声部长。
有时候,一个问题太复杂,无法在单次交互中解决。AI 需要思考。但如果它在主聊天窗口里思考,那个思考过程会消耗宝贵的上下文 token。
这时,草稿文件就登场了。
草稿文件是一个专用的 markdown 或文本文件,AI 可以在编写实际代码之前在这里规划它的方法。当给 AI 一个复杂任务时,你的第一个提示词不应该是写代码,而应该是让它在一个名为 SCRATCH.md 的文件中写一份计划。
告诉 AI 概述它将采取的步骤,列出需要修改的文件,并识别潜在的边缘情况。让它把计划写在草稿文件里出声思考。
计划写完后,你审查它,纠正逻辑中的任何缺陷。然后告诉 AI 执行计划,参考草稿文件。
这就把推理阶段和执行阶段分离了。推理阶段是密集的、消耗大量 token 的。通过把它卸载到一个持久化的文件上,你就释放了活跃的上下文窗口,供实际代码生成使用。如果 AI 在执行阶段中途卡住了,它总是可以回头参考草稿文件,记住它最初的策略。这就像是让工程师在开始焊接之前先在白板上画草图。
这是我们在 OpenClaw 中构建的那种深度工作流优化。OpenClaw 旨在处理这些复杂的、多步骤的 Agent 工作流,而不会迷失方向。它自动管理草稿文件、仓库地图和上下文修剪,让你专注于高层架构,而 Agent 负责战术执行。它把 AI 编程的混乱现实转变为流畅、可预测的管道。
让我们退后一步。为什么这些都很重要?为什么我们要关心上下文窗口的内部机制?
因为我们对待 AI Agent 的方式,反映了我们看待软件开发未来的方式。
如果我们把 AI 当作一个能吸收一切、吐出完美代码的神谕来对待,我们会不断失望。我们最终会写出比直接自己写代码还要多的样板代码来修复 AI 的错误。我们沦为劣质代码的审查者,困在"提示然后祈祷"的循环中。我们把主动权交给了机器,因为我们拒绝正确地引导它。
但如果我们把 AI 当作一个能力极强、速度极快、但从根本上说是字面意义上的初级开发者,一切就都变了。
初级开发者第一天不会知道整个代码库。你必须引导他们。你必须给他们明确的、限定作用域的任务。你必须给他们一张项目地图。你必须让他们在动手之前先在白板上写出计划。
当你把这些人类引导技术应用到 AI 上时,结果是神奇的。它生成的代码更干净,它遵守的架构是合理的,幻觉降低到接近零。
我们正站在计算新时代的边缘。我们今天构建的工具不仅仅是编译器或解释器。它们是认知伙伴。它们是反映我们自身思维清晰度的镜子。如果我们的指令是浑浊的,它们的输出就会是浑浊的。如果我们的上下文被污染了,它们的逻辑就会被污染。
但当我们实现了上下文卫生,当我们构建了适当的仓库地图,当我们限定了提示词的作用域并让机器在草稿文件中思考,我们就解锁了一些深刻的东西。我们实现了真正的共生。人类提供愿景、架构和品味。机器提供速度、语法和不知疲倦的执行。
所以,看看你的终端吧。看看那些冗长、杂乱的聊天记录。看看你一直在发送的那些巨大的、无结构的提示词。
清理干净。给你的 Agent 一张地图。限定任务的作用域。让它思考。
你可能会发现,你以为在浪费一半上下文窗口的 AI,实际上一直在等你清理桌面,这样它终于可以组装那块手表了。