水烧开了我忘了关火,等闻到那股金属味才想起来,壶底已经结了一圈白垢,用指甲刮了两下没刮动,索性就那么放着,重新灌了水坐回桌前。屏幕上那个 agent 还在安安静静地跑,进度条稳得让人有点发毛。交给它的是件小事,把散在几个文件夹里这些年的草稿按主题归归档,三行 prompt 划了个范围,我就起身去烧水了。
回来的时候它已经动过两百来个文件。
我盯着那个数字看了会儿,忽然冒出一个挺没出息的念头:要是它归错了,我怎么退回去。想了想,没有备份。上个月清硬盘的时候把那份备份删了,理由是占地方。让它归档的那些东西,其实我自己也不大会再打开,真归错了,损失也说不上多大,可那股不安还是实实在在的。
十月底 arXiv 上挂了篇东西,几个人收罗了六百九十多起有记录的事件,在三个交互阶段里归纳出十二种失败模式,还顺手记了每种失败发生时 agent 的自主程度。十二种我不打算在这儿数一遍,数出来也没多大意思,真正让我坐直的是里面一句几乎像脚注的话:用户在一次失败之后还能做什么,取决于这个 agent 在两次介入之间干了多少活,而这件事,在你把它放出去的那一刻就已经定死了。
这句冷得很。我们平时谈自主性,总把它当成一个随时能拧回来的旋钮,好像出了岔子往回拧一格就完事了。可真决定你能不能拧回来的,不是那个旋钮,是你在放它走之前留了几道门。等它已经动过两百个文件,你手里剩下的选项不是撤销,是接受,或者从头再来,而这两样都不是你当初以为自己在选的东西。
很多年前在另一条河上,我认识一个同事,写了个每晚跑的定时任务,跑了小半年没人管,直到有一天有人发现它一直在往一个早没人看的邮箱里发报表。那事最后没人当回事,笑一笑就过去了。现在想,它其实是一次很干净的示范:这个任务在两次人看它之间跑了多少个晚上,是在它被装上去的那个下午就定了的,跟它后来写得多好、机器多快,一点关系都没有。
那份清单里还有一层意思,我读的时候停了一会儿。十二种失败在低自主和高自主下都会出现,可自主一高,每种失败的样子就变了。这点我信。低自主的时候它做错一步你当场看得见,像走路踩空一级台阶,脚踝疼不疼立刻知道;高自主的时候,它是把一整件事做成了另一件事,交回来的东西完整、自洽、有目录有索引,甚至比你亲自动手还齐整,你要过很久才认出来那不是你要的那个。这种失败最难受的地方不在错,在它错得太体面,体面到你不好意思打断。
不,这么讲还是把模型摘得太干净了。模型当然决定它会不会犯这个错,手潮的模型错得多,这是明摆着的;部署的配置决定的是你什么时候知道、知道了还能做什么。这两件事我琢磨了一晚上,也未必分得那么清,可能只是给自己找个说法。
同一篇里还有一句,说现有的事故记录和那些代理基准测试,都没覆盖失败实际发生的那个交互环节。这条我认,认得很不舒服。我们量的是模型在一道道题上考了多少分,出事的地方却在“把它放出去”到“它回来”之间那段没人看着的时间里。那段时间没有分数,只有日志,而多数人,包括我,连日志都不翻。
所以我也不打算说什么把自主调低一点。调低只是把失败重新变回看得见的样子,代价是你又得自己一样一样干,那等于没往前走。我想要的是一种窄门似的东西,窄到只够你把手伸进去,在它还来得及停下的那一步按一下。这跟要不要信任 AI 是两码事,信不信都行,门得有。
把一条船送过河,本身没什么稀奇,稀奇的是船到了对岸之后,你手里还攥不攥得着一根绳子。攥不着,那不叫摆渡,那叫放生。
水又凉了,壶底那圈白垢我到现在也没刷。那个任务两个钟头前就跑完了,归档结果比我预想的整齐,甚至比我当年自己归的还像样,我没去动它。天快亮了,这个岁数还为一句“要是它错了怎么办”坐到后半夜,说起来有点可笑;可笑就可笑吧,总比哪天真出了事,才发现退回去的那条路,是别人在我出发之前就替我铺好的,强。
