使用 AI Agent 修 Bug、排查问题时,经常会出现一种情况:
问题已经解决了,但最终 Diff 里却留下了一堆“过程性代码”。
比如:
-
临时增加的 console.log;
-
为了测试写的 Mock;
-
临时关闭的校验;
-
调试用的配置开关;
-
注释掉但没有删除的旧代码;
-
为了定位问题增加的额外文件。
这些东西在排查过程中可能都很有用。
真正的问题是:
任务结束以后,它们没有被及时清理。
于是一个本来只需要修改几十行的任务,最后可能留下几百行Diff。
一、为什么Agent特别容易留下临时修改?
因为复杂问题通常不是一次就能找到根因。
Agent可能经历:
增加日志
↓
运行测试
↓
发现新线索
↓
增加更多日志
↓
修改配置
↓
验证问题
每一步都会产生新的改动。
当最终Bug修复以后,Agent更容易关注:
测试是不是通过了?
而忽略:
前面为了调试加的东西还需要吗?
于是过程代码就被一起留了下来。
二、调试日志最容易残留
例如排查接口问题时,可能加入:
console.log("user", user)
console.log("response", response)
console.log("status", status)
调试阶段这些信息非常有价值。
但问题解决后,如果全部保留:
-
日志会越来越多;
-
正常输出被淹没;
-
甚至可能暴露不必要的数据。
所以任务结束前应该重新确认:
哪些日志属于长期观测,哪些只是临时诊断。
临时诊断日志通常应该删除。
三、临时Mock也容易变成正式代码
为了快速复现问题,Agent可能写:
固定返回测试用户
固定接口结果
绕过真实服务
跳过某个步骤
例如:
const user = mockUser
排查时可以帮助定位问题。
但如果最后忘记恢复真实调用,就可能出现:
测试看起来通过,实际逻辑却已经被替换。
因此看到:
mock
fake
temp
debug
testOnly
这类临时逻辑时,都应该在任务结束前重新检查。
四、为了调试关闭规则,也可能没有恢复
例如问题排查过程中临时:
关闭某个Feature Flag
跳过权限检查
关闭缓存
禁用某个中间件
这样做有时候是为了确认:
问题到底来自哪一层?
但如果Bug修好以后这些设置仍然保留,真实行为就可能发生变化。
所以一个完整任务不能只确认:
问题现在不出现了。
还需要确认:
为了排查问题做的临时改变是否全部恢复。
五、为什么“大Diff”会增加Review成本?
假设真正修复只需要:
15行代码
但因为调试过程最终Diff变成:
230行修改
Review的人就必须判断:
-
哪些是正式修改;
-
哪些只是调试;
-
哪些修改仍然有必要;
-
哪些可以删除。
这会明显增加审核难度。
更麻烦的是:
真正关键的15行修复可能被大量无关变化淹没。
所以任务收尾的目标之一,就是:
让最终Diff尽可能接近真正需要进入主分支的内容。
六、任务完成后应该做一次Cleanup
Agent完成核心任务后,可以增加一个独立阶段:
Fix
↓
Test
↓
Cleanup
↓
Review Diff
↓
完成
Cleanup阶段重点检查:
-
临时日志;
-
Debug代码;
-
Mock;
-
注释代码;
-
临时配置;
-
无用变量;
-
调试文件。
这一步和Lint不同。
Lint主要检查规范。
Cleanup更关注:
这次任务有没有留下不必要的东西。
七、重新看完整Diff非常重要
任务执行过程中,Agent看到的是:
一步一步发生的变化。
但开发者最终Review看到的是:
所有变化叠加后的结果。
所以完成任务以后,可以重新运行:
git diff
从最终状态重新检查:
如果我现在第一次看到这个Diff,每一处修改都能解释吗?
如果某一段只能解释成:
这是前面调试时留下的。
那通常就应该考虑删除。
八、不要为了“保险”把所有调试代码都留下
有时Agent可能认为:
这些日志以后可能还有用。
于是全部保留。
但真正长期需要的观测信息,应该进入:
-
正式日志系统;
-
Metrics;
-
Trace;
-
明确的错误记录。
而不是依赖大量临时:
console.log()
长期观测和临时调试应该分开。
九、可以让Agent最后做一次“必要性检查”
任务完成后,可以要求:
请重新检查本次全部Diff:
1. 哪些代码是真正解决问题所必需的;
2. 哪些是排查过程中加入的临时日志;
3. 哪些Mock或调试配置需要删除;
4. 是否存在注释掉的旧实现;
5. 是否有未使用变量或文件;
6. 清理后重新运行测试。
这一步非常适合放在提交之前。
十、好的任务结果应该比过程更干净
AI Agent解决复杂问题时,过程中出现大量尝试很正常。
关键不是:
中间有没有走弯路。
而是最终进入代码库的结果是否足够干净。
可以理解成:
探索阶段
允许尝试
提交阶段
只保留必要修改
这两种状态不应该混在一起。
最后
AI Agent改完代码以后留下大量临时修改,本质上通常不是代码能力问题,而是:
任务缺少明确的“收尾阶段”。
真正完整的开发流程不应该停在:
Bug已经修好,测试已经通过。
还应该继续完成:
清理临时代码 → 检查完整Diff → 再次验证 → 最终提交。
AI Agent越能自主执行复杂任务,Cleanup就越重要。
因为真正高质量的自动化开发,不只是:
把问题修掉。
还应该做到:
修完以后,代码库里只留下真正需要留下的东西。
持续更新 Codex、Claude Code、AI Agent 与大模型开发工作流实战内容,更多深度内容和稳定订阅渠道欢迎搜索关注「孤狼GPT」。
网硕互联帮助中心



评论前必须登录!
注册