简介

andrej-karpathy-skills 是一个旨在改善 Claude Code 行为的项目,其核心理念源自 AI 领域知名专家 Andrej Karpathy 对 LLM 编程陷阱的深刻观察。

解决的问题

Andrej Karpathy 在其推文中指出了 LLM 编程时的常见问题:

“模型会替你做出错误的假设,然后不加验证地继续执行。它们不管理困惑,不寻求澄清,不暴露不一致性,不呈现权衡取舍,不在应该的时候提出反对。”

“它们喜欢过度复杂化代码和 API,膨胀抽象层,不清理死代码……用 1000 行代码实现本可以用 100 行完成的功能。”

“它们有时仍会作为副作用更改/删除它们不够理解的注释和代码,即使这些与任务正交。”

核心价值

通过一个简单的 CLAUDE.md 文件,该项目提供四大原则来直接解决上述问题,帮助 AI 助手生成更简洁、更准确的代码。

核心原则

项目包含四个核心原则,每个原则针对特定的 LLM 编程问题:

原则 解决的问题
先思考后编码 错误假设、隐藏困惑、缺失权衡
简单优先 过度复杂化、膨胀的抽象层
精准修改 正交编辑、触碰不该触碰的代码
目标驱动执行 通过测试优先、可验证的成功标准

1. 先思考后编码

不要假设。不要隐藏困惑。呈现权衡取舍。

LLM 往往会默默地选择一种解释然后继续执行。这个原则强制显式推理:

  • 显式陈述假设 — 如果不确定,先问而不是猜测
  • 呈现多种解释 — 当存在歧义时,不要默默地选择
  • 适时提出反对 — 如果存在更简单的方法,说出来
  • 困惑时停止 — 指出不清楚的地方并请求澄清

2. 简单优先

用最少的代码解决问题。不做任何推测性的设计。

对抗过度工程的倾向:

  • 不添加超出需求的功能
  • 不为单次使用的代码创建抽象
  • 不添加未请求的”灵活性”或”可配置性”
  • 不为不可能发生的场景添加错误处理
  • 如果 200 行代码可以写成 50 行,就重写它

检验标准: 高级工程师会说这太复杂了吗?如果是,就简化它。

3. 精准修改

只触碰必须触碰的部分。只清理自己造成的混乱。

编辑现有代码时:

  • 不要”改进”相邻的代码、注释或格式
  • 不要重构没有问题的东西
  • 匹配现有风格,即使你会用不同的方式
  • 如果注意到无关的死代码,提一下 —— 但不要删除它

当你的更改产生孤立代码时:

  • 删除因你的更改而变得未使用的导入/变量/函数
  • 除非被要求,否则不要删除预先存在的死代码

检验标准: 每个更改的行都应该能直接追溯到用户的请求。

4. 目标驱动执行

定义成功标准。循环直到验证通过。

将命令式任务转换为可验证的目标:

与其说… 转换为…
“添加验证” “为无效输入编写测试,然后让测试通过”
“修复 bug” “编写一个能复现它的测试,然后让测试通过”
“重构 X” “确保重构前后测试都通过”

对于多步骤任务,陈述简要计划:

1
2
3
1. [步骤] → 验证: [检查项]
2. [步骤] → 验证: [检查项]
3. [步骤] → 验证: [检查项]

强有力的成功标准让 LLM 能够独立循环。弱标准(”让它工作”)需要不断澄清。

安装使用

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

在 Claude Code 中,首先添加市场:

1
/plugin marketplace add forrestchang/andrej-karpathy-skills

然后安装插件:

1
/plugin install andrej-karpathy-skills@karpathy-skills

这会将指南作为 Claude Code 插件安装,使该技能在所有项目中可用。

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

新项目:

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

现有项目(追加):

1
2
echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md

与 Cursor 配合使用

该项目包含一个已提交的 Cursor 项目规则(.cursor/rules/karpathy-guidelines.mdc),因此当你在 Cursor 中打开项目时,相同的指南也会应用。

使用示例

场景:添加新功能

错误做法:

1
给用户模块添加邮箱验证功能

正确做法:

1
2
3
4
5
给用户模块添加邮箱验证功能
成功标准:
1. 有效邮箱格式通过验证
2. 无效邮箱格式返回明确错误信息
3. 现有用户注册流程不受影响

场景:修复 Bug

错误做法:

1
修复登录页面的报错

正确做法:

1
2
3
4
5
修复登录页面的报错
计划:
1. 编写复现 bug 的测试 → 验证:测试失败
2. 定位并修复问题 → 验证:测试通过
3. 确认无回归 → 验证:所有现有测试通过

效果验证

这些指南正在发挥作用,如果你看到:

  • diff 中不必要的更改更少 — 只有请求的更改出现
  • 因过度复杂化而重写的次数更少 — 代码第一次就很简单
  • 澄清问题在实现之前出现 — 而不是在犯错之后
  • 干净、最小的 PR — 没有”顺手”重构或”改进”

自定义指南

这些指南设计为可与项目特定指令合并。添加到现有的 CLAUDE.md 或创建新的。

对于项目特定规则,添加如下部分:

1
2
3
4
5
## 项目特定指南

- 使用 TypeScript 严格模式
- 所有 API 端点必须有测试
- 遵循 src/utils/errors.ts 中现有的错误处理模式

注意事项

这些指南偏向谨慎而非速度。对于简单任务(简单的拼写修复、明显的单行更改),请运用判断力 —— 不是每个更改都需要完全的严谨。

目标是减少非平凡工作中的代价高昂的错误,而不是拖慢简单任务。

总结

andrej-karpathy-skills 提供了一套简洁而强大的原则,帮助 AI 编程助手生成更高质量的代码。通过强制显式推理、追求简洁、精准修改和目标驱动执行,可以有效避免 LLM 编程中的常见陷阱。

核心要点:

  1. 先思考后编码 — 不确定就问,不要假设
  2. 简单优先 — 用最少的代码解决问题
  3. 精准修改 — 只改需要改的地方
  4. 目标驱动执行 — 定义成功标准,循环验证

将这些原则融入你的 AI 编程工作流,可以显著提升代码质量和开发效率。

参考资源