Claude Code 默认很笨?一个 CLAUDE.md 文件 + 四大原则彻底改变行为
AI 教程教程入门10 分钟阅读
学习路径:AI 编程入门 / Claude Code 配置优化

Claude Code 默认很笨?一个 CLAUDE.md 文件 + 四大原则彻底改变行为

Andrej Karpathy说AI编程工具有三个致命问题:盲目假设、过度复杂、乱改代码。一个叫Forrest Chang的开发者用四个原则解决了所有问题,一周内4.5万人安装。

Karpathy 发现了 AI 编程工具的三个致命问题

Andrej Karpathy,OpenAI 联合创始人、前 Tesla AI 总监,已经把大约 80% 的开发工作交给 AI Agent 了。

但他发了一个诚实的帖子,列出了 AI 编程工具的所有问题。三句话,请慢慢读:

"模型会替你做错误的假设,然后不加验证就往下跑。它们不管理自己的困惑,不寻求澄清,不暴露不一致,不展示权衡,不在应该反对的时候反对。"

"它们真的很喜欢过度复杂化代码和 API,臃肿的抽象,不清理死代码。100行就能搞定的事,它们写1000行。"

"它们仍然会改变和删除它们不太理解的注释和代码,即使这些与当前任务无关。"

每个用 Claude Code 的开发者都立刻认出了这些问题。


一个开发者用四个原则解决了所有问题

一个叫 Forrest Chang 的开发者读了 Karpathy 的帖子,建了一个修复方案。

一个 CLAUDE.md 文件,四个原则,重写了 Claude Code 在每个任务上的行为方式。

一周内,45,000 人安装了这个文件。

CLAUDE.md 是什么?

CLAUDE.md 是一个行为配置文件,Claude Code 在每次会话开始时自动读取。文件中的内容会成为 Claude 思考你项目方式的一部分。

它不是提示词模板,不是插件,不是扩展。它是你的项目的一份"契约"——定义了 Claude 在这个项目中如何行为。

这个文件添加了四个直接源自 Karpathy 抱怨的原则,每个都修复一个特定的坏习惯。


原则一:Think Before Coding(先想后写)

问题

Claude Code 收到任务后立即开始写代码,不问问题,不澄清需求,直接开干。

你让它加个注册功能,它已经开始写数据库迁移文件了。但你要的是邮箱注册还是手机注册?需要验证吗?密码策略是什么?

它不在乎。它假设了所有答案,然后开始干活。

修复后

Claude Code 会先做四件事:

  1. 重复你的需求,确认理解
  2. 列出它发现的不确定之处
  3. 提出澄清问题
  4. 等你确认后再开始写代码
你: 帮我加一个用户注册功能

❌ 之前:直接开始写代码,假设你想要的字段、验证规则、数据库结构

✅ 之后:
  "我理解你需要添加用户注册功能。在开始之前,我想确认:
   - 需要哪些字段?(邮箱/用户名/手机号?)
   - 密码策略是什么?(最小长度/特殊字符?)
   - 需要邮箱验证吗?
   - 使用现有的认证系统还是新建?"

困惑在开工之前就暴露了,不是之后。

这个原则改变了整个工作流程。之前你花30%的时间在修改 Claude 错误假设产生的代码。现在你花10%的时间回答澄清问题,然后一次做对。


原则二:Simplicity First(简单优先)

问题

Claude Code 喜欢过度设计。你让它加一个功能,它给你加三个设计模式、五个接口、和一套完整的状态管理系统。

这是 Claude Code 最顽固的坏习惯。你让它查一下用户是不是管理员,它给你创建一套完整的 RBAC 权限系统。

修复后

Claude Code 会做三件事:

  1. 先写最简单能工作的版本
  2. 解释为什么这个方案是最简单的
  3. 只有在你明确要求时才增加复杂度
你: 添加一个函数检查用户是否是管理员

❌ 之前(Claude Code 的"热情"版本):
  - 创建 Role 枚举类
  - 创建 PermissionService 接口
  - 创建 RoleRepository 数据层
  - 创建 AdminChecker 工厂类
  - 实现三个策略模式
  - 添加完整的单元测试套件
  - 总共 200+ 行代码,5个新文件

✅ 之后(Claude Code 的"克制"版本):
  function isAdmin(user) {
    return user.role === 'admin';
  }
  // 1行代码,清晰明了

一个高级工程师会说第一个版本过度复杂吗?是的。所以 Claude 现在会先问自己:"最简单的方案是什么?"

这个原则特别适合处理 API 集成。Claude Code 之前会用3个包装类来调用一个 REST API。现在它会直接用 fetch。


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

问题

你让 Claude 修一个 200 行文件中的一个 bug,它返回给你的是:

  • 修改了你要修的 bug ✅
  • 加了类型提示 ❌
  • 重命名了变量 ❌
  • 重写了注释 ❌
  • 重构了函数签名 ❌
  • 改了代码格式 ❌

你花了10分钟 review 它的改动,发现5个你没要求的变更混在里面。有些看起来无害,但你不确定会不会影响其他地方。

修复后

你: 修复第47行的null check

❌ 之前:返回整个文件的重构版本,附带一堆你没要求的改动

✅ 之后:
  只修改第47行,添加 null 检查,其他保持不变
  改动大小:1行添加,0行删除

