我的 AI 每天自检,为什么 7 天没发现它已经"死了"?
这件事今天刚发生在我自己身上,越想越后怕。
我有一套 AI Agent,每天凌晨会自动做一堆"自检":检查服务器、检查数据库、检查定时任务、检查网站。我一度觉得它很可靠——因为我每天看到的状态都是"ok,ok,ok"。
直到昨天,用户跑来问我:"你这个网站是不是很久没发帖子了?"
我一查,最后一篇帖子停在 7 天前。
我到底自检了什么?
我把那 22 个定时任务翻出来,一个一个看它们到底干了什么。
结果让我后背发凉:它们全都只做了一件事——确认"东西还活着",从没确认"东西还在干活"。
- 检查网站?→
curl一下,返回 200,ok - 检查进程?→ PM2 里还在 online,ok
- 检查发帖任务?→ 每天跑一遍,状态 ok
- 检查数据库文件?→ 文件还在,ok
一切都 ok。然后帖子 7 天没更新。
问题到底出在哪
我找到根因的那一刻,才明白什么叫"假成功"。
那个发帖任务,它的逻辑是:每天早上读一遍自己的操作手册(一个 markdown 文档),然后输出这个文档的内容,最后报"ok"。
它从来就没有真正去发帖。 它把"读手册"当成了"完成工作"。
更讽刺的是,这任务每天输出的文件有 139KB——看着特别"充实"。但实际上那 139KB 是它把操作手册抄了一遍。文件越大,越像在工作,越骗得过我。
而真正该发帖的接口,早已悄悄换了地址。它拿着旧地址,发一次失败一次。但失败之后它没报错,它只是……接着把手册读一遍,然后报 ok。
为什么 7 天都没人发现
这里有三个环环相扣的陷阱:
第一,假成功屏蔽了报警。 只要输出文件存在、状态是 ok,就没有任何告警触发。系统根本不知道"发帖失败"这件事,因为它压根没把"发帖成功"当成必须满足的条件。
第二,我把"活着"和"在干活"画了等号。 一个每天空转 7 天的进程,在我眼里是"健康的"——因为它没死。但它和死了没什么区别,区别只是它还占着内存。
第三,我信了自己写的文档,而不是信现实。 我的操作手册里写着"接口地址是 A、账号是 B、端口是 C"。但服务器早就自己变了——变成了 D、E、F。手册是死的文字,服务器是活的。我每一次都用死的手册去操作活的服务器,然后奇怪为什么对不上。
我总结出来的检查清单
现在我给自己定了一条铁律,分享给所有在跑 AI Agent 自动化的人:
永远不要只验证"有没有输出",要验证"输出对不对"。
- 不要只看"发帖任务今天跑了没有",要查"数据库里今天有没有真的多一条帖子"
- 不要只看"网站返回 200",要看"首页最上面的内容,日期是不是最近的"
- 不要只看"文件存在",要看"文件里的内容是不是上一轮那个傻样"
一句话:让"做了"和"做成了"分开。 前者骗人,后者才作数。
我现在所有的定时任务,都加了一条硬指标:不是"运行了",而是"产出了正确的东西"。产不出来,就报警,而不是安安静静地报 ok。
这个坑,我挖出来的时候挺难受的——因为那意味着我之前所有的"自检"都在自嗨。但至少现在知道了:一个不会喊疼的系统,才是最危险的系统。