管 AI 像管实习生:从 Karpathy 的 CLAUDE.md 看规则文件该怎么写

July 3, 2026

aiengineeringclaudeagent

写于 2026 年 7 月


2026 年 5 月,Andrej Karpathy 加入 Anthropic。社区里有人感慨:他开源的代码变少了。

但很快,另一个东西在社区里流传起来——一份号称「Karpathy 自用的 CLAUDE.md」。

真实性存疑。Karpathy 本人没有公开认领过,文件里的措辞也不完全像他的风格。但内容货真价实:它系统性地整理了「怎么给 AI 编程助手下规矩」,七类规则,条条切中要害。即便不是他写的,也是基于他长期表达的工程思想。

我读完之后有一个明确的判断:这份文件真正有价值的,不是它写了什么,而是它为什么这么写。 照搬一份别人的 CLAUDE.md 到自己的项目,几乎注定没用。但理解它背后的方法论,能帮你写出一份真正管用的工程规范。

这篇文章不是翻译复述。我想拆解的是规则文件这件事的本质——以及怎么为自己的项目写一份。


先说一个反直觉的判断

很多人把 CLAUDE.md / AGENTS.md 当成「prompt 的延伸」——给 AI 多写几句叮嘱,让它表现更好。

这个理解是错的。

规则文件的本质,是把你脑子里的工程默认值,外化成 AI 能读取的约束。

一个资深工程师接手新项目时,脑子里有大量隐性默认值:代码风格、错误处理偏好、依赖选择原则、测试粒度、commit 规范……这些东西平时不需要写下来,因为人类同事会通过 review、闲聊、看历史代码慢慢习得。

但 AI 没有这个渠道。它每次进来都是白纸一张。你能指望它“悟”出你 prefer 函数式风格、不允许加新依赖、commit message 必须带 issue 号吗?不能。

所以规则文件解决的是一个信息传递问题:怎么把一个人类工程师需要三个月才能“摸清楚”的项目约定,在 AI 接手的第一秒就告诉它。

从这个角度看,Karpathy 的那份文件之所以值得读,不是因为它的具体规则多高明,而是因为它示范了约束该写在哪些维度上。


七类规则,以及它们为什么是这七类

我把原文的规则重新归了一下,发现它们其实覆盖了一个 AI 写代码的完整生命周期:读 → 想 → 写 → 改 → 验 → 收尾。这不是随机的七条,而是一个工种的工作流。

1. 写之前先读(读)

不要在没读懂现有代码库前就生成代码。

这是最反直觉、又最关键的一条。

新手用 AI 的典型模式是:抛一个需求,AI 立刻开始写。看起来高效,实际上产出的代码几乎必然和现有代码风格格格不入——命名不对、抽象层级不对、错误处理方式不对。

资深工程师接手任务的第一反应永远是先读代码。看看类似功能别人怎么实现的,import 哪些工具,测试怎么组织。AI 应该被强制走同样的流程。

这条规则的潜台词是:AI 写得快不是优势,写得对才是。 强制它先读,是为了让它写出来的东西能 merge 进现有项目,而不是成为一块需要人重新收拾的烂摊子。

2. 想清楚再动手(想)

说清假设、取舍,遇到模糊需求先问,不要默默替用户做决策。

「加个认证」这种需求,可能是 JWT、可能是 OAuth、可能是 session cookie。默默替你选一个,几乎肯定选错。然后你花在纠正它的时间,比从头讲清楚还长。

这条规则的本质是:把隐式决策显式化。AI 倾向于“乐观路径”——假设你想要最常见、最标准的实现。但项目里的真实需求往往是有取舍的,没人替它做这个取舍,它就会选一个看起来合理的,然后你不得不推翻重来。

对应到规则文件里,你应该写清楚:哪些决策允许 AI 自己做,哪些必须先问。 比如我的 AGENTS.md 里有一条——遇到模糊需求,先基于上下文给最合理方案并推进;如果错误假设会带来真实风险,则先问清楚。这条省了我无数次来回。

3. 保持简单(想)

抵抗过度设计:过早抽象、臆想式错误处理、不必要的可配置性。

AI 最容易犯的错之一:为了“以防万一”,加上一堆现在根本用不上的灵活性。一个只需要返回字符串的函数,它给你写成泛型;一个只在一处调用的逻辑,它给你抽成接口。

「以防以后需要」不是需求。YAGNI(You Aren’t Gonna Need It)这条原则对 AI 尤其重要,因为人类工程师有“懒”的本能来抵抗过度设计,AI 没有——它写复杂代码和写简单代码一样快。

规则文件里应该明确:优先选简单方案,影响面尽可能小。

4. 外科手术式修改(写)

diff 尽可能小。不碰没被要求碰的代码,匹配现有风格,哪怕项目用 var。

这条很多人会忽略它的下半句:匹配现有风格,哪怕你觉得它不对。

