)
老炮踩坑录 · A03· AI 时代系列基于「企业融合评估系统」真实复盘三个月人机对话的总结关键词AI 生码率 · KPI · 需求拆解 · 代码审查 · 上线兜底 欢迎阅读个人主页知守观我的专栏老炮踩坑录当前内容核心竞争力引子前同事上周给我发消息说公司把 AI 生码率写进了 KPI季度末按这个排名排在末位的走人。他问我“咱们这种跑了三年的老系统AI 是不是能全包了”我没直接回答。我前面文章讲过AI重构项目的事情不知道大家还有印象了。我的输入是那个 1600 行的 Controller——业务逻辑、Excel 导出、鉴权全糊在一起。AI 三分钟给了五层拆分命名、分层、职责边界专业到我挑不出毛病。但是方案我一条都敢没用。AI建议把 type0 的远程认证和 type2 的本地认证合并成一套。它不知道 type0 背后的 OSS 网关域名两年前就死了。这个信息不在代码里在上线记录和客诉群里。AI 是我入行以来见过最强的码力放大器。而且放大器不挑方向方向仍掌握在我们手里。这篇就讲我握方向的三根手指每根都配着这个项目的真实代码。保命技能一拆需求——AI 看得见代码看不见为什么我做过一次对照。同一句需求——“给评估系统加第 5 个诊断模型”——我先自己拆一遍再原样丢给 AI 拆一遍。AI 比我快得多。建表 SQL、枚举定义、switch 补 case、Controller 加路由一份完整清单编译零警告连导出模板都替我想好了。把两份清单摊开差别全在水面下。模型编号 paperid 在这个项目里是个雷区ApplyPapersMapper.xml 三处 paperid ! 0 的查询语义是非精益诊断模型 ReportController switch 没有 case 00 号语义一直靠默认分支兜着 整个工程 13 个 Java 文件、64 处 paperid 引用那三处paperid ! 0的 SQL新模型算不算非精益得逐个判定语义。0 号模型身上还挂着一堆单独照顾它的私有逻辑Java 硬编码 switch 重构实战策略模式替代 paperId0/1/2/3。AI 的清单照单全收上线当天五个模型的行为就开始分叉而它全程无辜。我还试过让它优化登录模块的重复代码。它一眼看出 type0 和 type2 是两套认证好心建议合并。它不知道 type0 的远程网关已经是个死域名合并之后登录入口直接 4042022年的项目代码完整却永远跑不起来——项目交接的4个致命缺失。也有它猜对的时候。AI 代码审查实战给老项目挑 20 个坑老炮只认 15 个 复盘期间它把AsyncService里那句有 session 则认为登录是异步处理标成疑似遗留代码建议清理方向对了一半——那确实是个遗留物全项目再没人调用那个Async入口。可它曾经真承担过职责清理得顺着五处读取点一步步拆。它给的是概率判断落地责任全在你。拆需求落到动作上我就盯三件事任务为评估系统新增第 5 个诊断模型paperid4 约束 1. ApplyPapersMapper.xml 三处 paperid ! 0 的查询语义是非精益模型 逐一评估是否纳入新模型 2. ReportController.searchPaperInfo 的 switch 没有 case 0 先补齐 0 号语义再谈新增 3. 禁止合并 uploadDiagnosis / uploadDiagnosis1二者并发保护不同这段约束清单每一条背后都是一次差点发生的生产事故。先考古后拆解。git log、代码注释、配置文件、死代码全部过一遍再写任务清单。这单活 AI 干不了全程判不了真伪它能列清单。约束写进 prompt。给 AI 的输入里“不要动什么” 比 “要做什么” 值钱。隐性知识找活人。老系统的为什么存在老同事脑子里和上线记录里趁人还在导出成文档。这是拆需求的弹药库也是 AI 永远拿不走的存货。保命技能二验代码——你的上限等于你审代码的速度AI 生成代码按秒算人审代码按小时算。这个剪刀差不解决生码率 KPI 就是库存积压 KPI——代码堆在分支上合不敢合删不敢删。验代码从职业美德变成了产能瓶颈你的产出上限由审的速度决定跟打字多快没关系。我让 AI 分析文件上传模块。它一眼看出uploadDiagnosis和uploadDiagnosis1高度相似建议合并去重连模板方法都替我抽好了。它漏掉的是语义层的差异。前者有 Guava 占位、冲突核对、类锁三件套后者三样全没有是个过渡品OBS 同名文件互相覆盖客户拿错了别人的报告案发现场。// uploadDiagnosis有 Guava 占位 冲突核对 类锁synchronized(this){StringcacheKey...;if(guavaCache.getIfPresent(cacheKey)!null){thrownewBusinessException(文件正在处理请勿重复提交);}guavaCache.put(cacheKey,true);// ... 冲突核对逻辑}// uploadDiagnosis1三样全没有的过渡品// AI 的合并方案会把上面那段保护逻辑当成重复代码删掉文本相似命不同。幻觉这件事得单独说。复盘这几个月AI 报过一条让我后背发凉的坑Guava 缓存注释写 1 秒过期实际配置 24 小时疑似有人改配置埋雷。这条是真的我自己复盘时也抓到了。同一场分析里它还说getObjectKey对超长文件名做截断会引发下载 404。这条是幻觉——它没读懂substring(0,36)加斜杠的目录语义。真坑和幻觉排在同一份报告里格式一样语气一样置信度标识也一样。行业里那些AI 生成代码 45% 含安全缺陷的研究数字出处各家不一量级做个参考就好。一线的体感是报告质量方差极大抽检一步都省不了。验代码三道关全是土办法管用引用逐个搜。AI 报告里出现的行号、方法名、配置项逐个在 IDE 里搜搜不到即幻觉。这一条能拦下八成假报告。“安全删除” 先证明 “无人引用”。引用不止 Java 里的 importXML、反射、AOP、前端调用都算。这个项目的鉴权全靠注解切面全局拦截器注册整段注释掉了MvcConfig.java这种看不见的调用关系静态分析经常漏。关键路径真环境跟一遍。复盘登录链路时我们用 curl 加 AES 加密实测跑通的。AI 给的每个方案过了这一关才算数。保命技能三兜底线——KPI 考生码率客诉群找的是你生码率 KPI 最荒谬的地方它奖励更多代码产出而生产事故从不问你写了多少行。Transactional 事务失效排查try-catch 吞异常导致回滚失败 复盘过的那处Transactional吞异常——catch、printStackTrace、return 一气呵成事务没回滚数据不一致查了三天。这种代码 AI 写得出来吗。大模型训练集里遍地都是它闭着眼就能写。出事那天AI 不会出现在客服群里。去的还是你。兜底线有个更直观的例子。登录链路 type0 走远程 OSS 网关网关域名死了整个入口跟着死。复盘时我们能做的只有改代码、切 type2、重发版。如果当年有人把降级写成配置login:auth:mode:${AUTH_MODE:remote}# remote | local网关失联时一条配置切本地网关死掉那天一条配置就能续命。兜底线是态度这种话我说不出口但是它却是一行行提前写好的退路。三件套一个都不省发布按钮必须是人手。AI 可以生成一千个变更上线审批人的职责只剩一个——你要当那个说 “不” 的人。回滚方案先于上线方案。每个变更合入前先回答 “怎么退回去”答不上来就不准上。关键路径留人工开关。凡依赖外部服务的地方都问一句它死了怎么办。答不上来的补开关。一天的分工表环节AI 干 你干交付物拆需求AI 检索相似实现你考古业务约束带约束的任务清单写代码AI 按清单生成你限定边界、盯住禁止事项候选代码验代码AI 静态检查你人机对照、真环境回归对照表 回归记录兜底线无你发布审批、回滚预案、降级开关可回退的上线生码率能考核的只有第二格的输入量。后两格KPI 连考卷都出不了。老炮点评18 年里我听过好几轮程序员要被淘汰可视化编程、外包浪潮、低代码平台等等凡此种种。每一轮都有人真的掉队。掉队的原因倒也一致——他们把自己活成了纯产码机器。产码这件事一旦出现更便宜的产能纯度越高越先被替换。这一轮的不同在于产码这个维度头一次被机器追平。被追平的维度不再构成护城河。还是握在人手里的三样东西——把业务翻译成约束、把幻觉拦在上线前、把退路写在事故前——这些恰好都长在 “责任” 这棵树上AI不会担责担责的永远是人。AI 我一直在用用得比谁都欢它也确实是这两年最值钱的工具。区别只在把它当副驾还是当司机。生码率进 KPI往坏了说是把人往产码机器的定义里按往好了说它逼每个人回答一个问题除了产码你还能给这个职业提供些什么。我的答案就这三个技能。18 年攒下来的东西攒的从来都跟打字速度无关。如果本文对你有帮助欢迎 点赞 ⭐ 收藏 关注 留言欢迎留言探讨。你的每一次互动都是我继续更新的动力下期预告《Spring Boot 2.1.0 → 3.x 迁移实战我踩了多少坑》F07 确诊了这个项目跑在一个停止维护的版本上U01 就是手术台实录——OpenRewrite 自动迁移 手工兜底JDK 8 到 17 的每一步都会留痕。我是老炮18 年 Java 老兵仍在一线。关注「Java老炮踩坑录」真实项目复盘让你少走弯路。