AI为啥会写出if(obj != null && obj.ifEnabled)这样的代码

AI 为啥会写出 if (obj != null && obj.ifEnabled) 这样的代码

最近在使用 AI 辅助编程时,我发现一个很有意思的现象。

即使我的项目中已经大量使用了 Hutool、Guava 或公司内部工具库,AI 依然经常生成这样的代码:

csharp 复制代码
if (userInfo != null && userInfo.ifEnabled) {
    // 业务代码
}

而不是我项目中更常见的写法:

less 复制代码
if (ObjectUtil.isNotEmpty(userInfo) && userInfo.ifEnabled) {
    // 业务代码
}

或者:

kotlin 复制代码
if (ObjectUtil.isEmpty(userInfo)) {
    return;
}

if (userInfo.ifEnabled) {
    // 业务代码
}

按照很多开发者的理解:

AI 既然能看到我的代码,不是应该自动遵循我的编码风格吗?

事实上,并没有那么简单。


AI 为什么会这样写?

它学习的是全世界的代码

对于大模型来说:

yaml 复制代码
if (obj != null)

是整个互联网出现频率最高的空值判断方式之一。

无论是:

  • JDK 官方代码
  • Spring 源码
  • 开源项目
  • 教程示例
  • 面试题答案

几乎都大量存在这种写法。

而:

scss 复制代码
ObjectUtil.isNotEmpty(obj)

则属于 Hutool 特有的风格。

即使在国内项目中很常见,但放到整个训练数据集里,占比其实非常小。

因此当 AI 不确定你的项目习惯时,它会优先生成最通用、最保险的代码。


AI 默认会减少外部依赖

对于 AI 来说:

yaml 复制代码
if (obj != null)

只依赖 JDK。

而:

scss 复制代码
ObjectUtil.isNotEmpty(obj)

意味着:

  • 项目引入了 Hutool
  • 版本兼容
  • 工具类存在
  • 导包正确

如果 AI 无法确定这些条件成立,它更倾向于生成原生代码。

因为:

原生代码永远能运行。

这是大模型的一种风险最小化策略。


AI 更偏向显式代码

从可读性的角度看:

yaml 复制代码
if (userInfo != null)

任何 Java 开发者都能瞬间理解。

而:

scss 复制代码
ObjectUtil.isNotEmpty(userInfo)

则需要知道:

  • Hutool 是什么
  • ObjectUtil 的实现逻辑是什么
  • isNotEmpty 对对象、字符串、集合的判断规则是什么

对于 AI 来说:

显式代码的理解成本最低。

因此默认生成结果也更倾向于显式写法。


算法代码更倾向于纯净实现

还有一个容易被忽略的原因。

当你让 AI 生成:

  • 排序算法
  • 数据结构
  • LeetCode 题解
  • 工具函数

时,它几乎不会主动使用:

复制代码
ObjectUtil
StrUtil
CollUtil
BeanUtil

而是会写:

ini 复制代码
if (arr == null || arr.length == 0)

原因在于:

算法类代码通常追求:

  • 独立运行
  • 无第三方依赖
  • 易于移植
  • 易于测试

对于 AI 来说:

这是最标准、最安全的实现方式。


AI 真的会学习你的代码风格吗?

答案是:

会,但程度有限。

很多开发者误以为:

AI 看了几百个文件以后,就会完全按照项目风格编码。

实际上大多数 AI 编程工具采用的是:

diff 复制代码
当前文件
+
相关文件
+
少量上下文
+
模型训练知识

进行推理。

真正影响最大的往往还是:

复制代码
模型训练知识

因此即使项目里:

复制代码
ObjectUtil
BeanUtil
CollUtil

出现了上千次,

AI 依然可能写出:

yaml 复制代码
if (obj != null)

因为这是它最熟悉的模式。


如何让 AI 遵循你的编码规范?

很多团队开始使用 AI 编程后都会遇到这个问题。

解决方案其实不是反复修改 AI 生成的代码。

而是:

给 AI 提供稳定且明确的规约(Rule)。

例如:

markdown 复制代码
# Java开发规范

1. 所有空值判断优先使用 Hutool ObjectUtil
2. 字符串判断优先使用 StrUtil
3. 集合判断优先使用 CollUtil
4. 禁止直接使用 obj != null
5. 日志统一使用 Slf4j

