2012 年 8 月 1 日早上 9 点半,美股开盘。骑士资本的一台订单路由服务器,开始往外发它根本不该发的单。它手上那些客户订单其实已经成交了,可它无从知道,于是一直发下去。
它缺的那个信息,就在骑士自己的系统里。美国证券交易委员会(SEC)查明,公司订单处理系统的另一部分「已经识别出这些母订单成交了」,只是这个信息从来没传到路由系统。
几位高管盯着公司主要的风险监控屏,看到一个账户里的持仓在疯涨。可 SEC 发现,这块屏「完全靠人盯」,没连着任何能叫停下单的东西;公司也没有任何流程,能在路由系统「自身行为异常时」让它停下来。
它跑了大约 45 分钟,让骑士亏了 4.6 亿美元。那天早上的其余经过,见案例。
会自己停的织布机
1896 年,后来丰田集团的创始人丰田佐吉,造出一台装了自动停车装置的动力织布机:纬线一断,机器自己停。丰田说,他的织布机不只是把手工活自动化了,还「把做判断的能力装进了机器本身」,次品和随之而来的浪费都省掉了。
丰田至今把这个思路当作它生产方式的两大支柱之一,叫「自働化」。丰田的日文说明特意强调,这是「带人字旁的自働化」:在自动化上加了人的智慧。出现异常时,「机器设备能发现异常、自动停下,或者操作工自己拉停线绳让产线停下」。那根绳是人的一半,也就是安灯绳。在丰田和通用汽车合办的加州 NUMMI 工厂,对工人的交代很简单:别操心产量,操心质量。
接下来这一点听着有点反常。丰田说,机器出了异常会自己停,就不必再派人守着设备;它的日文说法是,「不让人当机器的看守」。而在骑士,出事那一刻,正有高管盯着持仓。可盯着的人,和「停」之间没有连上线。
先用手做
自働化有两半:先发现不对劲,再停下来叫人。两半都得造出来。自动停机,既要有能发现问题的检测规则,也要有真正接通的停止机制。
丰田走到前一半的办法,是一个顺序:造机器之前,「先要能用手把活顺畅、正确地干下来,弄清这活里什么算异常,再把这些操作换成机器」。一线的经验、过去的事故记录、测试,也都能补充「异常长什么样」。
骑士并不是没有限额。那些多出来的成交最后落进的账户,设了 200 万美元的持仓限额,却没连上任何自动控制。骑士的某些交易策略,亏损超过限额会自己关掉;路由系统没有这样的东西。一个没有机器去执行的限额,只是一个也许有人会注意到的数字。
停下也不是结束。丰田要的是让每个异常都看得见,好去追根、不让它再来,这就轮到五个为什么了。
订面粉的表格
设想一位开面包店的老板,做了张表格:面粉库存一低,就自动下单补货。用了一年都好好的。后来供应商改了个商品名,一个公式坏了,库存那一栏每天早上都显示零。表格就每天早上订一次面粉。两周里,送来了十二车。
事后她加了一道闸。每张订单发出去之前,系统先查一遍:比平常大一倍以上的,或者一周内的第二单,先扣住,等她点头。她知道「平常」是多少,因为这些单她亲手下了六年。她还拿去年腊月那张过节的大单和一张故意重复的单试了试,确认前一张不会被误拦,后一张不会漏过去。这道闸拦得住这一类错,拦不住所有的错。
给智能体设停止条件
AI 智能体是一圈圈跑的:计划、动手、看结果、再来。Anthropic 2024 年写的智能体搭建指南说,加上停止条件「很常见(比如最多迭代多少次),好让人保持控制」,智能体也可以「在检查点或遇到阻碍时停下,等人反馈」。它的 Agent SDK 让开发者设最多跑几轮、最多花多少钱,碰到任何一条,这次运行就报错结束。文档还提醒,费用估算「可能超过这个值,要留余量」。
这种上限是一层粗糙的自働化,管的是一次运行最多能耗掉多少。一「轮」数的是调用工具的往返,不看这一轮里干了什么。正常的难活也可能顶到上限,危险的操作也可能在第一轮就发生。
所以真正要紧的检查,更像面包店那道闸。从亲手做过的经验、过去的事故和测试里,弄清「错」长什么样:一个本不该变的文件数,一个应该和输入对得上的合计,一条永远不该跑的命令。再把这些检查放在真能拦住智能体的地方,在动作生效之前,而不是写成一条让智能体自己去读的提示。SEC 对骑士的批评,正好给了个起点:把从系统出去的,和进来的对一对。
丰田佐吉的织布机从没学会接线头。它只会停下来,等一个会接的人。