如何让 Claude 和 Cursor 生成高质量代码而不是 AI 垃圾

AI 工具容易生成大量看起来合理却不可维护的"垃圾代码"。本文介绍 Hallmark 等反 AI Slop 设计方法,从 prompt 结构到代码审查,系统性提升输出质量。

如何让 Claude 和 Cursor 生成高质量代码而不是 AI 垃圾

AI Slop(AI 垃圾输出)有一个固定特征:代码量大、看起来可以运行、但充满冗余抽象、不必要的注释、无意义的变量名,以及把五行能解决的问题拆成三个文件的习惯。这类代码能过初次检查,一旦需要修改或调试就会暴露问题。让 Claude Code 和 Cursor 输出高质量代码,不是靠更长的 prompt,而是靠更清晰的约束和更明确的完成标准。

什么是 AI Slop

AI Slop 泛指 AI 生成的、表面合理但实际质量低劣的内容,在代码领域具体表现为:

  • 过度抽象:为一个只用一次的操作写一个通用框架
  • 注释轰炸:每行代码都有注释,大多数注释只是重复代码本身在做什么
  • 命名混乱handleDataprocessItemdoThing——没有任何语义信息
  • 占位符诚信问题:交付物里有 // TODO: implement this,但交付时没有说明
  • 防御性冗余:加了一大堆 null 检查和 try/catch,但没有真正思考什么情况下这些异常会发生

这类代码对 AI 来说"生成成本"很低——补全一个合理的形态比真正思考问题要容易得多。

核心原则:约束优先于指令

告诉 AI "写好代码"不起作用。告诉 AI 具体不能做什么,效果好得多。

有效的约束类型:

不要写注释解释代码在做什么。注释只说明"为什么这样做"或"这里的权衡是什么"。
不要抽象只用一次的逻辑。直接写在调用处。
每个函数最多 20 行。超过了就拆分,并说明拆分的理由。
变量名必须能让不了解这个项目的工程师在 3 秒内理解它存的是什么。

这类约束可以直接放进 CLAUDE.md 或 Cursor 的项目规则,一次设置,长期生效。

Hallmark 方法:反 AI Slop 设计技能

Hallmark 是 Nutlope 开源的一个"反 AI Slop 设计技能",核心理念是:先定义"什么是完成",再让 AI 生成

具体操作:

  1. 在开始写代码之前,写下这段代码的验收标准——不是功能描述,而是"当满足 X、Y、Z 时,这段代码才算完成"
  2. 把验收标准粘贴进 prompt 的开头
  3. 要求 AI 在交付后对照验收标准自检,把没有通过的项标出来

这个流程强制 AI 生成"有终止条件的代码",而不是"尽可能全面的代码"。

Cursor 里的具体设置

.cursorrules 或 Cursor 项目规则里加入:

你是一个懒惰的高级工程师。懒意味着高效,不意味着马虎。
最好的代码是根本不需要写的代码。

在写任何代码之前停在第一个能成立的节点:
1. 这需要被构建吗?
2. 标准库已经做了这个吗?
3. 已有的依赖能解决它吗?
4. 能写成一行吗?
只有在以上都不满足时,才写最少量的能工作的代码。

不要写没有被明确要求的抽象。
不要写不需要的样板代码。
优先删除代码,而不是添加代码。

Claude Code 里的代码审查技巧

Claude Code 有一个容易被忽视的用法:不是用它写代码,而是用它审查它自己写的代码。

# 写完代码后
claude "审查你刚才写的代码。找出:
1. 任何可以删掉而不影响功能的行
2. 任何可以用更简单形式替代的抽象
3. 任何名称不能传达其含义的变量或函数
对每个问题给出修改建议"

这个"自我批评"步骤能捕获大约 60% 的 slop 特征,代价只是一次额外的对话轮次。

验收标准格式模板

## 验收标准

### 必须满足
- [ ] 没有只用一次的抽象
- [ ] 没有解释代码做什么的注释(只允许解释为什么)
- [ ] 每个公共 API 都有类型签名
- [ ] 边界条件有处理(说明是哪些边界条件)

### 不允许
- [ ] TODO/FIXME 占位符
- [ ] 长度超过 20 行的函数(除非有明确说明)
- [ ] any 类型(TypeScript 项目)

### 完成标志
通过 `pnpm test` + `pnpm typecheck`,在 code review 里没有"为什么要这样做"的问题。

把这个模板放进 spec.md 或直接贴进 Claude/Cursor 的 prompt,配合上面的约束规则,输出质量会有明显改善。

常见问题

问:这些约束会不会让 AI 生成的代码太少、不够用? 答:会让代码更短,但不会让它不够用。AI slop 的问题恰恰是代码太多,不是太少。简洁的代码更容易测试、更容易修改、bug 也更少。

问:CLAUDE.md 里的规则每次对话都有效吗? 答:在 Claude Code 里,CLAUDE.md 会在每次会话开始时自动载入,规则持续有效。在 Cursor 里,项目规则也是同理。对于跨会话的约定,文件是最可靠的存储位置。

问:Hallmark 工具在哪里下载? 答:Hallmark 是一个 GitHub 上的开源项目(github.com/Nutlope/hallmark),它提供的是设计技能文件,可以直接复制到你的项目里使用,不需要安装。

参考资料