Andrej Karpathy Skills:AI 智能体编程四项原则 介绍及扩展

Andrej Karpathy Skills:AI 智能体编程四项原则 介绍及扩展

一个 GitHub 上 74.9k Stars 的项目,一份改善 AI 编码行为的准则。


一、项目介绍

1.1 起源

Andrej Karpathy,前特斯拉 AI 总监、李飞飞学生、OpenAI 创始成员,现任 AI 教育者。他最早提出了 LLM 作为"认知操作系统"的理念,并指出当前 AI 在编程任务中的系统性缺陷。

2025 年,他的推文引发广泛讨论,核心观点被社区总结为三个"模型原罪":

"模型会代你做错误假设,然后不假思索地执行。它们不管理自身的困惑,不寻求澄清,不呈现矛盾,不展示权衡,在应该提出异议时也不反驳。"
"它们真的很喜欢把代码和 API 搞复杂,堆砌抽象概念,不清理死代码......明明 100 行能搞定的事情,非要实现成 1000 行的臃肿架构。"
"它们有时仍会改动或删除自己理解不足的代码和注释,即使这些内容与任务本身无关。"

forrestchang/andrej-karpathy-skills 项目的核心就是一份单一的 CLAUDE.md 文件(74.9k Stars,6.9k Forks),将这些观察系统化为四条可执行的原则,供 AI 编程工具(Claude Code、Cursor 等)直接使用。

1.2 四项原则总览

# 英文名 中文名 核心要求
1 Think Before Coding 编码前思考 不假设、不隐藏困惑、主动呈现权衡
2 Simplicity First 简洁优先 最少代码解决问题,不做过度推测
3 Surgical Changes 精准修改 只碰必须碰的,只清理自己造成的混乱
4 Goal-Driven Execution 目标驱动执行 定义成功标准,循环验证直到达成

二、四项原则详解

原则 1:Think Before Coding(编码前思考)

原文:

Don't assume. Don't hide confusion. Surface tradeoffs.

中文翻译:

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

核心思想:

AI 在面对模糊需求时,最常见的错误是默默选择一个解释然后闷头执行,不汇报自己哪里不确定。这个原则强制 AI 在编码前输出"推理过程",明确说出:

  • 我的假设是什么
  • 有哪些歧义点
  • 有哪些备选方案
  • 我为什么选了这个方案

子要求:

要求 含义
State assumptions explicitly(明确说明假设) 如果不确定,询问而不是猜测
Present multiple interpretations(呈现多种解释) 当存在歧义时,不要默默选择
Push back when warranted(适时提出异议) 如果存在更简单的方法,说出来
Stop when confused(困惑时停下来) 指出不清楚的地方并要求澄清

举例说明:

假设用户说:"帮我把用户模块加上缓存。"

违背原则的行为:AI 直接选型 Redis,设计一套复杂的缓存失效策略,代码写了 300 行。

符合原则的行为:

复制代码
用户需求中未明确:
1. 缓存层位置(本地 vs 分布式?)
2. 缓存失效策略(TTL?主动 invalidate?)
3. 是否需要分布式锁?

我建议先确认:
- Q1: 现有系统是否有 Redis/ Memcached?还是新增?
- Q2: 缓存的数据一致性要求级别?
- Q3: 并发更新同一个 Key 的场景是否存在?

在我得到明确答案之前,先实现一个基于内存的 TTL 缓存作为基础版本。

原则 2:Simplicity First(简洁优先)

原文:

Minimum code that solves the problem. Nothing speculative.

中文翻译:

用最少的代码解决问题。不要过度推测。

核心思想:

这是对抗过度工程的原则。AI 有强烈的"取悦用户"冲动,容易进入"万一以后要用呢"的思维陷阱,产生大量未 Requested 的灵活性、可配置性和抽象层。

原则 2 的核心是:只实现明确要求的东西

子要求:

要求 含义
No features beyond what was asked 不要添加要求之外的功能
No abstractions for single-use code 不要为一次性代码创建抽象
No "flexibility" that wasn't requested 不要添加未要求的"灵活性"或"可配置性"
No error handling for impossible scenarios 不要为不可能发生的场景做错误处理
Rewrite if 200 lines → 50 lines 如果 200 行代码可以写成 50 行,重写它

检验标准(The Test):

Would a senior engineer consider this overly complex? If yes, simplify.
资深工程师会觉得这过于复杂吗?如果是,简化。

举例说明:

用户需求:读取 CSV 文件并输出前 10 行。

违背原则的 AI 输出:

  • 设计一个 DataReader 抽象基类
  • 实现 CSVReaderJSONReaderXMLReader
  • 加上策略模式和工厂模式
  • 500 行代码,引入 3 个新依赖

符合原则的 AI 输出:

python 复制代码
with open("data.csv", "r") as f:
    for i, line in enumerate(f):
        if i >= 10:
            break
        print(line.strip())

29 字节(或者如果用户接受 Python 的话)。


原则 3:Surgical Changes(精准修改)

原文:

Touch only what you must. Clean up only your own mess.

中文翻译:

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

核心思想:

