andrej-karpathy-skills:让 AI 编程更靠谱 Karpathy 四大原则深度解析

andrej-karpathy-skills:让 AI 编程更靠谱 Karpathy 四大原则深度解析svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



 
  
    
     
      
     
  
    
    

核心价值:Andrej Karpathy 总结了 LLM 编程的常见陷阱,提出了四条简单但有效的行为准则。这套指南以单个 CLAUDE.md 文件形式存在,可以直接用于改善 Claude Code 的编程行为。

关键判断

  • 核心理念:先思考后编码、简洁优先、精准修改、目标驱动
  • 设计哲学:这不是要束缚 AI,而是让 AI 的编程行为更透明、可控
  • 实操性:每条原则都有可执行的检查清单和检验标准

一句话总结:用四条简单的原则,减少 AI 编程 80% 的常见错误。


1.1 Karpathy 的观察

2024 年,Andrej Karpathy 在 Twitter 上发表了一系列关于 LLM 编程缺陷的观察,字字珠玑:

“模型会替你做出错误的假设,然后不加确认地继续执行。它们不会管理自己的困惑,不会寻求澄清,不会指出不一致的地方,不会呈现权衡取舍,不会在应该时提出反对意见。”

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

“它们有时会删除或修改它们不理解的代码和注释,即使这些代码与任务无关。”

个人感觉,这些观察非常精准。在实际使用 Claude Code、Cursor 等工具时,这些问题确实经常出现。

1.2 这些问题的本质

在我看来,这些问题的根源在于 LLM 的几个特性:

1. 过度自信
LLM 天生倾向于给出“确定”的答案,即使它并不确定。这种自信让它不会主动说“我不确定,需要澄清”。

2. 缺乏元认知
模型不会管理自己的困惑状态。人类程序员在困惑时会停下来思考、询问,但 LLM 会直接跳过这个环节。

3. 表演欲过强
LLM 倾向于展示“聪明”,倾向于构建复杂的抽象和架构,即使简单的方案就足够了。

1.3 实际影响

这些问题带来的实际后果:

  • 代码审查成本增加:需要花更多时间检查 AI 生成的代码
  • 技术债务积累:过度设计和不必要的抽象会长期存在
  • 开发者信任度下降:逐渐不敢完全依赖 AI 生成的代码

基于这些观察,Karpathy 提出了四条核心原则。下面我来逐一解读。

在这里插入图片描述


2.1 原则一:Think Before Coding(先思考后编码)

核心要义

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

反面案例

让我模拟一个真实的场景:

用户:帮我添加用户验证

❌ 错误做法(直接编码): AI 默默假设需要邮箱 + 密码验证 直接实现完整的 OAuth 流程 添加了未请求的“记住我”功能 还顺便加了密码强度检测

结果:用户只需要简单的手机号验证

✅ 正确做法(先思考): AI:在开始之前,我需要确认几个问题:

  1. 验证方式:需要哪种验证?
    • 邮箱 + 密码
    • 手机号 + 验证码
    • 第三方登录(Google/GitHub)
  2. 安全级别:
    • 简单应用:基础验证即可
    • 金融/医疗:需要双因素认证
  3. 额外功能:
    • 是否需要“记住我”?
    • 是否需要密码找回?

我的建议:如果是 MVP,建议先用手机号 + 验证码,最简单。

实践检查清单

