为什么你的AI助手总是写出糟糕的代码?Karpathy四原则教你成为LLM编程高手

📅 2026/7/5 16:03:35
为什么你的AI助手总是写出糟糕的代码?Karpathy四原则教你成为LLM编程高手
为什么你的AI助手总是写出糟糕的代码Karpathy四原则教你成为LLM编程高手【免费下载链接】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助手编写代码结果它要么过度复杂化要么做出错误的假设或者在不该修改的地方乱改代码这正是Andrej Karpathy技能认证项目要解决的核心问题。这个开源项目基于AI领域专家Andrej Karpathy的观察提供了一套完整的Claude代码行为改进指南帮助你驯服AI助手让它成为你真正的编程伙伴。问题的根源AI编程的四大陷阱在深入解决方案之前让我们先看看AI助手在编码时常犯的典型错误。这些错误不仅浪费时间还会引入不必要的复杂性隐藏的假设陷阱AI经常默默做出假设而不验证。比如当你要求添加用户数据导出功能时它可能直接假设你需要导出所有用户数据而忽略了隐私和性能问题。过度工程化倾向AI喜欢为简单问题创建复杂的架构。一个简单的折扣计算功能可能被包装成抽象工厂模式、策略模式和配置管理器的组合体而实际上只需要一个简单的函数。盲目修改的恶习在不理解代码上下文的情况下AI可能会修改无关的注释、格式化风格甚至删除看似无用但实际重要的代码。模糊的执行目标当你说改进代码时AI不知道具体要改进什么结果往往是一堆无意义的更改。Karpathy四原则AI编程的黄金法则原则一编码前思考不要隐藏困惑想象一下你请一位资深工程师帮忙他应该先问清楚需求而不是直接开始编码。AI助手也应该这样工作。在CLAUDE.md文件中这个原则被定义为Think Before Coding。核心要求是当AI不确定时必须明确列出所有可能的解释而不是默默选择一个。比如当用户说让搜索更快时AI应该问你是指响应时间更快、并发处理能力更强还是用户体验上的感知速度更快原则二简单优先不要过度推测这是对抗AI过度工程化的关键武器。在skills/karpathy-guidelines/SKILL.md中这个原则强调用最少的代码解决问题不要推测性添加功能。一个典型的例子是折扣计算功能。过度工程化的版本可能包含抽象类、策略模式、配置管理器等30多行代码而简单版本只需要3行def calculate_discount(amount: float, percent: float) - float: 计算折扣金额百分比应为0-100 return amount * (percent / 100)黄金法则如果一位资深工程师会说这太复杂了那就简化它。原则三精准修改只清理自己的问题这个原则在EXAMPLES.md中有详细说明。AI在修改代码时应该像外科医生一样精准只处理与任务直接相关的部分。关键规则包括不要改进相邻的代码、注释或格式不要重构没有问题的东西匹配现有的代码风格即使你会有不同的做法如果发现无关的死代码只提及而不删除测试标准很简单每一行修改都应该能追溯到用户的请求。原则四目标驱动执行定义可验证的成功标准这是Karpathy最深刻的洞察之一LLM非常擅长循环直到达到特定目标……不要告诉它该做什么给它成功标准然后看着它工作。在CLAUDE.md中这个原则要求将模糊的指令转化为可验证的目标添加验证 → 为无效输入编写测试然后让它们通过修复bug → 编写重现bug的测试然后修复它重构X → 确保重构前后测试都通过实践案例从问题代码到优雅解决方案让我们看看一个真实的对比案例。假设你需要一个保存用户偏好的功能过度工程化的版本AI常犯的错误class PreferenceManager: def __init__(self, db, cacheNone, validatorNone): self.db db self.cache cache or InMemoryCache() self.validator validator or DefaultValidator() def save(self, user_id: int, prefs: dict, merge: bool True, validate: bool True, notify: bool False) - bool: # 50多行复杂的逻辑简单优先的版本遵循Karpathy原则def save_preferences(user_id: int, preferences: dict) - None: 保存用户偏好到数据库 db.execute( UPDATE users SET preferences ? WHERE id ?, (json.dumps(preferences), user_id) )简单版本的优势很明显更容易理解、实现更快、更容易测试而且当真正需要复杂性时可以进行重构。如何实施Karpathy技能认证方法一Claude Code插件推荐在你的Claude Code中首先添加市场/plugin marketplace add forrestchang/andrej-karpathy-skills然后安装插件/plugin install andrej-karpathy-skillskarpathy-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方法三与Cursor集成项目还包含一个Cursor项目规则文件你可以在.cursor/rules/karpathy-guidelines.mdc中找到它。详细设置说明在CURSOR.md文件中。四原则对比表快速掌握核心要点原则名称核心思想常见错误正确做法编码前思考不要假设不要隐藏困惑展示权衡默默选择一种解释并继续执行明确列出所有假设询问澄清展示多种方案简单优先用最少的代码解决问题不要推测为单一用途添加抽象层添加未请求的功能只实现请求的功能需要时再重构精准修改只修改必要内容只清理自己的问题重构相邻代码改变格式风格删除无关代码只修改与任务直接相关的行匹配现有风格目标驱动执行定义成功标准循环直到验证通过我会改进代码的模糊方法编写测试重现bug → 修复 → 验证无回归如何知道它正在生效当你应用这些指南时你会看到明显的改进✅更少的diff中不必要更改- 只有请求的更改出现✅更少因过度复杂化而重写- 代码第一次就简单✅澄清问题在实现前提出- 而不是在错误后✅干净、最小的PR- 没有附带的重构或改进关键洞察时间比复杂性更重要过度复杂的例子并不明显错误 - 它们遵循设计模式和最佳实践。问题在于时机它们在需要之前添加复杂性这会导致使代码更难理解引入更多bug需要更长时间实现更难测试好的代码是简单解决今天的问题而不是过早解决明天的问题。Karpathy指南偏向谨慎而非速度。对于简单任务简单的拼写错误修复、明显的一行代码更改请使用判断力 - 并非每个更改都需要完整的严谨性。目标是减少非平凡工作中的代价高昂的错误而不是减慢简单任务的速度。开始你的LLM编程专家之旅通过掌握Andrej Karpathy技能认证的四大原则你将能够编写更可靠的AI生成代码- 减少错误和过度工程化提高开发效率- 避免不必要的重写和澄清循环创建更干净的代码库- 只进行必要的更改建立可验证的工作流程- 明确定义成功标准今天就在你的项目中实施这些原则体验更高效、更可靠的AI辅助编程无论你是AI编程新手还是资深开发者这些技能都将帮助你在LLM编码领域脱颖而出。【免费下载链接】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),仅供参考