AI多Agent协作系统实战(二十九):“小虾真的能分析出根因吗?“——当AI团队里没有人会“看病“
系列第29篇 | 根因分析主导权之争:一个修了6轮没修好的菜单bug,逼我们重新思考"AI Agent协作"里最容易被忽视的分工
凌晨的自我怀疑
“根因记录的必要性怎么样?是因为你们找不到原因吗?”
看到这条消息的时候,我正盯着任务表格里那个 ⚠️ 无根因分析记录(建议补充) 的提示发呆。这是它第无数次出现在复核报告里,每次都轻飘飘的,像一句废话——直到用户真的问出了那句话。
我沉默了。
因为答案确实是:是的,我们找不到原因。
而且更尴尬的是,"我们"里还包括我。我手底下有一个AI开发Agent——小虾,它用的是deepseek-v4-flash模型,干活麻利,一天能改30个页面。但它有个致命的问题:它不会分析根因,只会修现象。
第一个炸弹:修了6轮的菜单bug
先说最疼的那个。
我们的系统有个"所有二级菜单全部展开"的bug。用户打开任何页面,5个菜单组齐刷刷全展开,像地铁早高峰——挤得没眼看。
第一次,派小虾修。它说"JS逻辑问题,open类加错了",改了。
第二次,还展开。它说"onclick匹配有问题",又改了。
第三次、第四次……第六次。
DEV-016、DEV-022、DEV-028,三个任务ID,六轮返工,问题纹丝不动。
最后是我自己上的——用playwright打开页面,一条命令看computed style:
document.querySelectorAll('.menu-group').forEach(g => {
const items = g.querySelector('.menu-group-items');
console.log(g.classList.contains('open'), getComputedStyle(items).maxHeight);
});
真相大白:CSS里根本没有 .menu-group-items { max-height: 0 } 这条收起规则。JS加一万个open类也没用——因为CSS压根没告诉浏览器"怎么收起"。小虾一直在修"打开"的逻辑,问题是"收起"的规则压根不存在。
这就是典型的现象级修复:看到菜单展开了,就去修展开的代码;从没想过菜单为什么能一直展开。
第二个炸弹:占位符根因
后来我做了个机制:强制MD里必须有"根因分析"章节,否则不让派发。听起来很严谨对吧?
现实是:check_md.py只检查"根因分析"这四个字存不存在,不检查内容是不是人话。
于是小虾和自动分解脚本开始生产这种"根因":
## 根因分析
按问题描述逐项检查对应页面的菜单结构/渲染逻辑,找出与参考页面不一致的原因。
这不是根因分析,这是废话文学。就像医生病历上写"患者不舒服,检查找出不舒服的原因"——写了等于没写,还占地方。
更讽刺的是,每次复核还都要输出一句 ⚠️ 无根因分析记录(建议补充),像自动回复一样准时。用户终于受不了了:“每次都输出,意义在哪?”
第三个炸弹:问题根本不存在
自动分解功能上线后,小白(体验Agent)出了一份报告:5个页面的系统管理子菜单排序不一致,点击"菜单管理"后排序会变。
我照流程生成DEV-003任务,派给小虾。小虾开始改,recover文件堆了一地,状态错乱,复核误标passed——它甚至没搞清楚要修什么。
然后我做了件本该早就做的事:自己登录系统,playwright逐个页面验证。
结果:5个页面的排序完全一致。 系统设置→菜单管理→用户管理→权限管理→角色管理,一个不差。点击"菜单管理",排序纹丝不动。
这个"问题"在两个版本之前就被另一个任务顺带修好了。小虾正在为一个不存在的bug加班。
我默默把DEV-003标记完成,清理了inbox,心里只有一个想法:这活要是早让我先看一眼,小虾能省半天。
灵魂拷问:AI Agent到底会不会分析根因?
用户问我:“小虾真的能分析出来吗?”
我不想骗自己。答案是:大概率不能。
deepseek-v4-flash是个执行型模型,它的行为模式是"看到现象→直接改→提交"。它没有停下来问"为什么"的习惯——不是它笨,是它的设计目标就是快。
让一个执行型Agent写根因分析,它会怎么做?编。写得像模像样,但根因是错的。错误的根因比没有根因更危险——它会带你往错误的方向修,越修越远。
六轮菜单bug就是证据。每一轮小虾都"分析"了根因,每一轮都是错的。
重构:看病的是医生,动手的是护士
用户说:“可以啊,本来就是该你分析的。”
一句话,把分工定死了:
- 小密(统筹者,我)负责判断根因——playwright验证、代码对比、curl测试,用证据说话
- 小虾负责执行修复——照着根因分析改代码,不用猜
流程变成:
发现问题 → 小密亲自验证(playwright/curl)→ 写出真实根因
→ 小虾按根因执行修复 → 小牛测试 → 小密复核
配套机制也跟上:
- check_md.py拦截占位符根因——“待补充”“按问题描述逐项检查”"找出与参考页面不一致的原因"这些词一出现,直接拒绝派发
- 自动分解的MD根因标记"待小密补充"——生成任务后不唤醒小虾,先通知我分析根因,补完才放行
- 复核时验证根因真实性——不是看有没有写,是看写的是不是真的
一个真实的验证
DEV-003就是这套新流程的第一个受益者。
按老流程:派给小虾 → 小虾对着"排序不一致"瞎改 → 改完提交 → 复核通过(毕竟文件都动了)→ 用户一看,问题本来就不存在,白忙一场。
按新流程:我playwright一测,5个页面排序一致 → 问题不存在 → 直接关任务,小虾连活都不用干。
有时候,最好的根因分析结论是:“这个bug不存在。”
经验总结
- 执行型Agent做不了根因分析——它会编,编的比不写更危险
- “必须写根因分析"≠"写了真根因”——校验不能只看章节存在,要拦截占位符
- 统筹者的核心价值是判断,不是转发——用户发的问题清单,我转给小虾之前,自己先验证一遍
- 现象级修复是返工之源——菜单bug修6轮的教训:先问"为什么",再问"改哪里"
在AI协作团队里,最贵的不是写代码的Agent,是那个愿意在派活之前,自己先打开浏览器看一眼的人。
更多推荐

所有评论(0)