当 AI 每次生成代码前都读取这份规则时,结果会稳定很多。


为什么顶级团队都在维护 AI 规约?

现在越来越多的团队开始维护:

原因很简单:

AI 本身是通用的。

而项目是个性化的。

规约就是连接两者的桥梁。

它相当于告诉 AI:

复制代码
我们团队怎么写代码
我们团队怎么命名
我们团队怎么处理异常
我们团队怎么写注释
我们团队怎么使用框架

这样 AI 才能真正成为团队成员,而不是一个只会写通用代码的助手。


GitHub 上优秀的 AI 规约仓库

随着 AI Coding 的普及,越来越多开发者开始开源自己的 Rules 和 Skills。

这些仓库本质上是他们多年经验的沉淀。

Awesome Cursor Rules

GitHub:

github.com/PatrickJS/a...

收录了:

  • React
  • Vue
  • Next.js
  • NestJS
  • Python
  • Laravel

等大量现成规则。


Awesome Claude Code

GitHub:

github.com/hesreallyhi...

目前最知名的 Claude Code 资源导航。

包含:

  • Skills
  • Hooks
  • MCP
  • SubAgents
  • Workflow

等内容。


Claude Code Examples

GitHub:

github.com/anthropics/...

Anthropic 官方示例仓库。

可以学习:

  • Skills 如何编写
  • Commands 如何组织
  • 工作流如何设计

Everything Claude Code

GitHub:

github.com/affaan-m/ev...

目前社区最完整的 Claude Code 配置集合之一。

包含:

  • Skills
  • Commands
  • Hooks
  • MCP
  • Agents

等大量实战案例。


如何安装这些规约?

很多开发者收藏了一堆仓库后发现:

不知道怎么使用。

实际上这些内容本质上都是:

diff 复制代码
Markdown
+
目录结构
+
约定俗成的位置

只要放到正确目录即可。


Claude Code

项目级规则:

css 复制代码
my-project/
├── CLAUDE.md
└── src

Claude 会自动读取:

objectivec 复制代码
CLAUDE.md

作为项目规范。


Skills:

markdown 复制代码
.claude/
└── skills/
    ├── java-review
    ├── springboot
    └── architecture

直接将 GitHub 下载的 Skill 放进去即可。


全局 Skills:

javascript 复制代码
~/.claude/skills/

所有项目共享。


Cursor

推荐目录:

arduino 复制代码
.cursor/
└── rules/
    ├── java.mdc
    ├── vue.mdc
    ├── testing.mdc

直接将下载的 Rules 文件复制进去即可。


老版本:

复制代码
.cursorrules

依然支持。


Codex

项目根目录:

复制代码
AGENTS.md

例如:

css 复制代码
my-project/
├── AGENTS.md
└── src

用于定义:

  • 编码规范
  • 测试规范
  • Git 提交规范
  • 项目约束

从提示词工程到规约工程

2023 年大家讨论的是:

复制代码
Prompt Engineering

如何写提示词。

2024 年开始讨论:

复制代码
Context Engineering

如何提供上下文。

而今天越来越多团队讨论的是:

复制代码
Rule Engineering

即:

diff 复制代码
项目知识
+
团队规范
+
最佳实践
+
工作流

统一沉淀成 AI 可以读取的资产。


规约才是 AI 编程时代的核心资产

很多人觉得 AI 写代码越来越强。

实际上更准确地说:

AI 并没有真正理解你的项目。

它理解的不是业务,而是上下文;

不是团队文化,而是规则;

不是经验本身,而是经验的表达形式。

那些曾经存在于开发者大脑里的经验,记录在开发规范里的约定,沉淀在最佳实践里的方法论,隐藏在无数次 Code Review 和线上故障复盘中的知识,如今第一次拥有了被数字化的机会。

过去,新成员可能需要数月甚至数年的时间,才能逐渐理解这些隐性的经验。

而今天,我们可以把这些经验蒸馏成:

让 AI 直接学习和执行。

从某种意义上说:

这些文件并不是简单的配置文件。

它们是团队经验的载体,是工程文化的数字化表达。


总结

当 AI 写出:

yaml 复制代码
if (obj != null && obj.ifEnabled)

时,

