AI 编码的“喜新厌旧”:一个被严重低估的真实规律
325
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
在 AI 编码越来越普及的今天,很多人只看到它秒写代码、快速生成、独立功能一写就对的强大能力,却忽略了一个极其关键、却少有人总结的现象: AI 编码天生“喜新厌旧”。 这不是比喻,而是当前大模型在工程实践中表现出的、稳定可复现的典型特征。 一 什么是 AI 编码的喜新厌旧 简单说就是两句话: 二 为什么 AI 会喜新厌旧? AI 只能基于你提供的片段信息生成代码,看不到完整架构、数据流向、历史约定、隐藏约束,更不懂“为什么以前这么设计”。 2. AI 擅长生成,不擅长兼容 从零写代码是“创作”,AI 很擅长; 在已有代码上修改、适配、兼容、联调,是“遵守规则”,AI 最不擅长。 3. AI 修改代码容易顾此失彼 改 A 问题,可能破坏 B 逻辑;修复 C Bug,可能把之前正常的 D 改回错误状态。 小修小改越多,代码越乱,最终陷入修改泥潭。 4. AI 缺少对“接口契约”的长期记忆 字段含义、参数顺序、异常处理、返回规则、历史版本兼容……这些工程里最关键的细节,AI 很难持续保持一致。 三 喜新厌旧带来的真实后果 四 最重要的结论:AI 编程,最好一次成功 正因为 AI 喜新厌旧、不擅长在历史代码上持续修补,我们必须改变开发思路: 不要指望 AI 先随便写,再慢慢改对。 AI 编码的最优策略,是一次成功。 五 应对策略:从“单次生成”到“工程化协作” 1. 强制“契约先行”(根治接口问题) 先定义接口,再生成实现:让 AI 先生成一份清晰的接口定义文件(如 OpenAPI/Swagger、gRPC proto、TypeScript 类型定义、纯 C 头文件)。 把接口文件作为不可变契约:后续所有模块的生成、修改,都要求 AI 只依赖契约文件,不得自行推断接口。这样多模块间就有“硬约束”。 2. 建立“回归测试护城河” 在让 AI 修改代码前,先要求它生成针对关键接口的单元测试和集成测试(可以 mock)。 修改后,自动运行测试。AI 出错时,不手动猜,而是把错误日志+测试用例直接喂给 AI,让它自行修正。这比手动描述“这里不对”高效得多。 3. 用“原子化提交”切断泥潭 每次只让 AI 做一个极小、可逆的变更(例如“把函数 A 的参数从 int 改为 string,并更新仅有的 3 处调用”)。 每成功一步,就把当前代码状态提交到 git(AI 不知道 git,但你可以做快照)。出错了直接回滚,而不是在错误基础上反复打补丁。 4. 主动管理 AI 的“短时记忆” 每次新对话(或每次重大修改前),手动总结当前的关键接口和已知约束,作为提示词的前置固定部分。例如: “当前项目有以下固定接口: int get\_user\_id(char \*name) 返回用户 ID,失败返回 -1 所有 JSON 解析必须使用 libyajl 而非 cJSON 以下是你即将修改的文件和依赖关系:...” 这相当于给 AI 注射“长期记忆疫苗”。 5. 接受“AI 生成 + 人工粘合”模式 让 AI 生成纯函数、无副作用的核心逻辑(这些很容易一次成功)。 人工编写模块间的胶水代码、错误处理、资源管理(这些是 AI 最容易出错的地方,人工处理反而更快)。 这是目前生产环境中最稳妥的折衷。 总之: AI 是优秀的“新建工具”,不是可靠的“修补工具”。 喜新厌旧,就是 AI 编码最真实的性格。 需求定义、需求拆分、架构设计、TDD就是AI编程下的重中之重。
麦哲思科技任甲林
麦哲思科技(北京)有限公司总经理 敏捷性能合弄模型评估师 认证的Scrum Master 认证的大规模敏捷顾问SPC CMMI高成熟度主任评估师 COSMIC MPC,IAC 成员,中国分部主席
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
白皮书上线