Karpathy Guidelines - 解决 LLM 编码常见陷阱的 4 条铁律
60K+ Stars,一条 CLAUDE.md 文件解决 LLM 编码最头疼的三大问题。
📋 目录
问题背景
Andrej Karpathy 在 Twitter 上发过一条引发广泛讨论的帖子,总结了 LLM 编码助手最常见的三大问题:
问题 1:错误假设与隐藏困惑
“Models make wrong assumptions on your behalf and just run along with them without checking. They don’t manage their confusion, don’t seek clarifications, don’t surface inconsistencies, don’t present tradeoffs, don’t push back when they should.”
AI 常常在不确定的情况下自己瞎猜,然后一路跑下去,不会:
- 管理自己的困惑
- 寻求澄清
- 提出不一致之处
- 展示权衡方案
- 在该反对的时候反对
问题 2:过度复杂化
“They really like to overcomplicate code and APIs, bloat abstractions, don’t clean up dead code… implement a bloated construction over 1000 lines when 100 would do.”
AI 天生喜欢过度设计:
- 代码和 API 越来越臃肿
- 抽象越来越复杂
- 不清理死代码
- 100 行能解决的问题写出 1000 行
问题 3:随意修改无关代码
“They still sometimes change/remove comments and code they don’t sufficiently understand as side effects, even if orthogonal to the task.”
AI 有时会顺手改掉它不理解的东西:
- 修改或删除注释
- 改动与任务无关的代码
- 作为”副作用”引入意外变更
Karpathy Guidelines 是什么?
Karpathy Guidelines 是基于 Andrej Karpathy 观察提炼出的四条铁律,直接解决上述三大问题。
| 铁律 | 解决的问题 |
|---|---|
| Think Before Coding | 错误假设、隐藏困惑、缺失权衡 |
| Simplicity First | 过度复杂化、臃肿抽象 |
| Surgical Changes | 无关修改、边界不清 |
| Goal-Driven Execution | 缺乏验证、循环效率低 |
核心思想:不是让 AI 更聪明,而是给 AI 明确的行为约束。
四大铁律详解
1. Think Before Coding
核心:不要假设。不要隐藏困惑。展示权衡。
LLM 的天性是选一个解释然后一路跑下去。这条铁律强制它显式思考:
1 | ❌ 错误做法(隐藏假设): |
执行要点:
- 明确假设 - 不确定就问,不要猜
- 多方案展示 - 别偷偷选一个,展示 2-3 种方案
- 主动反对 - 有更简单的方案就说出来
- 停下来澄清 - 不清楚就问,不要假装明白
2. Simplicity First
核心:最小代码解决问题。不做投机性设计。
对抗 AI 的”过度设计冲动”:
1 | ❌ 错误做法(过度设计): |
执行要点:
- 没有要求的功能不加
- 单次使用的代码不抽象
- 没有要求的”灵活性”不加
- 不可能发生的情况不处理
- 200 行能写成 50 行,就重写
检验标准:资深工程师看了会说”这也太复杂了”吗?如果会,就简化。
3. Surgical Changes
核心:只改必须改的。只清理自己产生的垃圾。
防止 AI “顺手优化”周边代码:
1 | ❌ 错误做法(顺手优化): |
执行要点:
- 不”优化”邻近代码、注释、格式
- 不重构没坏的东西
- 匹配现有风格,即使你觉得更好的
- 注意到无关死代码 → 提示用户,不直接删
检验标准:每行改动都能追溯到用户的请求。
4. Goal-Driven Execution
核心:定义成功标准。循环直到验证。
把命令式任务转化为可验证的目标:
| 命令式(弱) | 目标式(强) |
|---|---|
| “添加验证” | “写失败输入的测试,然后让它们通过” |
| “修复 bug” | “写复现测试,然后让它通过” |
| “重构 X” | “确保重构前后测试都通过” |
多步骤任务的规划模板:
1 | 1. [步骤] → verify: [检查点] |
执行要点:
- 成功标准强 → AI 可以独立循环
- 成功标准弱(”让它工作”)→ 需要频繁澄清
Karpathy 原话:
“LLMs are exceptionally good at looping until they meet specific goals… Don’t tell it what to do, give it success criteria and watch it go.”
安装配置
方式一:Claude Code 插件(推荐)
1 | # 1. 添加市场 |
方式二:CLAUDE.md 文件(项目级)
新项目:
1 | curl -o CLAUDE.md https://raw.githubusercontent.com/multica-ai/andrej-karpathy-skills/main/CLAUDE.md |
现有项目(追加):
1 | echo "" >> CLAUDE.md |
方式三:Cursor
Cursor 版本在 .cursor/rules/karpathy-guidelines.mdc:
1 | # 复制到你的项目 |
详见 CURSOR.md。
实战案例
案例 1:Think Before Coding
场景:添加缓存功能
1 | 你: 帮我给 API 加个缓存 |
没有铁律的情况:
1 | 你: 帮我给 API 加个缓存 |
案例 2:Simplicity First
场景:实现错误处理
1 | ❌ 过度复杂(无铁律): |
案例 3:Surgical Changes
场景:修改配置文件
1 | ❌ 顺手优化(无铁律): |
案例 4:Goal-Driven Execution
场景:修复登录 bug
1 | ❌ 命令式(弱目标): |
最佳实践
1. 检验是否生效
这些铁律生效时,你应该看到:
- diff 更干净 - 只有请求的改动,没有”顺手优化”
- 首次就简洁 - 不需要重写过度复杂的代码
- 先问后写 - 澄清问题出现在实现之前,而不是出错之后
- PR 更干净 - 没有 drive-by refactor 或”顺便改进”
2. 项目定制
铁律可以与项目特定规则合并:
1 | ## Karpathy Guidelines(来自插件) |
3. 权衡:谨慎 vs 速度
这些铁律偏向谨慎。对于真正简单的任务(修复 typo、显而易见的一行改动),可以灵活处理。
目标:减少非琐碎工作的错误,不是拖慢简单任务。
4. 常见信号
当 AI 有这些想法时,警惕:
| 信号 | 意味着 |
|---|---|
| “顺便优化一下” | 违反 Surgical Changes |
| “加个抽象层会更灵活” | 违反 Simplicity First |
| “我猜你是想…” | 违反 Think Before Coding |
| “应该能工作了” | 违反 Goal-Driven Execution |
总结
Karpathy Guidelines 的核心价值:
| 铁律 | 核心价值 |
|---|---|
| Think Before Coding | 防止错误假设,强制澄清 |
| Simplicity First | 防止过度设计,保持最小 |
| Surgical Changes | 防止顺手修改,边界清晰 |
| Goal-Driven Execution | 强制验证,循环可靠 |
不是让 AI 更聪明,而是给 AI 明确的行为边界。
如果你在使用 AI 编码助手时遇到过:
- AI 瞎猜需求,写出一堆你不需要的功能
- AI 顺手改了不该改的东西,引入 bug
- AI “修复”一个问题,又搞出两个新问题
- AI 说”应该能工作”,结果根本没验证
Karpathy Guidelines 可能就是你需要的——不是更好的 AI,而是更有纪律的 AI。
Comments