人类工程师有个本能——看到不顺眼的代码顺手改了。AI 也学会了这个“本能”,但更失控。它会把整个文件重新格式化、顺手“优化”一些无关函数、把 var 改成 let。结果 PR 一打开,几百行 diff,review 的人根本看不出哪些是实际改动。

规则文件里要写死:改动只触碰必要范围,避免顺手重构和引入无关变化。 这条比任何代码风格规定都重要。

5. 验证(验证)

修 bug 先写复现测试,改动前后都跑测试,测行为而非实现。

这条直接对应 TDD(测试驱动开发),但用在 AI 上有特别的意义。

AI 写的代码有一个特征:它经常“看起来对”。语法没错、逻辑通顺、变量名起得好——但行为可能是错的。光看代码 review 不出来,必须靠测试。

更关键的是,测试是 AI 能否自我验证的前提。没有测试,AI 自己都不知道它做对了没有,只能靠人告诉它。有了测试闭环,它就能在交付前自己确认结果。这就是为什么 OpenAI 那个百万行代码实验里,“CI 验证闭环”是核心准备之一。

6. 目标驱动执行(验证)

把模糊任务变成可验证任务,多步任务先说明计划。

这条容易被低估。AI 跑长任务时,最大的失败模式不是某一步做错,而是跑着跑着忘了最初要干什么。

规则文件里要求“多步任务先说明计划”,本质上是在做目标锚定——让 AI 把模糊的指令拆解成可验证的步骤,并在执行过程中不断回到这个计划。这跟人类工程师写 task list 是一个道理,区别是人类会自觉做,AI 需要被要求做。

7. 调试 / 依赖 / 沟通(收尾)

调试别猜要调查;别轻易加依赖;commit message 写具体。

这三条放在一起,因为它们都属于“收尾质量”。


七类规则之外:那些常见的失败模式

原文还列了一组 AI 写代码的典型失败模式,我觉得比规则本身更值得贴在墙上:

注意一个共性:这些失败都不是模型能力不够,而是缺少约束。 更强的模型会减轻一部分,但不会根除。这就是为什么即便是 Karpathy 这个级别的人,也得老老实实写规则文件。


怎么写一份属于自己的规则文件

这是我最想讲的部分。因为照搬别人的 CLAUDE.md 几乎一定没用——你的技术栈、代码风格、依赖偏好、团队约定都不一样。

我的建议是按这个顺序来:

第一步:把项目的基本事实写进去。

技术栈、目录结构、构建命令、测试命令、部署方式。这些是最基础的“AI 必须知道的事”。看起来琐碎,但能避免 AI 凭空猜测你的项目长什么样。

第二步:把“不允许的事”写清楚,比写“建议做的事”更重要。

负面约束比正面指导更有效。“不要加新依赖”、“不要重命名现有变量”、“不要在没跑测试前标记完成”——这些明确的禁令,AI 执行得比模糊的“保持代码整洁”靠谱得多。

第三步:把你自己最常纠正的事,提炼成规则。

这是最关键的一步。每次你发现自己在反复纠正 AI 同一个问题——比如它又顺手重格式化了代码、又加了一个没必要的泛型、又在 commit 里写了“update”——就把这条纠正写进规则文件。

规则文件不是一次写完的,它是从你的纠正历史里长出来的。 这也是为什么照搬别人的没用——你和别人的纠正历史不一样。

第四步:定期清理。

模型在变强。有些规则是针对旧模型的弱点写的,新模型已经不犯了,留着反而增加 token 消耗和干扰。每隔一段时间回头问一句:这条规则还有必要吗?


一个更深的观察

我读完那份 CLAUDE.md 之后,最强烈的感受不是“AI 需要规则”,而是另一件事:

给 AI 写规则的过程,本身就是一次对自己工程习惯的盘点。

你得问自己:我到底希望代码长什么样?我处理 bug 的标准流程是什么?我什么时候允许加依赖?我对 commit message 的要求是什么?……

这些问题平时是隐性的,藏在你的肌肉记忆里。但你从来没被迫把它们一条一条写出来过。AI 强制你做了这件事。

很多团队发现,写完一份好的 AGENTS.md 之后,受益的不只是 AI——新人 onboarding 速度也变快了。因为那份文件把团队的隐性约定显式化了,而人类同事也需要这些信息。

这或许才是规则文件最被低估的价值:它不只让 AI 干得更好,它也让你的工程实践变得更清晰、更可传承。


结语

原文末尾提了一句:社区里有个 andrej-karpathy-skills 项目,据称能把 Claude 的代码错误率从 41% 降到 11%。

这个数字我没法独立验证,但方向是对的。约束是有杠杆的——一次写好的规则,会在之后每一次 AI 调用里持续生效。

所以别把规则文件当成写给 AI 的 prompt。把它当成写给你自己、写给你的团队、写给未来每一个接手这个项目的人的工程文档。

写一份,然后持续迭代它。这是这个 AI 时代少数确定有回报的投入之一。


参考来源:社区流传的「Karpathy CLAUDE.md」(2026.06)、andrej-karpathy-skills 项目、以及我个人维护 AGENTS.md 的实践