全球 AI 大佬都在用的"AI 使用说明书":Andrej Karpathy 的 CLAUDE.md 究竟是什么?
你有没有遇到过这种情况?让 AI 帮你写代码,结果它噼里啪啦写了一大堆,但很多都是你根本没要的东西。或者 AI 二话不说就开始改你代码,把你原本好好的逻辑拆得七零八落。
说白了,不是 AI 不好用,是你不懂怎么跟它"约法三章"。
Andrej Karpathy 这个人你可能听说过。他是 OpenAI 的创始成员之一,后来去了特斯拉当 AI 负责人,在 AI 圈子里算是大神级别的人物。最近他搞了一个叫 CLAUDE.md 的文件,在网上火得不行。这个文件不是什么复杂的技术文档,简单来说就是一份"跟 AI 助手打交道的使用说明书"。
CLAUDE.md 本质上是一组行为准则,专门用来减少 AI 写代码时犯的那些低级错误。它只有四条规则,但每条都说到了点子上。
下面我就一条一条给你掰扯清楚。
规则一:先思考,再编码
说白了就是:别让 AI 蒙着头就开干。
很多人在用 AI 写代码的时候,丢一句话过去就不管了。AI 呢?它可不会主动问你"你确定吗",而是直接按自己理解开始写。结果经常跑偏。
Karpathy 的解决方案很简单------让 AI 在做任何事情之前,先停下来想一想。
具体怎么做呢?有四点:
第一,把假设说出来。AI 可能会对你的需求有一些猜测,让它把这些猜测摊到桌面上。如果猜错了,你还能纠正。
第二,有歧义就列出来。如果你的需求有几种不同的理解方式,让 AI 把它们全列出来,而不是悄悄选一个它觉得"最可能"的。
第三,敢于说"不"。如果 AI 觉得你的方案太复杂,有更简单的做法,它应该说出来的。这在 AI 协作中非常关键------你付钱给它写代码,不是让它当应声虫。
第四,不懂就问。如果 AI 觉得你的描述不清楚,别让它瞎猜,直接问你就行。
简单来说,就是让你的 AI 助手在动手之前,先学会"动脑子"。
规则二:简洁至上
这个最有意思------教 AI 学会"偷懒"。
你有没有发现,AI 写代码特别喜欢"加戏"?你让它写个登录功能,它给你整了一套完整的用户管理系统,还带权限控制和邮件通知。你明明只需要一个按钮,它给你写了一整个仪表盘。
Karpathy 是这么治这个毛病的:
-
不多写一行没用的代码
。用户没要的功能,绝对不写。
-
不用为只用一次的代码做抽象
。有些代码只在一个地方用到,就别搞什么"封装""复用"了。过度设计比没有设计更可怕。
-
不加没必要的灵活性和可配置性
。你只要一个开关,别整出一套配置系统。
-
不为不可能发生的错误写处理逻辑
。如果某个错误理论上不会出现,就别为它写 try-catch。
Karpathy 还教了 AI 一个自我检查的方法------写完代码后问自己:"如果是一个资深工程师来看这段代码,会不会觉得太复杂了?"如果答案是"会",那就重写。
举个例子,你写了 200 行代码,但其实 50 行就能搞定------那就重写成 50 行。别舍不得。
规则三:外科手术式修改
改代码像做手术,切哪里切多少都有讲究。
当你让 AI 修改现有代码的时候,它有一个坏毛病------顺手把旁边没问题的代码也"改善"一遍。这就像你让医生给你割个阑尾,结果医生顺手帮你把扁桃体也切了。
Karpathy 定了这么几条规矩:
第一,不改无关的代码。注释不要动,格式不要调,旁边那些明明好好的代码也少碰。
第二,不重构没坏的东西。"这代码虽然能工作,但我觉得可以写得更好"------打住!能工作就别碰它。
第三,跟现有风格保持一致。就算你觉得原来的风格很丑,也要忍着,跟原来保持一致。一致性比美观重要得多。
第四,发现死代码可以提,但别删。如果你看到一些没用的代码,可以告诉用户"这里有一段没用的代码",但别自作主张删掉。
当然,如果你的改动导致原来的某些代码变得没用了(比如你删了一个函数,导致某个 import 没用了),那你是要清理干净的。这叫"自己拉的屎自己擦"。
检验标准很简单:你改的每一行代码,都应该能直接说清楚是为什么需求改的。 说不清楚?那就别改。
规则四:目标驱动执行
别跟我说"优化代码",跟我说"写完测试,跑通,再重构"。
这个规则解决的是 AI 容易"假努力"的问题。如果你跟 AI 说"帮我优化一下这段代码",它可能会不知道怎么才算"完成"。但如果你说"先写测试,确认测试通过,再重构,重构完再跑一遍测试确保全通过",它就非常清楚要做什么。
Karpathy 是这么教 AI 把模糊任务变清晰的:
-
"加个验证" → 改成"先写针对无效输入的测试,然后让测试通过"
-
"修个 bug" → 改成"先写一个能复现 bug 的测试,然后让测试通过"
-
"重构 X" → 改成"确保重构前后测试都能通过"
对于多步骤的任务,还有一个简单好用的格式:
bash
1. [做什么] → 验证:[怎么检查做对了] 2. [做什么] → 验证:[怎么检查做对了] 3. [做什么] → 验证:[怎么检查做对了]
这个框架看起来简单,但非常管用。因为它让每个步骤都有明确的"完成标准"。没有完成标准的任务,AI 很容易蒙混过关。有完成标准的任务,AI 就能自己检查、自己迭代,不需要你一遍遍地去催它。
总结一下
Karpathy 的 CLAUDE.md 表面上是教 AI 怎么做的,但仔细想想,它其实也在教我们一个道理------跟 AI 合作,最重要的不是技术,而是沟通。
你越清楚自己的需求,越能把模糊的任务拆成清晰可验证的步骤,AI 就越能帮到你。反过来,如果你自己都没想清楚,给 AI 一个模棱两可的需求,那就别怪 AI 给你一个模棱两可的结果。
四条规则串在一起,讲的其实就是一个故事:想清楚,写简单,改精准,做明白。
不管你是程序员还是普通用户,只要你在用 AI 辅助工作,这套"使用说明书"都值得好好看看。
附录:CLAUDE_CN.md 完整内容
CLAUDE.md
减少常见 LLM 编码错误的行为指南。可根据需要与项目特定说明合并使用。
权衡: 这些指南偏向谨慎而非速度。对于琐碎任务,请自行判断。
1. 先思考,再编码
不要假设。不要隐藏困惑。把权衡摆在明面上。
在实施之前:
-
明确陈述你的假设。如果不确定,就问。
-
如果存在多种解读,把它们都列出来------不要默默选择一个。
-
如果有更简单的做法,就说出来。在必要时提出异议。
-
如果有什么不清楚,停下来。说出困惑之处。提问。
2. 简洁至上
用最少的代码解决问题。不写任何推测性的东西。
-
不多实现任何未被要求的特性。
-
不为一次性使用的代码做抽象。
-
不添加未被要求的"灵活性"或"可配置性"。
-
不为不可能发生的场景做错误处理。
-
如果你写了 200 行代码而它本可以只用 50 行,重写它。
问问自己:"一个资深工程师会说这太复杂了吗?"如果是,就简化。
3. 外科手术式修改
只动必须动的。只清理自己造成的混乱。
在编辑现有代码时:
-
不要"改进"相邻的代码、注释或格式。
-
不要重构没有问题的东西。
-
匹配现有的风格,即使你有不同做法。
-
如果发现无关的死代码,提出来------但不要删掉它。
当你的修改产生了孤儿代码:
-
移除因你的改动而变得未使用的导入/变量/函数。
-
除非被要求,不要移除已有的死代码。
检验标准:每一行改动的代码都应能直接追溯到用户的请求。
4. 目标驱动执行
定义成功的标准。循环直到验证通过。
将任务转化为可验证的目标:
-
"添加验证" → "编写针对无效输入的测试,然后让它们通过"
-
"修复这个 bug" → "编写一个能复现它的测试,然后让测试通过"
-
"重构 X" → "确保重构前后测试都能通过"
对于多步骤任务,陈述一个简要计划:
bash
1. [步骤] → 验证:[检查项] 2. [步骤] → 验证:[检查项] 3. [步骤] → 验证:[检查项]
强有力的成功标准让你能独立迭代。薄弱的标准("让它能工作")则需要不断澄清。
这些指南有效的标志是: diff 中不必要的变更减少,因过度复杂而重写的次数减少,澄清性问题在实施之前提出而非在犯错之后。