1. 当 CLAUDE.md 越来越长,AI 的表现却一路下滑
1.1 规则的本质:贴在墙上的规章制度
先聊一个反直觉的现象。很多刚开始接触 Claude Code、Codex 这类 AI 编程工具的人,会把“配置规则”当成第一优先级:把编码规范、提交规范、命名约束、禁止事项全部写进项目里的 CLAUDE.md,或者塞进 IDE 的 Rules 配置。这看起来非常合理——既然 AI 不熟悉我们的项目,那就用规则把话说清楚。但我自己的实测结果是:规则文件从十几行涨到两三百行之后,模型的整体表现反而变差了。
这不是玄学,而是规则这种形态本身的问题。规则本质上是“被动声明”,它在每次对话开始的时候被加载进上下文,模型会像读工程文档一样把它读完,然后在这个约束集下面执行任务。这个机制对短规则非常有效,但对长规则完全不是线性叠加的关系。打个比方,规则就像贴在工位上的一整面墙的规章制度:如果只有三五条,每个人扫一眼就记住了;如果密密麻麻贴满三面墙,员工反而会选择性失明,只会盯着自己眼前那条看,甚至为了不违反某一条,做出一个违反另外三条的操作。
我见过最典型的场景:CLAUDE.md 里同时写了“优先使用已有工具函数,不要重复造轮子”和“保持代码自包含,减少模块间耦合”。这两条单独拿出来都正确,但放到一起时,AI 在处理某一个具体需求时经常会被两条规则同时拉扯,最后给出的代码既没有复用工具函数,也不自包含,而是东拼西凑。要命的是,你很难责怪它——因为两条规则都对,它只是不知道哪条优先级更高。
1.2 上下文税:规则越多,有效注意力越少
说道底,规则的本质是“上下文税”。AI 编程工具在每一轮对话里都要维护一个上下文窗口,窗口里的内容决定了它这一次能看到的代码范围、能记住的修改历史、能携带的任务信息。规则文件被加载之后,就永久占用了这部分空间。你每写十条规则,相当于从模型的工作记忆里划走一块区域;规则冗余和矛盾越多,模型真正用来理解需求、阅读代码的空间就越小。
我自己做过一个很粗暴的测试:同一个中等体量的前端项目,分别在 5 条规则和 120 条规则两套配置下要求 AI 增加一个表单校验功能。前者一次就给出了可运行的实现,后者花了三轮对话还在反复确认“应该优先遵循提交规范还是项目结构规范”。120 条规则的配置里包含了很多我认为非常重要的领域知识,但实际上它们根本没有机会被同时激活——模型只会抽取其中一部分来遵循,而且是每次抽取的都不一样。这个测试让我意识到:Rules 擅长的是“禁止”和“不做什么”,它完全不擅长“引导”和“怎么做”。而 AI 编程工作流恰恰需要的是后者。
这里顺便提一个容易踩的误区:很多人把 Rules 写成了巨大的百科全书。常见的错误包括把整个项目的架构说明塞进去、把第三方库的 API 文档复制进去、把历史上踩过的所有坑都以警告形式堆进去。这些内容写成 Markdown 文档没问题,但写成规则就有问题——因为规则是每轮对话都要被重新阅读一遍的,不是按需调用的。你给我的不是规则,是包袱。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Skills 的开放标准为什么能解决这个问题:目录协议与按需加载
2.1 SKILL.md + 脚本 + reference:一个标准包的解剖
Anthropic 在 Agent Skills 上给出的思路和 Rules 完全不同。Rules 是一条一条的“禁令”,Skills 是一个一个的“工具包”。一个标准的 Skill 是一个文件夹,里面可以装三种东西:说明文件、脚本和参考文档。它的目录长得像这样:
code复制my-skill/
├── SKILL.md # 唯一必须存在的文件
├── scripts/ # 可选的执行脚本(Python、Shell、Node)
├── reference/ # 可选的参考文档,按需读取
└── requirements.txt # 脚本依赖,会被自动安装
最关键的是 SKILL.md,它用 YAML frontmatter 声明这个技能的元信息,然后用 Markdown 正文写完整的操作流程。一个最基本的例子:
code复制---
name: frontend-review
description: 当用户希望对前端代码进行审查,检查 TypeScript 类型、ESLint 规范、Sass @import 弃用以及构建产物时使用。
---
# 前端代码审查
当你需要审查前端代码时,按照以下步骤操作:
1. 运行 scripts/preflight.sh,收集变更文件列表。
2. 运行 scripts/check_sass.sh,检查 SCSS 文件中是否还有已废弃的 @import。
3. 运行 npx tsc --noEmit,收集 TypeScript 类型错误。
4. 运行 npx eslint --format json .,收集规范问题。
