
这些坑,你肯定踩过
用AI写代码这么久,你是不是也经常遇到这些让人血压飙升的情况:
- 让它加个简单功能,结果整出一堆花里胡哨的抽象,代码膨胀了10倍
- 明明只改一行代码,它把整个文件的注释和格式都改了,review时满屏都是diff
- 需求没说清楚的地方,它不问你,直接瞎猜,做出来完全不是你想要的
- 代码看起来没问题,一运行就发现各种过度设计带来的bug
如果你也这样,那今天这篇文章适合你。
这些问题的解法,Andrej Karpathy早就想明白了。
GitHub地址:
Karpathy是谁?他发现了什么?
Andrej Karpathy,前特斯拉AI总监、OpenAI创始成员,现在在搞教育。他在AI圈的地位,大概相当于篮球界的乔丹。
他之前在社交媒体上吐槽过LLM编程的问题,每一条都戳中痛点。总结起来就三个:
问题一:盲目假设,不懂就问
AI会自作主张地做错误假设,然后一路走到黑。它不会说"这里我不确定",而是直接选一个它觉得对的方案开干。等你发现不对,它已经写了100行代码。
问题二:过度设计,代码臃肿
AI特别喜欢把代码复杂化,过度使用抽象,不清理无用代码。本来100行能搞定的事,它非要写1000行,还美其名曰"更好的架构"。
问题三:副作用太大,乱改代码
AI有时会顺手改掉它"觉得"有问题但实际上没问题的代码。注释、格式、甚至没让你动的功能,都可能被它"优化"了。
这三个问题,用过AI写代码的人都懂。
解决方案来了——四大原则
最近有个开发者把Karpathy的这些经验做成了一个Claude Code插件,叫andrej-karpathy-skills。
这个插件的核心,就是通过一个CLAUDE.md文件,给AI设定了四条必须遵守的铁律。
原则一:思考先行(Think Before Coding)
核心要求:不假设,不隐藏困惑,展示权衡。
具体怎么做:
- 明确陈述假设——如果不确定,就提问而不是猜测
- 展示多种解释——当存在歧义时,不要默默选一个
- 必要时提出反对——如果有更简单的方法,就说出来
- 困惑时停止——指出不清楚的地方并要求澄清
说人话:让AI先想明白再动手,别急着写代码。遇到不确定的地方,先问清楚,别瞎猜。
原则二:简洁至上(Simplicity First)
核心要求:用最少的代码解决问题,不做任何投机的事情。
具体约束:
- 不添加超出要求的功能
- 不为单次使用的代码做抽象
- 不添加未被要求的"灵活性"或"可配置性"
- 不为不可能出现的场景做错误处理
- 如果200行可以简化为50行,那就重写
说人话:别过度设计,够用就行。AI特别喜欢炫技,你要按住它。
原则三:精准改动(Surgical Changes)
核心要求:只碰必须碰的,只清理你自己制造的混乱。
具体规则:
- 不要"改进"相邻的代码、注释或格式
- 不要重构没有坏掉的东西
- 匹配现有的风格,即使你会用不同的方式
- 如果注意到不相关的死代码,提及它——但不要删除它
测试标准:每一行改动都应该直接追溯到用户的需求。
说人话:让你改A,就别动B。AI的手太长了,得给它戴个"紧箍咒"。
原则四:目标驱动(Goal-Driven Execution)
核心要求:定义成功标准,循环直到验证通过。
把命令式任务转化为可验证的目标:
| 不要说 | 应该说 |
|---|---|
| "添加验证" | "为无效输入编写测试,然后让它们通过" |
| "修复这个bug" | "编写一个能复现它的测试,然后让它通过" |
| "重构X" | "确保测试在重构前后都通过" |
对于多步骤任务,陈述一个简要计划:
- [步骤] → 验证:[检查]
- [步骤] → 验证:[检查]
- [步骤] → 验证:[检查]
正如Karpathy所说:"LLMs异常擅长循环直到它们满足特定目标……不要告诉它做什么,给它成功标准,然后看着它去做。"
说人话:给AI定个目标,让它自己想办法达成,而不是一步步教它怎么做。
怎么用?两种方式
这个插件用起来很简单,有两种方式:
方式一:Claude Code插件(推荐)
在Claude Code中,先添加插件市场:
/plugin marketplace add forrestchang/andrej-karpathy-skills
然后安装插件:
/plugin install andrej-karpathy-skills@karpathy-skills
这样就把指南安装为Claude Code插件,在你的所有项目中都可用。
方式二:CLAUDE.md(按项目)
对于新项目:
curl -o CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md
对于现有项目(追加):
echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md
怎么知道它在起作用?
用了这套原则后,你会发现这些变化:
✅ diff中更少的不必要改动——只出现被要求的改动,不会满屏都是无关的修改
✅ 更少因过度复杂导致的重写——代码第一次就很简单,不用返工
✅ 实现前先提出澄清问题——AI会先问清楚需求,而不是在犯错之后
✅ 干净、最小化的PR——没有顺便的重构,review起来轻松多了
结语:给AI套上"紧箍咒"
用AI写代码,就像雇了一个特别聪明但有点"多动症"的实习生。它能力强,但需要你给它设定明确的边界。
Karpathy的这四条原则,就是给AI套的"紧箍咒"。不是限制它的能力,而是让它的能力用在正确的地方。
试试这个插件,让你的AI助手从"猪队友"变成"神助攻"。
关注
如果这篇文章对你有帮助,欢迎点赞、在看、转发三连!你的支持是我持续创作的动力。
想第一时间获取更多AI编程技巧?关注我的公众号,一起写出更好的代码!