这条原则解决的是 AI 的**范围蔓延(Scope Creep)**问题------修改 A 模块时顺手改了 B 模块的风格,重构了 C 模块的死代码,删了 D 模块的注释。

编辑现有代码时的规则:

要求 含义
Don't "improve" adjacent code 不要"改进"相邻的代码、注释或格式
Don't refactor things that aren't broken 不要重构没坏的东西
Match existing style 匹配现有风格,即使你更倾向于不同的写法
Mention unrelated dead code, don't delete 如果注意到无关的死代码,提一下------不要删除它

当你的改动产生孤儿代码时:

要求 含义
Remove unused imports/variables/functions 删除因你的改动而变得无用的导入/变量/函数
Don't remove pre-existing dead code 不要删除本就存在的死代码,除非被要求

举例说明:

用户要求:修复登录接口的 SQL 注入漏洞。

违背原则的 AI:

  • 顺便把整个 auth.py 重构成了 async/await 风格
  • 改了 user.py 的命名风格(下划线→驼峰)
  • 删掉了几个"看起来没用"的函数(后来发现是其他模块在用)

符合原则的 AI:

  • 只修改登录验证相关的 SQL 语句参数化
  • 提到"发现 auth.py 第 142 行有个未使用的函数 legacy_hash"
  • 提到"其他模块有对 user.py 的依赖,本次未改动"

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

原文:

Define success criteria. Loop until verified.

中文翻译:

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

核心思想:

这条原则的核心是把指令性任务转化为可验证的目标。不是告诉 AI"怎么做",而是告诉 AI"做到什么算成功",让 AI 自己循环执行直到满足标准。

Karpathy 的原话:

"LLMs are exceptionally good at looping until they meet specific goals... Don't tell it what to do, give it success criteria and watch it go."

执行模式:

复制代码
1. [Step 1] → verify: [success criteria check]
2. [Step 2] → verify: [success criteria check]
3. [Step 3] → verify: [success criteria check]

不是线性执行,而是每一步都带验证的循环。

举例说明:

用户需求(指令式):"帮我把用户数据导出成 CSV,包含用户名、邮箱、注册时间。"

Goal-Driven 版本:

复制代码
Goal: 用户可通过 /export 端点下载包含 username, email, created_at 的 CSV 文件

[Step 1] 创建 /export 路由 → verify: curl 返回 200 且包含 CSV header
[Step 2] 添加字段 username → verify: CSV 第一列存在且数据正确
[Step 3] 添加字段 email → verify: CSV 第二列存在且格式正确
[Step 4] 添加字段 created_at → verify: CSV 第三列存在且为时间戳格式
[Step 5] 端到端测试 → verify: 完整 CSV 可下载且字段完整

Done --- Only requested changes appear.

三、思想提炼

3.1 每项原则的核心机制

原则 解决的问题 核心机制
Think Before Coding 模糊时闷头执行 强制显式推理:不确定就问,不要猜
Simplicity First 过度工程 需求边界控制:只做要求的,不做猜测的
Surgical Changes 范围蔓延 最小改动集:只碰必要的,不动无关的
Goal-Driven Execution 指令式陷阱 目标可验证化:给标准而非给步骤

3.2 四项原则的内在联系

复制代码
Think Before Coding        →  定义"做什么"(以及"什么不做")
         ↓
Simplicity First          →  定义"怎么做"(最小实现)
         ↓
Surgical Changes         →  定义"改什么"(最小改动)
         ↓
Goal-Driven Execution    →  定义"做到什么标准"(可验证)

四项原则构成一个完整的 AI 行为约束链:推理 → 设计 → 编辑 → 验证,每个环节都有明确的红线。


四、从编程领域到通用智能体领域的扩展

4.1 扩展思路

四项原则的底层逻辑并不依赖"代码"这个载体。它们本质上是:

  • 认知对齐约束:让 AI 的推理过程对人类可见
  • 资源边界约束:防止 AI 消耗远超必要算力
  • 变更边界约束:防止 AI 对环境造成非预期的改变
  • 目标澄清约束:把模糊指令转化为可测量标准

这些约束在通用智能体场景下同样适用,甚至更加重要------因为通用任务的边界比编程任务更模糊,环境比代码仓库更复杂。

4.2 扩展对照表

编程场景 通用智能体场景
写代码 执行多步骤任务(发邮件、查数据、订票等)
修改代码 操作外部系统(日历、文件、API)
验证语法/测试 验证任务完成状态
代码仓库 真实世界环境

4.3 扩展后的通用智能体原则

原则 1 扩展:Ask Before Assume

编程版: 不确定需求时提问,不要猜测。
通用版: 不确定用户意图或环境状态时,停下来问清楚再行动。

典型场景:

  • 用户说"帮我约个会议室",AI 不应该直接去查日历时瞎选时间
  • 扩展版:先确认"什么时间?几人?需要设备吗?哪个办公室?"
原则 2 扩展:Do Minimum Viable Task

编程版: 最少代码解决问题。
通用版: 用最少步骤完成任务,不做额外动作。

典型场景:

  • 用户要求"把这份报告发给老板",AI 不应该自动压缩、转发、云备份
  • 扩展版:只执行发邮件这一件事,把发件人/主题/正文确认好就够了
