社区最近流传了一份据说是 Karpathy 自己在用的 Claude.md 文件。先说下背景,Claude.md 是一个项目级说明文档,放在代码仓库的根目录里,Claude Code 启动的时候会自动读取。你可以理解成给 AI 写的一份「入职须知」。
啊,AI 领域金字塔尖的存在,用 Claude 写代码的时候,居然还得写一份几千字的规矩来约束它?
这反差感太强了。
但你仔细看完这份文件就会发现,他不是在炫技,他是真的被 AI 坑怕了。
文件里有一条规则我印象特别深,叫「写之前先读」。Karpathy 说,LLM 写出烂代码最大的原因就是,它看到一个任务,脑子里立刻匹配到训练数据里的某种模式,然后直接开始生成。不看现有代码怎么写的,不看项目里用了什么库,不看测试文件里定义的预期行为,上来就库库写。
你想想看,这是不是跟刚入职的实习生一模一样?领导说「加个功能」,实习生二话不说就开始干,写完一看,代码确实能跑,但风格跟整个项目格格不入,像是另一个人写的。
因为确实是另一个「人」写的。
Karpathy 的原话更狠,「你生成了一段正确的代码,但它和所在代码库完全格格不入。于是,人类开发者要么必须把它重写成符合项目风格的样子,要么永远忍受代码库内部的不一致。这两种结果都很糟糕。」
还有一条让我直接拍大腿的,叫「保持简单」。他专门点了 LLM 过度设计的几种典型症状。
再比如,它会给永远不会是 null 的值加 null 检查,给只有一个实现的接口写抽象基类,给永远不会变的东西做成可配置项。每一个配置项都是别人必须做出的一个决定,也是别人必须正确设置的一个值。
Karpathy 给了一个特别精准的判断标准,如果你问「为什么这里要这样抽象?」回答是「以防以后需要」,那就是过度设计。
「以防以后需要」不是需求,是对未来的猜测。关于未来的猜测,通常都是错的。
这话听着有点刺耳但,你认真想想,AI 写代码最大的问题可能真不是不会写,而是不会「忍住不写」。
它太想表现了。
你让它改一个函数的 bug,它顺手把旁边函数的变量名也改了,注释里的拼写错误也修了,import 顺序也重新排了。Karpathy 管这叫「大杂烩」,文件里专门写了一句,「不要碰你没被要求碰的东西。」
这让我想到一个特别有画面感的场景。你有没有见过那种新来的实习生,特别勤奋特别想表现,你让他改个按钮颜色,他把整个页面都重构了?老板看了 diff 直接血压飙升,因为根本看不出来他到底改了什么。
AI 现在就是这个状态。能力是有的,甚至很强。
但它缺一样东西,叫做「克制」。
回到这份文件里另一条让我觉得特别值得聊的规则,关于「知识幻觉」。
这条可能是整份文件里最细思极恐的一条。
什么意思呢,就是 AI 会自信满满地用一个根本不存在的 API,或者用一个两个版本前就被移除的参数。Karpathy 原文的说法是,「你自信地使用了一个不存在的 API、一个两个版本前就被移除的参数,或者一个你幻想出来的库特性。」
注意这个词,幻想出来的。
它不是不确定然后蒙一个,它是真的「觉得」这个东西存在。特别笃定,笃定到你 code review 的时候都不会去质疑它。然后你跑代码的时候就炸了,一查,这个方法签名压根不存在。
这大概是 AI 编程里最危险的地方。不像人类实习生好歹会说一句「我不太确定这样写对不对」,AI 会用一种特别确定的语气把你带到坑里。而且越是你不熟悉的库,你越容易被它带偏,因为你自己也不知道对不对。
所以 Karpathy 写了一条很朴素但很重要的规则,「如果你不能 100% 确定某个方法以这个精确签名存在,就说出来。查文档。看项目里的实际源码。」
他还加了一句,「如果你卡住了,就说出来。」
你敢信???我们现在需要教一个 AI 说「我不知道」。
看完整份文件最大的感受不是学到了什么新技巧,而是一种很强的确认感。就是你心里隐隐约约觉得 AI 写代码「哪里不对」,但说不清楚到底是哪里不对。Karpathy 帮你全说清楚了,而且每一条你看完都会觉得,对对对,我也遇到过。
我是真的觉得,这里面藏着一个关于 AI 编程的底层认知。
软件工程里有一个老观念,好的代码不是写出来的,是「忍出来的」。你得忍住不过度设计,忍住不顺手重构,忍住不加没必要的抽象。这个道理人类程序员要花好几年才能悟到。
AI 现在什么都会,就是不会忍。
所以 Karpathy 做的事情,其实特别朴素。他不是在教 AI 怎么写代码,他是在教 AI 怎么「不写」代码。
有人可能觉得,连 Karpathy 都得写这么多规矩来管 AI,是不是说明 AI 编程其实没那么好用?
我觉得恰恰相反。
你想想看,你会给一个完全不行的人写行为规范吗?不会的,直接劝退了。你只会给那种「很聪明但需要调教」的人写规范。这份文件的存在本身就说明,AI 编程的瓶颈已经不是 AI 的能力了,而是人类能不能把自己的经验和判断力,用 AI 能理解的方式传达给它。
GitHub 上有人基于 Karpathy 的思想做了一个 CLAUDE.md 模板,叫 andrej-karpathy-skills,据说能把 Claude 的代码错误率从 41% 降到 11%。Star 数十几万。
同一个 AI,同样的能力,加一份说明文件,错误率直接砍掉四分之三,这个数字你品一下。
说明现在 AI 编程的天花板,很多时候不在 AI 那边,在你这边。你能不能把你的标准、你的经验、你的「什么该做什么不该做」清晰地告诉它,决定了它交出来的东西是惊喜还是惊吓。
所以如果你也在用 Claude Code 或者其他 AI 编程工具,我有一个最小可执行建议,今天就在你的项目根目录建一个 CLAUDE.md。不用写几千字,先把你踩过最狠的坑、你最受不了的代码习惯、你项目里最容易搞混的地方写进去。别照抄别人的模板,因为你的项目和 Karpathy 的项目不一样,你的标准和他的标准也不一样。
感兴趣的话 GitHub 搜 andrej-karpathy-skills 就能找到社区版模板,可以参考思路,但核心还是得自己写。
别指望 AI 天生就懂你的项目。它很聪明,但它需要你教,就像 Karpathy 教它一样。
发布于 上海
