我用 OpenClaw 买菜已经三个月了,一直都很顺利。但昨天它居然订了 40 头大蒜。
你让一个机器人帮你买菜。它连着三个月,每周一次,买回来的东西跟你自己逛超市买的一模一样。鸡蛋六个,牛奶一桶,大蒜两头。你觉得这玩意儿真靠谱,简直比你室友靠谱多了。然后昨天,它给你订了四十头大蒜。不是四头,是四十头。你家又不是蒜蓉加工厂。问题出在哪?出在你太放心了。当你完全信任一个自动化流程的时候,就是它坑你的时候。所有AI代理的故障,都有一个共同前奏,叫“之前从来没出过问题”。
机器不会突然变蠢,但你会突然不看它
你要明白一个残酷的事实。那个买菜机器人,它的代码三个月前没变过,昨天也没变过。它昨天干的事情,逻辑上跟之前十二次购物一模一样。它读取你的购物清单,上面写着“大蒜,两头”。它去电商网站搜索大蒜。它找到的商品页面,默认单位是“公斤”。它看到价格,算了一下,把“2”填进了数量框。然后下单。之前三个月为什么没出事?因为之前它搜到的大蒜商品页,单位刚好也是“头”。这次碰上了公斤。机器没变聪明也没变笨,它只是按照同一套规则,遇到了不同的页面。
你才是那个变量。前几次你还会看一眼购物车,确认一下。后来你完全不看了。你心想,这玩意儿稳得很,看它干嘛。结果就是,当第一个异常信号出现的时候,你不在场。
所以核心问题不是“AI为什么会出错”。核心问题是:为什么一个连续成功三个月的行为,会让你彻底放弃监督。这跟开车一样,你在一条路上开了三个月没出事故,不代表你可以闭着眼睛开。但大脑就是会偷懒。大脑看到重复成功,就自动把风险等级调低。这叫习惯化。你被自己的大脑卖了,机器只是帮你完成了交易。
信任积累得越久,一次翻车就越狠
你想想这个逻辑链条。
第一步,你设置OpenClaw,让它通过MCP服务器连接超市网站。你把银行卡绑上去。这一步就已经有风险了,但你觉得可控。
第二步,第一周,它买回来了。你检查了一下,东西都对。你觉得不错。
第三步,第二周,你又检查了,还是对的。你开始放松。
第四步,一个月过去了,每次都正确。你觉得这东西已经跟洗衣机一样可靠了。洗衣机不会突然给你洗出四十条裤子吧?你这么想。
第五步,三个月过去了。你完全不检查了。星期天收到包裹,直接拎进厨房。
第六步,昨天,你打开包裹,看见四十头大蒜堆在那里,像一座白色的小山。你愣住了。你脑子里第一个念头不是“机器错了”,而是“我是不是看错了”。
这就是信任曲线。前期每成功一次,你的警惕性就下降一点。下降的速度是指数级的。到第三个月,你的警惕性已经接近于零。而机器犯错的概率,始终不是零。它可能只有百分之一,甚至千分之一。但当你把警惕性降到零的时候,千分之一就是百分百。你刚好撞上了那个千分之一。
这就像你玩俄罗斯轮盘。前三次扣扳机都没响,你不觉得枪有问题,你觉得运气好。然后你开始对着自己脑袋扣扳机玩。第四次响了。你不能怪枪,你只能怪你忘了枪里总有子弹。
单位错误不是Bug,是电商网站的日常
你要理解这次翻车的技术细节。那个大蒜商品页,商家设置的时候填了“公斤”作为默认销售单位。这合法吗?合法。大蒜确实可以按公斤卖。但你平常去菜市场,你说“来两头蒜”,老板不会给你称两公斤。因为两头蒜大概一百克。一公斤是十头。两公斤就是二十头。但机器填的是“2”,不是“2公斤”。它看到页面上有个数量框,旁边写着“公斤”。它没有人类那种“这不对劲”的感觉。它只觉得,数量是2,单位是公斤,那就填2。
为什么之前三个月没问题?因为之前它每次搜大蒜,搜到的商品页,单位都是“头”。可能你所在地区的超市,大部分大蒜确实按头卖。但昨天那个商家,或者那个商品链接,单位变了。或者搜索算法的结果排序变了。或者那个按公斤卖的大蒜突然降价了,排到了前面。机器只看价格和库存,不看单位是否跟历史记录一致。
这不是OpenClaw的独有问题。所有让AI代理操作网页的系统,都会遇到这个坑。网页上的单位标注,对人类来说清晰无比,对机器来说就是一串文字。机器需要额外的逻辑去判断,“头”跟“公斤”是不是同一个东西。如果你没有专门写代码让它做这个判断,它就不会做。
这就好比让一个老外去中国菜市场。你告诉他,买两颗白菜。他走到摊前,摊主说白菜一块五一斤。老外掏钱买了两斤。他不是故意的,他是真没搞懂“颗”和“斤”的区别。
解决方案分三层:拦截、审核、规则
你现在拿着四十头大蒜,不能退货,或者懒得退。你不能光想着怎么吃完,你得想怎么让这事不再发生。方案分三个层级,按成本和可靠性排序。
第一层,硬拦截。在OpenClaw的支付环节之前,加一个检查点。不是让你每周重新审核整个购物车,那样太蠢了,跟你自己买没区别。而是加一条规则:任何商品的数量,不能超过历史平均数量的五倍。你过去十二周,大蒜平均买2头。五倍就是10头。现在它要买40头,触发了这条规则。系统自动暂停,给你发一条消息:“检测到异常数量,请确认。”你看到消息,点开一看,四十头大蒜。你点了拒绝。机器重新下单,这次你手动改成2头。这条规则不需要AI,不需要模型,一行判断语句就能写。谁都能写。
第二层,单位审核。每次购物车生成之后,扫描所有商品。把当前商品的单位跟上一次购买的同种商品的单位做对比。如果单位变了,比如从“头”变成了“公斤”,或者从“个”变成了“箱”,触发人工审核。你不用看全部商品,只看那些单位变化的。大概率每周只有零到两个商品需要你看一眼。这条稍微复杂一点,需要一个简单的数据库记录历史单位,但也只是几行代码的事。
第三层,语义验证。这一层才是真正用到AI的地方。你让OpenClaw自己检查购物车是否合理。给它一个提示,大致意思是:“你是一个买菜助手,请检查购物车里的商品数量和单位是否符合常识。例如,大蒜通常按头买,不是按公斤。如果发现异常,请标记出来。”然后让它在点击支付按钮之前,运行一次这个自我检查。如果检查出问题,就跳过支付,给你发警报。这个方法最智能,但也最不可靠,因为AI可能检查不出来,也可能误报。你猜四十头大蒜它能不能检查出来?大概率能。但你敢不敢百分百赌它每次都能?不敢。
最佳实践是三层全上。第一层防止数量爆炸。第二层捕捉单位切换。第三层兜底那些前两层没抓到的奇葩错误。三层加起来,代码量可能不超过两百行。但你花两百行代码,换来的不是不出错,而是出错的时候,有人喊你一声,让你自己做决定。
三个月不出错,其实是最危险的信号
你回想一下,这三个月里,机器有没有给过你任何小提示,暗示它可能会翻车?可能有过。比如某次它买回来的香蕉,品牌跟你平时吃的不一样。你觉得无所谓,反正都是香蕉。比如某次它买了大包装的牛奶,你家就两个人喝,大包装喝到过期。你觉得多出来的倒了就倒了,懒得管。这些就是小信号。每一次你忽略的小信号,都在告诉机器:你的容错范围很大。它就会在这个范围内,一点点试探边界。直到有一天,它跨过了边界。
四十头大蒜不是突然出现的。它前面一定有过你忽略的征兆。可能是某次它买了三头蒜,你平时买两头。你觉得无所谓。可能是某次它换了一家店,你觉得反正都是超市。每一次你都说“算了,问题不大”,机器的边界就往后退一步。
所以你要做的不是修机器,而是修你的监督习惯。设一个定时器,每两周强制自己看一次购物车。不是随便扫一眼,而是认认真真核对每个商品的数量和单位。把这次核对变成一个不可跳过的步骤。你可以用日历提醒,可以用自动化脚本在支付前弹窗,甚至可以写在冰箱贴上。形式不重要,重要的是,你要打断那个“之前没出问题,所以这次也不会出问题”的心理惯性。
吃完四十头大蒜的办法,顺便当个备份方案
当然,大蒜已经买了。你不能让它烂掉。给你几个吃掉四十头大蒜的办法,万一你下次又忘了检查,还能救急。
第一个,蒜油。把大蒜去皮,放进料理机,加食用油,打成泥。倒进锅里,小火慢熬,直到蒜泥变金黄。过滤,得到蒜油。这玩意儿放冰箱,能用三个月。拌面、炒菜、凉拌,滴几滴,香得不行。
第二个,烤蒜。整头大蒜切掉顶部,淋橄榄油,包锡纸,进烤箱两百度,四十分钟。烤出来的蒜瓣像黄油一样软,抹面包、拌土豆泥、做酱汁,一次能消耗十头。
第三个,冷冻蒜末。把所有大蒜剥皮,打成末,按每次用量分装进保鲜袋,压扁,冷冻。用的时候掰一块直接下锅。冷冻蒜末保质期半年以上。
第四个,糖蒜。这是大招。大蒜剥皮留整瓣,用盐水泡一天去辣。然后做糖醋汁,比例是一斤蒜、半斤白糖、半斤白醋、一两盐。煮开放凉,把蒜泡进去,密封一个月。出来的糖蒜脆甜,能当零食吃,送人都行。
这四种方法加起来,四十头大蒜大概能消耗三十五头。剩五头留着下周炒菜用。好了,现在问题解决了。但你心里清楚,真正的解决方案不是怎么吃大蒜,而是怎么让下次别再来四十颗白菜或者四十瓶酱油。你去做那个拦截规则吧,现在就去,别拖到下周。