Karpathy 给 Claude Code 开的药方:四个原则治住 AI 乱写代码

Andrej Karpathy 一句话戳到了痛点:LLM 会带着错误的假设一路狂奔。它们把代码搞复杂、造抽象层、乱动不该动的东西。最气人的是,它们做得彬彬有礼、信心满满、而且批量生产。

一个 CLAUDE.md 文件 —— 现在已经是 Claude Code 的插件了 —— 专门治这些毛病。四个原则,直接从 Karpathy 的观察提炼而来,从根上改变 Claude Code 的行为方式。

四个原则

每个原则对应 Karpathy 指出的一个特定失败模式:

先想再写 —— LLM 会默默选择一个解释然后开干。这个原则强制显式推理:说清假设、给出可选项、有更简单的方案要提出来。如果 Claude 不确定,它会说出来而不是瞎猜。

“它们会替你做出错误假设,然后一路执行下去。它们不管理自己的困惑,不寻求澄清,不指出矛盾。”

保持简单 —— 默认行为是把 100 行的东西写成 1000 行。这个原则扼杀了这种倾向:不做需求之外的功能,不为只用一次的东西造抽象层,不搞没人要的”灵活性”。检验标准:一个资深工程师会觉得这东西过于复杂吗?

“它们特别喜欢把代码和 API 搞复杂,堆砌抽象层。”

只改该改的 —— LLM 会作为副作用改动它们不完全理解的代码。这个原则把修改范围严格限制在任务所需。不改动相邻代码。不重构没坏的东西。每行改动都必须能追溯到用户的需求。

“它们有时会改动或删除它们不完全理解的注释和代码,即使这些与任务无关。”

目标驱动 —— Karpathy 指出 LLM 特别擅长循环直到达成具体目标。这个原则把命令式指令变成可验证的成功标准。不是”加个校验”,而是”给无效输入写测试,然后让测试通过”。

“不要告诉它做什么,给它成功标准,看它自己跑。“

什么时候用

代码 Review —— 只改该改的原则产出的 PR 只包含请求的改动。没有顺手重构,没有神秘 diff。

新功能开发 —— 目标驱动把模糊需求变成可测试的结果。Claude 自己验证自己迭代,不需要牵着走。

调试 —— 先想再写在写代码之前就截住错误假设。Claude 主动告诉你它不确定什么,而不是猜错。

遗留代码 —— 只改该改的防止”我顺手清理一下”的陷阱。Claude 只动 bug,不动周围 500 行风格存疑的代码。

一个你需要知道的取舍

这些原则偏向谨慎而非速度。修个 typo、改个明显的一行代码,不需要走全套流程。设计这些原则是为了减少非琐碎工作上的昂贵错误,不是为了拖慢简单任务。

不加区分地用,你会得到一个过分谨慎、问太多问题的助手。Skill 最好用在你脑子分得清”加个字段”和”重设计认证流程”的区别的时候。

安装

方式一:Claude Code 插件(推荐)

在 Claude Code 中执行:

/plugin marketplace add forrestchang/andrej-karpathy-skills
/plugin install andrej-karpathy-skills@karpathy-skills

安装后跨项目生效。

方式二:CLAUDE.md(按项目)

新项目:

curl -o CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md

已有项目,追加到现有的 CLAUDE.md。

Claude 的行为会怎么变

没加 guidelines 之前,让 Claude”修一下校验的 bug”,它可能重写整个校验模块、加个配置系统、顺便”修正”你的错误处理风格。

加了之后,它先在测试里复现 bug,然后应用最小修复,最后列出正好三行改动。

差异体现在 diff 里。干净、最小化、可追溯。每处改动都能对应到一个需求。

实战:从指令式到声明式

没有 guidelines 的典型交互:

你:给 API 加限流
Claude:[加了 rate-limit 中间件、Redis 存储、配置系统
        带环境变量、顺便重写了错误处理]

有 guidelines 的相同请求:

你:给 API 加限流
Claude:我来实现。目标:每分钟超过 100 次请求返回 429。
        加中间件和配置开关。
        [三个文件,最小 diff,聚焦]

区别不微妙。第一个版本需要回滚,第二个直接进 review。


Karpathy 的批评并不新鲜 —— 每个重度 AI 编程用户都感受过这些痛点。新鲜的是有了一个系统性的解决方案,而且只装在一个文件里。

如果你的 Claude Code 会话经常以”它为什么也改了那个”结束,你早就知道这个工具解决的是什么问题。装好它只需要三十秒。

项目地址: https://github.com/forrestchang/andrej-karpathy-skills Karpathy 原文: https://x.com/karpathy/status/2015883857489522876

相关文章

如何把真实世界的能力封装为 Agent Skill

通用 AI Agent 能力很强,但缺少每支团队都有的东西:程序性知识。你的代码审核清单、部署手册、API 规范——这些都不在模型的训练数据里。 这就是 Agent Skill 要解 ...

用 PPTX Skill 生成不像 AI 做的幻灯片

AI 几秒就能生成一份演示文稿。问题在于它看起来就是 AI 做的——蓝色主题、密集项目符号、每个标题下一条装饰线。Anthropic 的 PPTX Agent Skill 换了一种思路:把幻灯片生成当 ...

跟 Claude 说一声,图就画好了:/drawio 在 Claude Code 里直接出图

跟 Claude 说一声,图就画好了:/drawio 在 Claude Code 里直接出图

你在跟 Claude Code 描述系统架构。它回复了一堆 ASCII art,差不多能看,但总觉得差点意思。你心想:"要是能直接让它画张图就好了。" 可以。 draw.io 的 Claude C ...

Quartz:把 Markdown 笔记变成可搜索、可漫游的数字花园

Quartz:把 Markdown 笔记变成可搜索、可漫游的数字花园

你已经有一堆 Markdown 笔记。问题不是写不出来,而是它们永远躺在本地文件夹里:搜索靠编辑器,引用靠记忆,分享靠复制粘贴。 把这些内容搬到传统博客也不对。博客假设文章是一条时间线,数字花园假设 ...

Karpathy 的 LLM Wiki:让 AI 把知识编译成会生长的第二大脑

Karpathy 的 LLM Wiki:让 AI 把知识编译成会生长的第二大脑

你把 20 份 PDF 扔进 NotebookLM,问了几个问题,答案看起来不错。第二天再问一个更细的问题,AI 又从零开始检索、拼接、猜测。没有积累。没有共识。没有记忆。 Karpathy 的 L ...

Superpowers:给 AI 编程助手装上工程纪律

Superpowers:给 AI 编程助手装上工程纪律

AI 编程助手最容易出问题的地方,不是不会写代码,而是太急着写代码。 你说“加个登录页”,它马上改文件。你说“修个 bug”,它先猜原因。你说“这个功能简单”,它也相信了。最后代码看起来跑了,但需求 ...