原则 3 扩展:Touch Only What Must Be Touched

编程版: 只改必要的代码。
通用版: 只操作必须操作的系统/文件,不碰无关的东西。

典型场景:

  • 用户要求"整理桌面文件夹",AI 不应该顺手改桌面壁纸或系统设置
  • 扩展版:只操作指定的文件夹,其他一律不碰
原则 4 扩展:Define Verify Loop

编程版: 每步编码后验证。
通用版: 每个操作步骤后确认结果,再决定下一步。

典型场景:

  • 用户要求"帮我买下周去上海的机票",AI 应该:
    1. 查询航班 → 验证返回结果
    2. 筛选结果 → 验证符合时间/价格要求
    3. 打开订票页 → 验证页面可访问
    4. 确认下单 → 验证订单状态

五、通用智能体示例文本

5.1 场景一:日程管理助手

复制代码
任务:帮用户安排下周一的团队周会

[Think Before Acting]
用户未明确:
1. 会议时间(上午/下午?)
2. 参会人员范围
3. 会议时长
4. 是否需要预订会议室

在确认以上信息前,我建议:
- 时间建议:周二上午 10:00(周一上午已有 Q4 复盘会)
- 时长建议:1 小时
- 如有需要,我可以先查会议室空余情况

请确认以上信息,我再执行预约操作。

5.2 场景二:邮件撰写助手

复制代码
任务:回复客户投诉邮件

[Think Before Acting]
需要确认:
1. 投诉内容是否已解决?(未解决→道歉+说明,解决→确认+感谢)
2. 语气倾向:正式/友好/中性?
3. 是否需要抄送其他人?

[Do Minimum]
仅撰写正文,不自动:
- 更改邮件主题
- 添加附件(除非用户提供)
- 预设后续跟进任务

[Goal-Driven]
邮件发送成功后,以下指标应满足:
✓ 主题清晰(包含"回复:[原主题]")
✓ 正文回应了投诉要点
✓ 落款信息完整

5.3 场景三:数据研究报告生成

复制代码
任务:生成竞品分析报告

[Think Before Acting]
报告范围未明确:
1. 需要分析哪些竞品?
2. 数据来源偏好(官方财报/第三方数据/用户评价)?
3. 报告深度(1页摘要/10页详评)?
4. 截止日期?

[Do Minimum Viable]
- 只收集与竞品直接相关的数据
- 不延伸至行业整体趋势(除非明确要求)
- 不自动生成美化图表(数据本身足够)

[Surgical Changes]
- 只读取公开数据和用户提供材料
- 不修改任何本地文件
- 不在未授权系统创建草稿

[Goal-Driven Execution]
1. [收集竞品A数据] → verify: 数据量 ≥ 5个维度
2. [收集竞品B数据] → verify: 数据量 ≥ 5个维度
3. [对比分析] → verify: 包含价格/功能/市场份额对比表
4. [生成摘要] → verify: 100-200字,涵盖核心结论
5. [格式检查] → verify: 无格式错乱,表格可读

完成标志:报告包含所有主要竞品,数据来源可溯源,结论有数据支撑。

六、总结

Andrej Karpathy Skills 的四条原则,本质上是一套AI 行为规范集,针对的是 AI 在自主任务执行时的四大惯性缺陷:

  1. 闷头执行 → 必须先问清楚
  2. 过度工程 → 只做要求的最小集
  3. 顺手乱改 → 严格限制改动范围
  4. 一步到位 → 改为循环验证模式

这套原则从代码场景迁移到通用智能体,核心思路不变:约束 AI 的自主性,强制它对齐人类意图。区别只在于"代码"变成了"任务","编译器"变成了"真实世界环境"。

在 AI 能力越来越强、 autonomy 越来越高的今天,这类约束原则的重要性只会增加,不会减少。

相关推荐
leafyyuki2 小时前
从零到一落地「智能助手」:一次基于 OpenSpec 的流式对话前端实践
前端·vue.js·人工智能
VBsemi-专注于MOSFET研发定制2 小时前
面向AI管道检测机器人的功率MOSFET选型分析——以高集成度、高可靠电源与驱动系统为例
人工智能·单片机·机器人
步步为营DotNet2 小时前
LM-Kit.NET:.NET 生态一站式本地 AI 开发平台
人工智能·.net
市象2 小时前
MiniMax不需要讨好开源
人工智能
John_ToDebug2 小时前
从“会调用”到“稳得住”:Agent工具使用与MCP安全交互深度剖析
人工智能·ai agent
老王谈企服2 小时前
2026金融数字化转型:金融数据不能出内网,Agent必须私有化部署,有什么信创适配的产品?
人工智能·ai·金融
skywalk81632 小时前
‌Mew.Design‌ 的AI设计平台 介绍
人工智能
byte轻骑兵2 小时前
【HID】规范精讲[3]: 蓝牙HID协议消息详解——无线交互的数据传输语言
人工智能·人机交互·蓝牙·键盘·hid
nebula-AI2 小时前
llm wiki的固定提示词
人工智能·ai·个人开发·ai编程