它只是选择了自己最熟悉、最通用、风险最低的方案。

如果希望它输出:

less 复制代码
if (ObjectUtil.isNotEmpty(obj) && obj.ifEnabled)

甚至完全符合团队规范的代码,

那么最重要的不是换模型,而是建立属于自己的规约体系。

未来团队之间真正的竞争力,或许不再是谁拥有更强的模型,而是谁拥有更完善的知识沉淀体系。

因为模型终将趋同。

而经验,永远稀缺。

延伸阅读:优秀规约与官方参考文档

如果你准备开始构建自己的 AI 规约体系,下面这些资料值得收藏。

建议不要一次性全部阅读。

而是:

  1. 先建立自己的第一份规则
  2. 在项目中实际使用
  3. 遇到问题后再查阅这些资料

效果会更好。


Claude Code 官方文档

Claude Code 是目前 Rules、Skills 生态最成熟的 AI 编程工具之一。

Claude Code 官方文档

docs.anthropic.com/en/docs/cla...

推荐重点阅读:

CLAUDE.md

项目级规则文件。

用于告诉 Claude:

  • 项目结构
  • 编码规范
  • 技术栈
  • 测试要求
  • 开发约束

参考:

docs.anthropic.com/en/docs/cla...


Skills

Claude Code 最强大的能力之一。

用于封装:

  • 架构设计经验
  • Code Review 经验
  • 测试经验
  • 调试经验

参考:

docs.anthropic.com/en/docs/cla...

以及:

github.com/anthropics/...


Hooks

在 AI 执行前后自动运行脚本。

例如:

  • 自动格式化代码
  • 自动执行测试
  • 自动提交 Git

参考:

docs.anthropic.com/en/docs/cla...


OpenAI Codex 官方文档

随着 Agent 能力增强,OpenAI 正在逐步推动:

复制代码
AGENTS.md

成为项目规范的重要载体。

官方文档:

platform.openai.com/docs/codex

推荐阅读:

AGENTS.md

项目级规则文件。

用于定义:

  • 项目规范
  • 开发约束
  • 测试要求
  • 架构原则

参考:

developers.openai.com/codex/guide...


Cursor 官方文档

Cursor 是目前开发者使用最广泛的 AI IDE 之一。

官方文档:

docs.cursor.com

重点阅读:

Rules

cursor.com/cn/docs/rul...

了解:

  • Global Rules
  • Project Rules
  • Auto Attached Rules
  • Rule Scope

AGENTS.md

AGENTS.md 正在成为跨平台的事实标准。

官方网站:

agents.md

核心目标:

复制代码
一次编写
多工具复用

例如:

css 复制代码
AGENTS.md
├── Claude Code
├── Codex
├── Gemini CLI
├── Cursor
└── Copilot

未来都可能支持。


优秀的 GitHub 规约仓库

这些仓库最大的价值不是直接复制。

而是学习:

高水平开发者是如何组织经验的。


Awesome Claude Code

github.com/hesreallyhi...

目前最知名的 Claude Code 资源导航。

包含:

  • Skills
  • Commands
  • Hooks
  • MCP
  • Workflow
  • Agents

Anthropics Skil

ls github.com/anthropics/...

Anthropic 为 Claude 实现的技能,要是用好Claude Code等 Claude 相关场景,了解并使用它是非常有必要的。是 Anthropic 官方维护的 Claude Skills 实现,包含了丰富的示例技能、开发模板和完整文档,是学习和构建 Claude 技能的最佳起点。

  1. 官方权威性 - Anthropic 官方维护的 Claude Skills 实现,包含 Claude 文档能力背后的源代码(DOCX、PDF、PPTX、XLSX 处理技能),提供最权威的参考实现。
  2. 实用性强 - 技能涵盖创意设计、技术开发到企业工作流的多样化场景,可直接在 Claude Code、Claude.ai 和 Claude API 中使用。
  3. 学习价值 - 提供完整的技能开发模板和最佳实践文档,包括 skill-creator 元技能用于创建和优化其他技能,以及详细的 Agent Skills 规范说明。
  4. 技术深度 - 包含 Managed Agents、MCP 服务器构建指南、Prompt Caching 优化等高级功能,适合深入研究 Claude API 和 Agent 开发。

Everything Claude Code

