问题概述 😔
当AI助手在没有严格人工审查的情况下反复修改代码时,代码质量会通过累积的微观决策逐渐恶化,这种现象类似于机器学习中的模型崩溃。
主要问题
- 意图不清晰
- 命名漂移
- 可读性下降
- 丢失领域术语
- 逻辑重复
- 通用抽象
- 模型崩溃
- 语义衰减
- 代码熵积累
- 丢失领域知识
- 命名清晰度下降
- 架构漂移
- 代码近亲繁殖
技术影响
- 技术债务积累
- 语义含义丢失
解决方案 😃
核心策略
- 保留领域特定语言
- 审查每个AI更改
- 编写黄金测试
- 引入小型对象
实践建议
- 在合并请求和代码审查中拒绝不清晰的编辑
- 对抗工作垃圾代码
代码示例 📖
错误示例 ❌
|
|
正确示例 👉
|
|
检测方法 🔍
手动检测
通过审查提交历史中的模式来检测AI退化的代码:
- 连续AI辅助提交而无人工重构
- 函数长度随时间增加
- 通用变量名泛滥(data、temp、result、item)
- 注释与代码比率增长
- 逻辑重复但存在微小变化
代码审查工具可以跟踪这些指标并标记潜在的退化。
例外情况 🛑
AI辅助在以下情况下仍然有价值:
- 样板代码生成
- 测试用例创建
- 初始原型设计
当您立即审查和重构输出时,AI辅助是有益的。当您在没有人工干预的情况下链接多个AI修改,或者在不理解其含义的情况下接受AI建议时,就会出现这种代码异味。
技术背景 💬
当您让AI助手在没有关键人工审查的情况下反复修改代码时,就会创建类似于机器学习中模型崩溃的退化模式。
退化过程
- 每次迭代都会引入与最佳实践的微小偏差
- AI优化即时问题解决而非长期可维护性
- 变量名变得通用
- 使用注释作为替换清晰代码的借口
- 函数变得更长
- 领域概念模糊为技术实现
最终结果
代码库转变为AI垃圾:技术上功能正常但语义空洞的代码。
您请求简单的更改:重命名某些内容、提取某些内容、提高清晰度。每次迭代都会改变名称、删除细微差别,并用通用词替换领域词。您的代码不再准确反映现实世界领域,您失去了系统的形状。这是一个缓慢的侵蚀过程。
双向映射的重要性 🗺️
您的代码应该在映射器中的领域概念和您的实现之间保持清晰的双向映射。当AI助手在不理解您领域的情况下修改代码时,它们会破坏这种映射。
“客户"变成"数据”,“订单"变成"项目”,“应用定价层级"变成"计算折扣总额”。每次AI迭代都从领域语言进一步转向通用编程结构,使代码更难以理解和维护。
AI生成问题 🤖
当您提示AI多次修改现有代码时,AI生成器经常创建这种异味。每次交互都优化即时请求,而不考虑累积的架构影响。AI建议的快速修复有效,但不与代码库的设计模式或领域模型对齐。
AI倾向
- 用通用语言替换领域语言
- 优化模式一致性而非含义
- 平滑掉意图
AI检测与修复 🧲
如果您指示AI恢复领域术语并要求它解释其命名选择,AI可以解决此问题。您对委托给AI的工作负责,并且必须批准每个更改。
建议提示
“审查此代码的领域清晰度。用领域概念替换通用名称。将重复逻辑提取到内聚对象中。确保每个类和方法都表示清晰的业务概念。向我展示此代码实现的领域模型。”
结论 🏁
AI中的"哈布斯堡问题"类比,也称为"哈布斯堡AI",指的是当AI模型主要在由其他AI模型生成的内容上重复训练时,AI模型如何退化,就像哈布斯堡皇室家族存在的近亲繁殖问题一样。
这导致AI输出中多样性和鲁棒性的丧失,最终使AI的响应逐渐变差或语义空洞。您必须积极审查和重构AI生成的代码以保持质量。
关键建议
将AI助手视为需要监督的初级开发人员。每个AI建议都应加强您的领域模型,而不是削弱它。当您注意到通用模式替换领域语言时,停止并重构。您的代码的长期可维护性取决于保持业务概念和实现之间的联系。