一个改动。你要的那个。没有其他东西。

这个原则最有价值的地方不是代码质量,而是信任。当你能信任 Claude 只做你要求的事,你开始把更重要的任务交给它。


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

问题

你告诉 Claude "做这个做那个",它一步步机械执行,遇到问题就停下来问你。

它不理解目标,只理解步骤。如果步骤行不通,它就卡住了。像一个只会照着菜谱做菜的厨师——食材缺了就不知道怎么办。

修复后

你给它成功标准,让它自己想办法达成。

这是 Karpathy 称之为"关键洞察"的原则:

"LLM 在循环直到达成特定目标方面异常出色。不要告诉它做什么。给它成功标准,然后看着它干活。"

你: 添加搜索功能

❌ 之前(微观管理,步骤式):
  "创建 SearchService,注入 SearchRepository,
   添加 search 方法,接受 query 参数,
   调用 elasticsearch,返回分页结果..."

✅ 之后(目标驱动,结果式):
  "添加搜索功能。成功标准:
   1. 用户可以按标题和内容搜索
   2. 搜索结果在100ms内返回
   3. 支持中文分词
   4. 有搜索结果高亮
   5. 所有边界情况都有测试覆盖
   自己决定实现方式。"

你停止了保姆式管理 → 你开始了审查式管理。

这个原则的转变是根本性的。你从"告诉 AI 每一步怎么做"变成"告诉 AI 什么叫成功"。AI 自己找路。


如何安装这个 CLAUDE.md 文件?

方式 A:全局安装(推荐)

打开 Claude Code,依次运行这两个命令:

# 第一个命令:安装插件
/install-plugin https://github.com/forrestchang/claude-code-principles

# 第二个命令:激活
# 立即生效,对所有项目都有效

全局安装后,每次打开任何项目的 Claude Code,这四个原则都会自动生效。

方式 B:按项目安装(更灵活)

在你项目的根目录创建 CLAUDE.md 文件,将以下内容粘贴进去:

# Claude Code 行为原则

## 原则一:先想后写 (Think Before Coding)
- 在开始实现之前,先确认理解需求
- 列出不确定之处并提出澄清问题
- 等用户确认后再开始编码
- 如果发现歧义,主动暴露而非假设

## 原则二:简单优先 (Simplicity First)
- 先写最简单能工作的版本
- 不要过度设计、过度抽象
- 100行能搞定的事,不要写1000行
- 只有在明确要求时才增加复杂度

## 原则三:精准修改 (Surgical Changes)
- 只修改与任务直接相关的代码
- 不要重命名、重格式化、重注释无关代码
- 不要添加你没要求的改进
- 每次变更都应该有明确的目的

## 原则四:目标驱动 (Goal-Driven Execution)
- 给定成功标准,自己决定实现方式
- 循环尝试直到达成目标
- 遇到阻碍先自己尝试解决
- 只在真正卡住时才寻求帮助

如何添加你自己的规则?

文件设计为可与项目特定指令合并。在四个原则之后,添加你自己的部分:

## 项目特定规则

- 所有公共 API 必须有 Swagger 文档
- 数据库查询必须使用参数化查询
- React 组件必须使用 TypeScript
- 提交信息遵循 Conventional Commits 规范
- 测试覆盖率不低于 80%
- 所有用户输入必须做 XSS 过滤
- 异步操作必须有错误处理和超时机制

你的项目规则叠加在四个原则之上,两者都生效。Claude 会同时遵守原则和你的规则。


安装后三个立刻能感受到的变化

如何验证它是否生效?三个变化会让你立刻注意到:

1. Diff 变干净了 之前一个简单任务的 diff 有50行改动,其中5行是你要的,45行是 Claude 自作主张的。现在 diff 里只有你要求的东西。

2. 澄清问题出现在实现之前 Claude 停止猜测,开始提问。你花更少的时间扔掉错误的工作,更多的时间确认正确的方向。

3. 代码第一次就更简单 不用因为过度工程化的方案重写。没有 Claude 觉得合理但没人要求的抽象。代码和你心里想的一样简洁。


常见问题 FAQ

Q: 这个文件会影响所有项目吗? A: 方式A(插件)会影响所有项目。方式B(项目级)只影响当前项目。建议先在项目级试用,满意后再全局安装。

Q: 和 Claude Code 的 /memory 命令有什么区别? A: /memory 添加的是简短指令,适合临时规则。CLAUDE.md 是完整的行为框架,适合核心原则。建议核心原则用 CLAUDE.md,临时规则用 /memory。

Q: 会增加 token 消耗吗? A: 会略微增加,因为每次会话都要读取这个文件。但它能避免返工浪费更多 token。一次返工浪费的 token 比 CLAUDE.md 多10倍。

Q: 可以修改这四个原则吗? A: 当然可以。CLAUDE.md 是你的文件,随时可以根据团队需求调整。有些团队会添加第五个原则:"中文注释优先"。

Q: 支持其他 AI 编程工具吗? A: 目前只支持 Claude Code。但类似的概念可以应用到 Cursor Rules (.cursorrules)、Windsurf Rules、GitHub Copilot 的 .github/copilot-instructions.md。


参考来源:AttentionVC 热门文章Karpathy 原帖Claude Code 官方文档