AI 能写代码,但项目为什么越来越失控?

49 阅读4分钟

最近在大量使用 AI Coding 的时候,我越来越明显地遇到一个问题:

AI 能把功能写出来,但它写出来的代码,往往不是“团队真正想要的代码”。

而且项目一旦复杂起来,这个问题会被迅速放大。

最开始可能只是一些小问题:

  • Controller、Service 分层不符合项目约定;
  • 明明项目用了 Lombok,AI 还是手写 Getter、Setter;
  • 关键逻辑没有注释;
  • 日志随手写,内容不统一;
  • 异常和日志默认都是英文;
  • 长业务链路没有 TraceId;
  • 已有公共能力不用,又重新实现一套。

单看一段代码,好像都不算大问题。

但当 AI 一次改几十个文件、项目里又有很多表、很多接口、很多业务流程以后,情况就完全不一样了。

一个很简单的例子

假设做一个订单系统。

正常情况下,我们可能约定:

Controller
   ↓
Service
   ↓
Repository

日志统一使用中文,入口有 TraceId,DTO 使用 Lombok,异常走统一处理。

但如果只告诉 AI:

“增加一个订单退款功能。”

它很可能会:

  • 在 Controller 里直接写业务逻辑;
  • 新建一个和现有能力重复的工具类;
  • 打几条 Process success 之类的日志;
  • 自己重新定义异常;
  • 顺手再增加几个类。

功能可能真的能跑。

但连续做十几个需求以后,项目会慢慢变成:

代码很多,但没人真正知道它为什么这样设计。


我现在觉得真正的问题有两层

第一层:AI 不知道团队的工程规范

AI 默认追求的是:

“把这个需求实现出来。”

但团队真正关心的是:

“用我们项目自己的方式实现出来。”

这些规范很多都藏在老代码和工程师经验里。

所以仅仅靠一句:

“请按照项目规范开发。”

其实远远不够。


第二层:项目复杂以后,人开始失去控制

这个问题我现在觉得更加严重。

项目小的时候,AI 改几个文件,我还能逐行 Review。

但项目越来越大以后:

  • 几百个类;
  • 大量数据库表;
  • 很多接口;
  • 多个业务流程;
  • AI 一次修改几十个文件。

这时候再问:

“这次到底改了什么?”

很多时候连人自己都讲不清楚。

代码开始变成一个黑盒。

最危险的不是 AI 写错一行代码,而是:

人已经不知道 AI 到底在系统里做了什么。

如果这种状态持续下去,项目虽然一直有新代码产生,但工程师实际上已经逐渐失去了系统的 Ownership。


那应该怎么办?

这个问题我现在也没有一个百分之百确定的答案。

但我目前比较倾向于从四个方向尝试。

1. 把团队规则显式化

例如用项目级规则告诉 AI:

  • 分层怎么做;
  • 日志怎么写;
  • 异常怎么处理;
  • 是否使用 Lombok;
  • 哪些模块不能互相调用。

至少先解决“AI 根本不知道规则”的问题。

2. 给 AI 一个标准实现作为 Reference

相比写很多文字规则,我越来越觉得:

一份好的示例代码,可能比十条 Prompt 更有效。

让 AI 新增功能时优先参考项目里已经写得比较好的模块。

3. 能自动约束的,不依赖 AI 自觉

比如:

  • TraceId 用 MDC 和日志格式统一注入;
  • 异常用全局异常处理;
  • 分层依赖用 ArchUnit 检查;
  • 代码规范用 Checkstyle / PMD / SpotBugs 检查。

目标是:

AI 写错了,也能够被自动发现。

4. 解决“代码黑盒”问题

这个我觉得可能是接下来最值得研究的。

AI 每次修改代码以后,不只是告诉我:

“任务完成。”

而是应该同时给出一份可审计的变更说明:

这次改了哪些模块?
为什么改?
影响哪些接口?
影响哪些表?
新增了哪些状态?
有没有改变原有流程?
哪些地方存在风险?

甚至进一步自动生成:

模块关系图、调用链、数据库影响、关键 Diff、风险清单。

这样人审核的就不再是几千行代码,而是:

先审核 AI 对系统产生了什么影响,再去看关键代码。

我现在越来越觉得,这可能是大型项目使用 AI Coding 时必须补上的一层。


写在最后

AI Coding 现在已经很擅长“产生代码”。

但项目真正复杂以后,我越来越关心另外两个问题:

怎么让 AI 写出来的代码符合团队的工程规范?

以及:

怎么保证代码越来越多以后,人依然知道系统里面发生了什么?

前一个问题是规范。

后一个问题是控制。

如果这两个问题解决不了,AI 写代码越快,项目反而可能越容易失控。

所以我现在越来越觉得:

AI Coding 下一阶段真正需要解决的,不只是代码生成效率,而是工程治理和可审计性。