用 andrej-karpathy-skills 跑通 TDD 的 4 个关键动作,让 AI 改码不返工
【免费下载链接】andrej-karpathy-skillsA single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.项目地址: https://gitcode.com/GitHub_Trending/an/andrej-karpathy-skills
让 AI 修个 bug,它顺手改了引号风格、补了没人要的类型标注、还重构了两个无关函数——这种动辄 400 行 diff 的返工,根源往往在于:你给的是指令,不是验收标准。
andrej-karpathy-skills 针对这个痛点,把 AI 编程常见的毛病(擅自猜假设、过度设计、顺手改无关代码、没有目标感)逐条写成行为规则,可以直接装进项目。其中"目标驱动执行"这条,和测试驱动开发(TDD)的"红 → 绿"循环正好咬合:先告诉 AI 什么算成功,再让它自己循环到测试通过。
翻车现场:为什么"帮我修一下"总换来一堆无关改动
一个典型的返工长这样:你让 AI"修一下排序,重复分数会乱",它直接改了排序键,没写任何复现测试,改完回一句"已修复"。两周后换一组数据,又坏了。
拆开看,这份改动有三个问题:
- 没有复现测试:修没修好全凭感觉,回归无从谈起
- 范围蔓延:bug 只是空值判断的问题,它顺手加了用户名校验
- 假设驱动:它自己"觉得"该顺便统一代码风格,于是改了半个文件
这三类问题不是模型变笨了,而是指令里根本没有"完成"的判断标准。
动手前先问清三件事
写第一行测试之前,先逼 AI(也逼自己)回答三个问题。这是SKILL.md里"思考先行"原则的落地版:
- 列出假设:输入范围、边界值(负数、零、重复项)各是什么?拿不准就问,别猜。
- 列出多种理解:需求有歧义时把解读摆出来让你挑,而不是默默选一个跑完。
- 指出更简单的路:存在成本更低的方案时直接说出来,该反驳就反驳。
这一步多花两分钟,能砍掉后面大部分返工。
把模糊需求翻译成验收标准(TDD 流程第一步)
"目标驱动执行"翻译成大白话:把任务变成可验证的目标,循环直到验证通过。做法是把随口一句话,改写成 AI 能自己判断对错的验收标准:
| 你随口说的话 | AI 该收到的验收标准 |
|---|---|
| "加个校验" | 先为非法输入写测试,再让它们通过 |
| "修这个 bug" | 先写能复现 bug 的测试,再让它通过 |
| "重构 X" | 重构前测试全绿,重构后仍然全绿 |
验收标准写强了,AI 可以独立跑完整个循环;写弱了(比如"让它能跑就行"),你就得全程陪跑澄清。多步任务再补一张两列小计划:每一步后面跟一个"验证动作",做完一步验一步。
只写刚好够用的实现,别碰无关代码
测试开始变红之后,实现阶段要同时压住两个倾向:
- 简洁至上:不写没被要求的功能、不做只有一处用到的抽象、不加没人要的配置项;200 行能写成 50 行的,重写。
- 精准修改:只动和这次请求有关的行。发现相邻的死代码?提一句,但不删。
自检方法只有一句:diff 里的每一行,是否都能对应回你的请求?对不上的行,删掉。
🔁 修正过程:同一个 bug,换个说法再跑一遍
拿开头那个排序 bug 按新流程重跑一遍。
先定验收标准:"为重复分数写一个测试(当前应失败),修复后它稳定通过,且整个测试套件无回归。"
第一步,复现。测试长这样:
def test_sort_with_duplicate_scores(): scores = [{"name": "a", "score": 100}, {"name": "b", "score": 100}, {"name": "c", "score": 90}] result = sort_scores(scores) assert [r["score"] for r in result] == [100, 100, 90] assert result[0]["name"] == "a" # 同分稳定排序跑一遍,红了——bug 被钉死在测试里。第二步,最小修复:排序键从单一分数改成"分数降序、名字升序"的元组,只改一行。第三步,验证:新测试稳定通过,旧测试无一回归。
整份 diff 只有两处:一条测试、一行排序键。翻车现场里的引号风格和"顺手重构",一行都没有出现。
安装只需两步
git clone https://gitcode.com/GitHub_Trending/an/andrej-karpathy-skills把仓库里的CLAUDE.md拷到你项目根目录即可,Claude Code 启动时会自动读取;不想每个项目都拷,也可以按 README 装成 Claude Code 插件,一次安装、跨项目生效。规则全文在skills/karpathy-guidelines/SKILL.md,建议在此基础上追加项目自己的规则,比如"所有接口必须有测试"。
今天就能做的下一步
挑一个你正要交给 AI 的小任务,把那句"帮我改一下"改写成"先写测试复现或覆盖它,再让它通过",然后完整跑一遍 TDD 流程。
怎么判断这套规则起效了,看三个信号:diff 里只剩你要求的改动、因过度复杂而重写的次数变少、澄清问题发生在写代码之前,而不是翻车之后。
【免费下载链接】andrej-karpathy-skillsA single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.项目地址: https://gitcode.com/GitHub_Trending/an/andrej-karpathy-skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考