去打开你手头项目的根目录,看一眼那个 AGENTS.md,或者 .cursorrules、CLAUDE.md。
如果没猜错,里面大概躺着这些东西:
- “请始终使用中文回复”
- “不要在 TypeScript 里偷懒写 any”
- “修改完代码后,必须在终端执行
pnpm test”
- “切记:不要直接修改
schema.prisma,先问我”
甚至还有三四条长达几十行的边界修补条款,记录着某次半夜两点模型把代码改崩时,你带着怨气写下的“防呆警告”。
不知不觉,这份规则文件已经膨胀到两三百行。每次你向 AI 发送一条哪怕只有五个字的指令,这几千个 token 的“家规”都会被原封不动地塞进上下文窗口。
最近 TypeScript 圈的知名开发者 Matt Pocock 在 X 上吐槽:“AGENTS.md 是 Token 低效最常见的来源。” 下面一条评论直接戳中了要害:“它根本不是什么配置,它就是过去每一次模型幻觉的赛博坟场。”
只要 AI 犯过一次错,我们就在规则文件里砌一块墓碑。久而久之,整个项目根目录变成了阴气森森的乱葬岗。

为什么给 AI 立规矩,它反而越来越蠢?
很多人的直觉是:规则定得越细致,Agent 办事就越稳。但在大语言模型的运行逻辑里,事情往往走向反面。
1. 注意力稀释与上下文污染
尽管现代模型的上下文窗口动辄几十万甚至上百万 token,但“能装下”和“能精确定位”完全是两码事。当你把冗长、杂乱、毫无层级的零碎规则一股脑填进根上下文(Root Context)时,模型对真正关键业务逻辑的注意力被严重稀释。
你以为你在约束它,实际上你是在用噪音淹没它。
2. 大量的“空操作”(No-ops)
很多开发者配置文件里的规则,其实是“大清亡了还在守灵”。
比如“代码要模块化”“注意边界条件”“按照标准 JSON 输出”。这些东西在 GPT-3.5 时代或许需要提一嘴,但在当下的前沿模型面前,早就成了内建的基本素养。
现代模型已经掌握的常识,你还在每轮对话里为它们重复付费,这是纯粹的 Token 浪费。
3. 用 Prompt 越级干预编译器
这是最典型的偷懒行为:把本该由自动化工具解决的问题,甩给大模型来肉眼检查。
代码格式有 Prettier,语法约束有 ESLint,类型推导有 TypeScript,运行时安全有单元测试。明明一个 Linter 报错 0.1 秒就能拍死的事情,偏要写一大段自然语言让模型去猜、去记、去防范。
给项目配置“瘦身”的三步法
消灭赛博坟场,核心思路其实非常清晰:把确定性的交还给工具,把非核心的移出主线,让入口只负责指路。
第一步:斩杀空操作(Kill the No-ops)
把现有规则从头到尾筛一遍,执行一次残酷的减法测试:
如果删掉这一行,模型在日常开发中真的会把项目写炸吗?
把那些教模型“如何做个正常程序员”的废话全部剔除。
- 删掉通用的风格建议(模型懂什么是干净代码)
- 删掉重复的命令提示(可以直接放进
package.json 的脚本别名)
- 删掉已被代码检查工具覆盖的规则
留在主文件里的,只应该包含模型通过阅读现有代码无法自行推断的信息。比如核心业务特有的黑话、特定的架构决策、外部不可变服务的约定。
第二步:引入“渐进式披露”(Progressive Disclosure)
这是系统设计里极经典的概念,但在写 Agent 配置时经常被忽视。
试想一下,如果新来了一位高级工程师,你绝不会在第一天上午就把公司五百页的报销制度、老系统的技术债、数据库所有的分库分表细节一股脑打印出来塞给他,要求他倒背如流。
你只会给他一张轻量的导航图:
- 业务架构怎么分层
- 具体的接口规范在哪个文档
- 数据字典在哪个目录
对 Agent 也是完全同理。主入口文件(如 AGENTS.md)必须极致轻量,它应该是一张索引路由表,而不是百科全书。
- 具体的代码风格指令,移到
CODING_STANDARDS.md
- 数据库操作范式,移到
docs/database.md
- API 设计规范,移到
docs/api-guide.md
当 Agent 接到前端界面的修改任务时,它才按需读取前端相关文档;当它做重构时,再去调取架构设计。别让每一次打补丁,都背着整栋大楼的施工图纸起跑。
第三步:用“激进子代理”给自己做手术
人类程序员自己改 Prompt,最大的阻碍是心理层面的舍不得。“这条当初踩坑踩得好惨才加上去的,删了万一复发怎么办?”
摆脱这种包袱最好的办法,是把这个任务反手丢给 AI,并施加极限压力。你可以试着用类似的思路让它生成一个重构方案:
这是当前的规则文件,它太臃肿了。请用三个递进的子代理重构它,每个子代理都要比前一个更激进:
- 代理 1:清理重复规则,优化结构排版
- 代理 2:拆分模块,把具体规范剥离到外置文件,主入口只保留渐进式路由
- 代理 3:假设总行数必须缩减 70%,大刀阔斧干掉所有能被编译器/工具替代的规则与模型内建常识
最终输出一份重组后的 PR。
很多时候你会惊讶地发现,哪怕直接采纳“代理 3”那个近乎冷酷的极简版本,你的日常编码体验不仅不会崩盘,整个环境反而变得清爽、敏捷得多。
给模型穿上重重盔甲,往往不会让它变成精锐战士,只会把它压得迈不开腿。
写规则和写代码是一样的道理:无节制地往上堆砌只是偷懒的表现,克制与解耦才需要真正的思考。
关掉这篇文章,去打开你的项目根目录,狠下心删掉一半陈旧的规则。腾出来的上下文空间,省下来的 Token 账单,还有更专注的模型,会立刻给你正反馈。