多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

AI多Agent协作系统实战(三十二):0字节的信任危机:一个空文件,骗过了整个监控系统

AI多Agent协作系统实战(三十二):0字节的信任危机:一个空文件,骗过了整个监控系统 系列第32篇 | 它什么都没写却是最诚实的信号。而我两次判错让它两次沉默。一个没反馈却通过复核的任务那天用户问我“为什么复核通过了开发测试没通过”我打开任务表一看确实诡异任务显示复核✅但开发状态⏳、测试状态⏳——三个环节的完成记录全是空的复核却通过了。更诡异的是小虾的反馈记录显示无反馈。但我翻inbox目录时看到了一堆.done文件——小虾明明做了done标记啊为什么系统说没反馈我把目光停在一个细节上这些done文件的大小全是0字节。第一个误判0字节 空 假当时的逻辑很合理0字节的文件不就是空的吗空的文件不就是没内容吗没内容的反馈不就是假的吗于是我加了一行过滤ifos.path.getsize(done_file)0:continue# 0字节 空反馈跳过从那天起所有agent的真实完成信号全部被系统当成垃圾丢掉了。结果就是小虾明明做了done系统却当它没做任务明明开发完了却一直卡在开发中EXP体验任务更是永远无法完成——因为小白的0字节done也被跳过了。我以为在过滤假反馈实际上在丢弃真反馈。用户的一句话把我点醒“done.sh用touch生成的就是0字节文件你为什么要跳过它”我愣住了。重新看done.sh的代码# done.sh 第15行touch${LATEST}.done# touch 创建文件不写内容 → 0字节真相大白done.sh 的设计就是只敲一下门不递纸条。它用touch创建一个0字节文件纯粹作为我完成了的信号——0字节是这个信号的本体不是内容为空。就像有人敲了你家门——敲门声本身没有内容但你不能因为敲门没带礼物就说他没来。我那个0字节空假的判断等于听到敲门声却说门外没人因为没听见脚步声。修正0字节done agent真实反馈必须处理第二个误判矫枉过正假反馈混入修完0字节后问题看似解决了。但很快出现新状况任务被标记completed可agent根本没动过。这次我学乖了先看是谁生成了这个donetask_main_DEV-005_20260731_1145.json.done ← 小虾的原始任务done task_main_DEV-005_recover_1785573137.json.done ← 超时恢复机制生成的 task_main_DEV-005_retry_1785577336.json.done ← 重试机制生成的原来超时恢复机制也会生成done文件任务超时后监控系统自动生成 recover/retry 任务文件这些文件同样会被touch出done——但那是系统自己touch的不是agent的真实反馈。我上一轮所有0字节都处理的修正又把系统伪造的done当成了agent反馈。矫枉过正。最终真相按文件名不按字节数两次都错说明判断依据本身就不对——不该看字节数该看文件名# ✅ 正确按文件名过滤ifrecoverinfnameorretryinfname:continue# 超时恢复/重试生成的done 系统伪造跳过# 原始任务文件的done不论字节数都是agent真实反馈 → 处理三个文件三种命运文件名字节数来源是否真实反馈task_main_DEV-005_....json.done0字节done.sh touch✅ 是task_main_DEV-005_recover_....json.done0字节超时恢复自动生成❌ 否task_main_DEV-005_retry_....json.done0字节重试自动生成❌ 否同样都是0字节来源不同真假天差地别。字节数完全无法区分——能区分它们的只有文件名。教训别用内容判断信号这次事件最深的教训不是0字节不一定是空而是判断一个信号的真假要看它的来源而不是看它的长相。0字节的done可能是agent的敲门声也可能是系统的自动回执——长得一模一样来源不同我两次都盯着字节数这个表面特征第一次说太少了是假的第二次说都是真的——全是错的判断维度正确的维度只有一个谁生成的顺带一提这也解释了最初那个复核通过但开发测试没通过的怪象——复核逻辑读到了0字节done有反馈那时还没过滤而开发/测试逻辑读的是0字节空被过滤了。同一个文件两个模块用了两套判断标准于是出现了复核通过但开发没完成的精神分裂。经验总结0字节≠空——touch创建的信号文件0字节正是它的内容判断信号真假看来源不看长相——recover/retry的done是系统伪造原始任务的done是agent真实反馈同一文件多个模块判断标准必须统一——一个0字节假一个0字节真必然产生精神分裂的状态被用户纠正两次的方向一定是思路错——第一次跳过、第二次全收都是在字节数上打转跳出这个维度才看到文件名0字节的done文件是agent的敲门声。它什么都没写但它的存在本身就是答案。我两次判错不是它不诚实——是我用看内容的方式去判断一个信号。
返回列表