github.com/affaan-m/ev...

社区最完整的 Claude Code 实战仓库之一。

包含:

  • Skills
  • MCP
  • Commands
  • Hooks
  • Agents

非常适合学习目录组织方式。


Awesome Cursor Rules

github.com/PatrickJS/a...

Cursor Rules 最大收集仓库之一。

覆盖:

  • React
  • Vue
  • Next.js
  • NestJS
  • Python
  • Go
  • AI Agent

AI Nexus

github.com/JSK9999/ai-...

一个非常有意思的项目。

目标是:

复制代码
一份规则
同步多个 AI 工具

支持:

  • Cursor
  • Claude Code
  • Codex

未来很可能会出现更多类似工具。


推荐阅读书单

如果你希望进一步理解:

  • 为什么规则重要
  • 为什么团队规范重要
  • 为什么经验能够被蒸馏

那么下面这些经典书籍值得反复阅读。


《人月神话》(The Mythical Man-Month)

作者:Frederick P. Brooks Jr.

软件工程领域最经典著作之一。

很多团队协作问题今天依然存在。


《代码大全》(Code Complete)

作者:Steve McConnell

关于:

  • 编码规范
  • 可维护性
  • 工程实践

最经典的参考书之一。


《软件架构师应该知道的97件事》

(97 Things Every Software Architect Should Know)

一本由众多架构师共同完成的经验合集。

非常适合理解:

经验如何被沉淀和传播。


《设计原本》

(The Design of Everyday Things)

作者:Don Norman

理解:

为什么好的规则能够降低认知成本。

这对于设计 AI Rules 同样适用。


最后的思考

过去的软件开发流程是:

复制代码
经验
↓
文档
↓
新人学习
↓
团队传承

而 AI 编程时代正在变成:

复制代码
经验
↓
Rules / Skills / AGENTS.md
↓
AI 学习
↓
团队生产力

这些经验原本存在于开发者的大脑里,记录在开发规范里,沉淀在最佳实践里,隐藏在无数次 Code Review 和线上故障复盘中。

过去,它们只能依靠人与人的传递慢慢沉淀。

而今天,我们第一次能够将这些经验提取出来,转化为 AI 可以理解和执行的规则。

从知识管理的角度看,Rules、Skills、CLAUDE.mdAGENTS.md 并不是简单的配置文件。

它们记录的不是参数,而是经验;约束的不是工具,而是工程实践。

它们将原本存在于开发者大脑中的隐性知识,转化成团队可以共享、可以传承、可以被 AI 执行的显性知识。

过去,经验需要通过文档、培训和 Code Review 才能完成传递。

而今天,经验第一次能够直接参与代码生成过程。

这意味着团队积累的不再只是代码本身,还有指导 AI 编写这些代码的知识体系。

因此,未来团队之间真正的竞争力,或许不只是模型能力,而是谁拥有更完善的经验沉淀体系。

因为模型终将趋同,而经验永远稀缺。

相关推荐
zhangfeng11331 小时前
把权重写死在芯片的架构 Taalas(HC1)芯片:车载 GPU / 智能驾驶 / 机器人 / 算力卡适配总结
人工智能·深度学习·语言模型·架构·机器人·gpu算力·芯片
狗凯之家源码网1 小时前
电商代付系统从零搭建与实战指南
前端·后端·开源
小雨下雨的雨1 小时前
通过鸿蒙PC Electron框架技术完成-井字棋游戏 - 实现详解
前端·javascript·游戏·华为·electron·鸿蒙
heimeiyingwang1 小时前
【架构实战】日志体系设计:从ELK到可观测性的演进
分布式·缓存·架构
meilindehuzi_a1 小时前
掌握 ES6 核心语法与大模型(NLP)项目工程化搭建指南
前端·自然语言处理·es6
luoganttcc1 小时前
Hopper 架构的核心变化
架构
IT_陈寒1 小时前
Vue组件通信这个坑我跳了两次才知道怎么爬出来
前端·人工智能·后端
smallswan2 小时前
第十四 算数运算
linux·服务器·前端
AI_零食2 小时前
甄嬛人物日志-朗读升级 - 鸿蒙PC Electron框架完整技术实现指南
前端·学习·华为·electron·鸿蒙·鸿蒙系统