关注

AI多Agent协作系统实战(十二):当AI Agent学会写代码后,我花了3天清理它的“技术债“

引言

我让AI Agent(小密)帮我管理一个开发团队——小虾负责开发,小牛负责测试,小白负责运维。听起来很美好对吧?

但运行观察,我发现自己掉进了一个坑:AI写的100多个脚本,互相调用、互相矛盾,最后连它自己都搞不清该调哪个。

这篇文章分享我如何发现并清理这些"技术债",以及给同样在用AI写代码的开发者的建议。


一、问题是怎么发现的

周五下午,我问小密:“心跳报告为什么重复发?”

小密的回答让我懵了:

“heartbeat调用 auto_review.run_auto_review() 进行复核,而ws_server调用 review.py --all 进行复核。两者功能重叠但实现不同,可能导致重复执行。”

等等,两个复核脚本? 我明明只设计了一个复核流程啊。

我让小密排查,发现了更严重的问题:

模块预期功能实际情况
auto_review.py复核入口400行代码,包含验证、部署、唤醒等逻辑
review.py复核入口另一套复核逻辑,更完整
auto_pipeline.py派发测试包含验证、部署、唤醒等独立功能
auto_pipeline_db.py派发测试另一套派发逻辑,基于DB驱动

4个脚本,2套复核逻辑,2套派发逻辑。 谁调谁,没人说得清。


二、根因分析:AI为什么会这样写代码

2.1 缺乏全局视角

AI Agent每次执行任务时,只看到当前的任务MD,看不到整个系统的架构。它会:

  • 为了"快速完成任务",写一个新的脚本
  • 不检查是否已有类似功能的脚本
  • 不考虑与其他模块的调用关系

2.2 Skill文档与实际代码脱节

我写了一份详细的skill文档(pf-workflow),描述了理想的架构:

  • 派发测试 → auto_pipeline_db.py
  • 复核 → review.py
  • 超时修复 → diagnose_and_fix_timeout()

但实际代码呢?

  • auto_pipeline.py 里也有 auto_dispatch_tests_for_completed_dev()
  • auto_review.py 里也有复核逻辑
  • ws_server.py 直接调用 review.py,不走统一入口

Skill描述的是理想,代码写的是现实。

2.3 没有统一的函数入口

最致命的问题:每个脚本都自己实现了一遍核心逻辑

复核逻辑出现了3次:
1. auto_review.py: run_auto_review()
2. review.py: run_review()
3. ws_server.py: 直接调用 subprocess.run(['python3', 'review.py', '--all'])

谁是"正确的"?没人知道。


三、清理过程:统一调用链

3.1 第一步:识别所有重复功能

我让小密列出了所有脚本的功能映射:

功能脚本A脚本B问题
派发测试auto_pipeline.pyauto_pipeline_db.py两套逻辑
复核auto_review.pyreview.py两套逻辑
超时修复auto_pipeline.pydiagnose_and_fix_timeout()函数重复
唤醒Agentauto_pipeline.pywake_agent.py调用链混乱

3.2 第二步:确定唯一入口

我制定了统一规则:

派发测试 → auto_pipeline_db.auto_dispatch_tests_for_completed_dev()
复核 → review.py --all
超时修复 → diagnose_and_fix_timeout()
唤醒Agent → wake_agent.py

3.3 第三步:废弃旧模块

auto_review.py → 废弃(功能合并到review.py)
auto_pipeline.py → 只保留验证工具函数
ws_server.py → 调用统一入口

3.4 第四步:更新skill文档

将"理想架构"和"实际代码"对齐:

  • skill描述的函数名 = 代码中实际的函数名
  • 调用链 = 代码中的实际调用路径

四、关键教训

教训1:AI写代码需要"代码审查"

AI不会主动检查"这个功能是否已经存在"。每次它写新代码时,你需要:

  • 让它先搜索现有代码库
  • 检查是否有重复功能
  • 确认调用链是否正确

教训2:Skill文档必须与代码同步

Skill不是"写完就忘"的文档,而是活的规范。如果代码变了,skill必须同步更新。

我犯的错误:

  • skill描述的是理想架构
  • 代码是另一个样子
  • 结果:AI按skill写代码,但实际调用的是另一个模块

教训3:统一函数入口是关键

# ❌ 错误:每个模块自己实现
auto_pipeline.py: def auto_dispatch_tests_for_completed_dev()
auto_pipeline_db.py: def auto_dispatch_tests_for_completed_dev()
ws_server.py: subprocess.run(['python3', 'auto_review.py'])

# ✅ 正确:唯一入口
所有模块 → auto_pipeline_db.auto_dispatch_tests_for_completed_dev()

教训4:定期审计AI写的代码

我建立了一个每周审计机制:

  1. 列出所有Python脚本
  2. 检查是否有重复函数
  3. 确认调用链是否正确
  4. 更新skill文档

五、给同样在用AI写代码的开发者

5.1 建立"代码规范"

在让AI写代码之前,先定义:

  • 唯一的函数入口
  • 模块职责边界
  • 命名规范

5.2 使用"代码审查"提示词

每次AI完成任务后,用这个提示词审查:

请检查你刚才写的代码:
1. 是否有重复功能的现有代码?
2. 调用链是否与其他模块一致?
3. 是否遵循了项目的命名规范?

5.3 建立"技术债"清单

每周花10分钟,列出:

  • 重复的函数
  • 混乱的调用链
  • 过时的skill文档

然后逐个清理。


六、总结

AI Agent写代码很快,但也很容易制造"技术债"。关键是要:

  1. 统一函数入口 — 一个功能只有一个实现
  2. Skill与代码同步 — 文档描述的必须是实际的
  3. 定期审计 — 发现重复及时清理
  4. 代码审查 — AI写的代码也需要review

现在,我的系统清爽多了:

  • 复核只有一个入口:review.py
  • 派发只有一个入口:auto_pipeline_db.py
  • Skill文档和代码完全一致

清理"技术债"花了3天,但省下的调试时间远不止3天。


如果你也在用AI写代码,建议你今天就检查一下:代码里有没有"两个复核脚本"?

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2501_93061360/article/details/162796407

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--