尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

andrej-karpathy-skills:4 条原则如何把 TDD 嵌进 AI 编码

andrej-karpathy-skills:4 条原则如何把 TDD 嵌进 AI 编码 andrej-karpathy-skills4 条原则如何把 TDD 嵌进 AI 编码【免费下载链接】andrej-karpathy-skillsA single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathys observations on LLM coding pitfalls.项目地址: https://gitcode.com/GitHub_Trending/an/andrej-karpathy-skills你说给这个接口写测试AI 回你 80 行断言、3 层抽象和一个没人要的策略模式。andrej-karpathy-skills 用一份 CLAUDE.md 写入四条行为准则约束 LLM 编码时的假设、改动范围与验证方式让测试驱动开发TDD在 AI 辅助开发实践中真正跑得起来。项目的核心就是一个文件CLAUDE.md。内容来自 Andrej Karpathy 对 LLM 编码陷阱的观察——The models make wrong assumptions on your behalf and just run along with them without checking. 项目把问题拆成四条原则Think Before Coding、Simplicity First、Surgical Changes、Goal-Driven Execution同一份文本也以技能形式放在 skills/karpathy-guidelines/SKILL.md。这份 LLM 编码规范只有几十行价值在于把先想后写、写少一点、别越界、给成功标准变成 AI 每次会话的默认行为。 把 TDD 嵌入 AI 编码的四条原则TDD 要求先写测试、再让它通过但 AI 会在每一步上跑偏假设错了测试就白写测试臃肿了实现跟着跑偏改动越界后回归失败查不清原因。四条原则各自挡一道下面按问题 → 对应原则 → 验证方式过一遍。问题一测试还没写假设已经错了校验邮箱格式这类需求最容易出事AI 默认要处理 Unicode 邮箱、空字符串、地区规则交回一个带配置对象的校验器测试也全写在这些未经确认的假设上。对应原则Think Before Coding — Dont assume. Dont hide confusion. Surface tradeoffs.并给出明确动作State your assumptions explicitly. If uncertain, ask.验证方式跑任何测试之前先要求它列出假设和成功标准。邮箱的范围有歧义空字符串算非法还是算缺失就该先问。测试套件建立在确认过的假设上这是 TDD 的第一道闸。问题二断言写得比实现还臃肿一个校验函数配上 15 条断言、测试夹具基类、两个灵活的 helper代码评审时没人说得清哪些断言对应真实需求。对应原则Simplicity First — Minimum code that solves the problem. Nothing speculative.自检标准很直白Would a senior engineer say this is overcomplicated?验证方式逐条审查用例看它是否对应当前需求要求的一个行为。每个测试只验证一个行为一次性代码不建框架。仓库的 EXAMPLES.md 里每条原则都配有错误示范 → 修正版的真实代码对照值得翻一遍。问题三让它改一行它顺手重排了整个文件修一个断言失败的 bugdiff 里却混进注释改写、引号风格替换、顺手删除的死代码。测试套件忽然挂掉还得花时间分辨哪些失败和本次改动有关。对应原则Surgical Changes — Touch only what you must. Clean up only your own mess.原文给的检验标准是Every changed line should trace directly to the users request.验证方式绿色阶段的 diff 应该只包含让失败测试通过的代码。提交前可以要求它逐行说明这行对应哪个失败测试说不出名字的改动一律拿掉遇到无关死代码让它提一句而不是直接删。问题四修好它不是目标是口号让它能跑无法验证AI 做到七成就停或者反过来一路做到你拦不住。对应原则Goal-Driven Execution — Define success criteria. Loop until verified.原文的判断是Strong success criteria let you loop independently. Weak criteria (make it work) require constant clarification. 这条原则正好接住 TDD 的红绿循环指令式说法可以批量转成可验证目标——Add validation → Write tests for invalid inputs, then make them passFix the bug → Write a test that reproduces it, then make it passRefactor X → Ensure tests pass before and after多步骤任务则要求它按1. [Step] → verify: [check]的格式给出计划每一步自带验证点红绿循环才能独立跑下去不用你盯着澄清。 同一任务前后对比给 API 调用加带超时的重试任务固定第三方接口偶尔超时要求重试 3 次单次请求 2 秒超时失败要能看出来。没有这份 TDD 工作流约束时典型产出是 60 行以上指数退避策略类、可配置的重试参数 dataclass、日志钩子参数甚至同一个逻辑的装饰器版和函数版各一份测试还额外覆盖了可配置最大等待这类没人要的行为。评审 20 分钟一半内容需要逐条追问。有了 CLAUDE.md 约束后流程变成先陈述假设只对 TimeoutError / ConnectionError 重试3 次失败后抛出还是静默有歧义先问然后写测试模拟超时、超时、成功的调用序列断言第 3 次调用返回成功最后才是最小实现。import time def fetch_with_retry(url, timeout2.0, attempts3): last None for attempt in range(attempts): try: return http.get(url, timeouttimeout) except (TimeoutError, ConnectionError) as e: last e if attempt attempts - 1: time.sleep(0.5 * (attempt 1)) raise lastdef test_retries_until_success(monkeypatch): calls iter([TimeoutError(), TimeoutError(), ok_response]) monkeypatch.setattr(http, get, lambda url, timeout: next(calls)) assert fetch_with_retry(http://api/users) is ok_response实现 10 行diff 不碰其他文件测试两条一条复现超时重试一条验证重试耗尽后抛出。同一个任务从评审后大改变成一次通过。安装 andrej-karpathy-skills 的两种方式插件方式Claude Code 用户一次安装全项目生效/plugin marketplace add forrestchang/andrej-karpathy-skills /plugin install andrej-karpathy-skillskarpathy-skills按项目放置方式克隆仓库后把CLAUDE.md复制到项目根目录已有项目直接追加到现有 CLAUDE.md 末尾即可。git clone https://gitcode.com/GitHub_Trending/an/andrej-karpathy-skills这份文件的设计就是与项目指令合并在它下面补上自己的规则比如所有 API 端点必须有测试。使用其他工具时同理把同一份内容放进工具读取的根指令文件即可Cursor 的具体做法见 CURSOR.md。另注意它的取向是 caution over speed改错别字这类琐碎任务不用走全套流程准则针对的是非平凡工作里的返工成本。把 CLAUDE.md 放进项目根目录下次让 AI 写测试前先让它把假设列出来。【免费下载链接】andrej-karpathy-skillsA single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathys observations on LLM coding pitfalls.项目地址: https://gitcode.com/GitHub_Trending/an/andrej-karpathy-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表