根据我的理解,每次 AI 编程前都应该问自己(或要求 AI):

    实战中的价值

    在实战中,这个原则可以避免 80% 的返工。很多时候,AI 直接开写,结果写了一半发现理解错了,或者写完了发现不是用户想要的。

    关键转变:从“默默假设→直接执行”变成“明确假设→确认→执行”。

    在这里插入图片描述


    2.2 原则二:Simplicity First(简洁优先)

    核心要义

    用最少的代码解决问题,不添加任何投机性内容

    反面案例

    来看一个对比示例:

    # ❌ 错误:过度设计(200 行) class UserValidator:

    def __init__(self, config=None): self.config = config or self._load_default_config() self.strategies = self._init_strategies() self.cache = self._init_cache() self.observers = [] def _load_default_config(self): # 加载默认配置 # ... 50 行代码 def _init_strategies(self): # 初始化策略模式 # ... 80 行代码 def validate(self, email, password): # 复杂的验证流程 # ... 70 行代码 

    # ✅ 正确:简洁实现(50 行) def validate_user(email, password):

    """简单的用户验证""" if not email or '@' not in email: return False if len(password) < 8: return False return True 

    为什么会过度设计?

    个人感觉,AI 过度设计的原因有几个:

    1. 训练数据偏差:高质量的开源代码往往有更完善的抽象,AI 学到了这些模式
    2. 展示欲:AI 倾向于展示“我知道设计模式”
    3. 防御性编程:为了“将来可能用到”而添加扩展点
    实践检查清单

    每次 AI 生成代码后,用这些问题检查:

      检验标准

      指南里提供了一个很好的检验标准:

      问自己:如果删除这段代码的 50%,功能还能正常工作吗?

      如果答案是“能”,那就删掉那 50%。

      在这里插入图片描述


      2.3 原则三:Surgical Changes(精准修改)

      核心要义

      只修改必须修改的部分,只清理自己造成的混乱

      这个原则我个人非常喜欢,因为它解决了一个很常见但容易被忽视的问题。

      反面案例
      用户:修复这个计算 bug

      ❌ 错误做法:

      • 修复了 bug ✓
      • “顺便”重构了相邻的函数 ✗
      • 修改了注释风格 ✗
      • 删除了“看起来没用”的变量 ✗

      结果:Diff 很大,引入了新的 bug,用户很困惑

      ✅ 正确做法:

      • 只修复 bug 相关的代码 ✓
      • 保持相邻代码不变 ✓
      • 匹配现有风格 ✓
      • 如果看到死代码,提及但不删除 ✓

      结果:Diff 很小,只改必要的,用户放心

      为什么这个原则重要?

      在我的理解中,这个原则的核心价值是尊重用户的代码所有权

      AI 经常会“好心”地改进代码,但:

      • 用户可能故意那样写
      • 用户可能有历史原因
      • 用户可能不认同你的“改进”
      实践检查清单
        检验标准

        Diff 检验标准:每一行修改的代码,都能说出“这是为了 XXX 要求”。

        如果某行修改说不清楚为什么改,那就不要改。

        在这里插入图片描述


        2.4 原则四:Goal-Driven Execution(目标驱动执行)

        核心要义

        定义成功标准,循环直到验证

        这个原则可能是四个中最实用的一个。

        反面案例
        用户:添加输入验证

        ❌ 错误做法:

        • 默默实现验证逻辑
        • 没有测试
        • 成功标准模糊:“让它工作”

        结果:不知道是否真的工作了,用户需要手动测试

        ✅ 正确做法:

        • 转换为可验证目标:
          1. 编写测试:无效邮箱 → 返回错误
          2. 编写测试:空密码 → 返回错误
          3. 编写测试:有效输入 → 通过验证
          4. 实现代码让测试通过
          5. 运行测试确认全部通过

        结果:有测试证明功能正确,用户放心

        核心洞察

        指南里有一句话非常精辟:

        “强大的成功标准让 LLM 能够独立循环。弱的标准(‘让它工作’)需要持续的澄清。”

        我的理解是:定义清楚“完成”是什么样子,AI 才能独立完成

        实践检查清单
          多步骤任务格式

          对于复杂任务,指南推荐使用这种格式:

          1. [编写测试:空输入应该失败] → 验证:测试运行失败

          1. [实现验证逻辑] → 验证:测试通过
          2. [添加边界条件测试] → 验证:所有测试通过

            这种格式的好处是:

            • 每一步都有明确的目标
            • 每一步都有验证标准
            • 可以独立执行和检查

            在这里插入图片描述


          3.1 如何在日常开发中使用

          场景 1:新功能开发

          基于我的理解,推荐这个流程:

          1. 先思考(原则 1)

          • 明确需求和边界
          • 呈现技术方案和权衡
          • 确认后再开始
          1. 简洁优先(原则 2)
            • 从最简单的实现开始
            • 不添加“将来可能用到”的功能
            • 如果复杂了,重写
          2. 精准修改(原则 3)
            • 只写必要的代码
            • 不影响现有代码
            • 匹配现有风格
          3. 目标驱动(原则 4)
            • 用测试验证功能
            • 定义“完成”的标准
            • 循环直到通过
              场景 2:Bug 修复
              1. 先思考
            • 重现 bug
            • 理解根因
            • 确认修复方案
          4. 简洁优先
            • 最小修复方案
            • 不“顺便”重构
          5. 精准修改
            • 只改 bug 相关代码
            • 不影响其他功能
          6. 目标驱动
            • 编写重现测试
            • 确保修复
            • 回归测试 用四大原则作为审查清单:
              场景 3:代码审查
              Review Checklist:
          • [ ] 是否先思考了假设和权衡?
          • [ ] 代码是否足够简洁?
          • [ ] 修改是否精准?
          • [ ] 是否有明确的验证标准?

            3.2 与现有工作流整合

            整合到 Code Review

            在 PR 模板中添加四大原则检查项:

             AI 编程检查清单

          • [ ] Think Before Coding: 是否明确了假设和权衡?
          • [ ] Simplicity First: 代码是否足够简洁?
          • [ ] Surgical Changes: 修改是否精准?
          • [ ] Goal-Driven: 是否有验证测试?
            整合到 CI/CD
            • 自动化测试覆盖(原则 4):所有 AI 生成的代码必须有测试
            • 代码复杂度检查(原则 2):使用工具检查圈复杂度
            • Diff 大小限制(原则 3):单次修改不超过 N 行

            3.3 常见误区与规避

            误区 1:过度谨慎

            问题:每个小任务都要写长篇分析

            用户:把这个变量改名

          AI:(开始长篇分析)

          • 假设你要改这个变量…
          • 有多种改名方案…
          • 权衡如下…

          用户:我只是改个名啊!

          规避:指南里说了,“这些指南偏向谨慎而非速度。对于琐碎的任务,需要运用判断力。”

          我的建议:对于简单任务,简化流程,直接做。

          误区 2:教条主义

          问题:死守原则,不考虑实际情况

          用户:快速修复这个 typo

          AI:根据原则 1,我需要先确认…

           根据原则 2,我应该考虑最简方案... 根据原则 4,我需要编写测试... 

          用户:我只是为了修个拼写错误啊!

          规避:原则是指导,不是铁律。根据实际情况调整。

          误区 3:忽视速度

          问题:过度追求完美,拖延交付

          规避:在谨慎和速度之间找到平衡。MVP 阶段可以牺牲一些完美度,快速迭代。


          4.1 设计上的精妙

          个人感觉,这套指南有几个很聪明的地方:

          1. 极简设计

          • 单个文件,易于分发和维护
          • 可以直接合并到项目中
          • 没有复杂的配置

          2. 问题驱动

          • 直接针对 Karpathy 观察到的具体问题
          • 每条原则都有明确的针对性
          • 不是空洞的“**实践”

          3. 可操作性强

          • 每条原则都有具体的行为指导
          • 有检查清单
          • 有检验标准

          4. 可验证

          • 提供了明确的检验标准
          • 可以量化评估
          • 不是模糊的建议

          4.2 与其他实践的区别

          vs 传统**实践

          维度 传统**实践 Karpathy 指南 目标 人类程序员 LLM 编程助手 重点 代码质量 行为透明度 形式 文档/规范 可执行指令 验证 Code Review 自动化检查
          vs Code Review 标准

          维度 Code Review Karpathy 指南 时机 事后检查 事前预防 重点 代码质量 编程行为 执行 人工审查 AI 自律

          我的理解是:这套指南不是要替代 Code Review,而是让 Code Review 更容易


          个人感觉,这套指南的本质是让 AI 更透明

          它不是要束缚 AI,而是让 AI 的行为更可预测、更可控。最终目标是人机协作更高效

          在实践中,我发现遵循这些原则的 AI 编程:

          • 返工更少
          • 代码更干净
          • 信任度更高

          或许,这就是 AI 编程的**实践。


          1. Andrej Karpathy 原始推文:https://x.com/karpathy/status/
          2. Karpathy-Inspired Claude Code Guidelines: https://github.com/multica-ai/karpathy-code-guidelines
          3. CLAUDE.md: andrej-karpathy-skills-main/CLAUDE.md
          4. SKILL.md: andrej-karpathy-skills-main/skills/karpathy-guidelines/SKILL.md
          5. README.md: andrej-karpathy-skills-main/README.md

          小讯
          上一篇 2026-04-20 16:21
          下一篇 2026-04-20 16:19

          相关推荐

          版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
          如需转载请保留出处:https://51itzy.com/kjqy/270611.html