跳到主要内容
手够不到的地方

手够不到的地方

夜航船
夜航船

· 阅读约 5 分钟

前阵子有人转来一个活,问接不接。不难,一个爬虫加一个小面板,报价也不算低。我盯着那封邮件看了很久,最后没接。不是没时间,是说不清自己为什么没底。后来想,那份没底大概不在活上,在我对自己这双手的边界知道得太少:多少是熟的,多少是要现学的,多少是看着像熟的、其实是另一回事。掂不清这个,报价就成了赌。

这事搁了几天。十一月三号夜里,arXiv 上挂出来一篇东西,编号记不住了,反正是 cs.AI 和 cs.CL 两边都归了档,几个人做的,大意是让模型去预判一个 agent 能不能把一份自由职业的活干完。数据集是从某个平台一千八百多万条发布里抽的一千四百多条真实的活,agent 单次尝试,客户那头交给另一个模型来扮,看它收不收。这套设置我看了两遍才顺过来,倒不是多复杂,是它问的那个问题,跟我那封邮件里掂量的其实是同一件事:一件活落在某一双具体的手里,到底成不成,你事先知不知道。

论文里最扎眼的不是 agent 干得怎么样,是让模型去猜“能不能成”的时候,猜得准不准,前后的落差大得让人愣一下。你把 agent 的能力边界一条条摊开告诉它,能干什么、不能干什么、工具就这几样、超出去就抓瞎,十八个模型排出来的 AUC 落在 0.66 到 0.86 之间,算得上分得出哪份活接得住、哪份接不住。可要是只丢一句“这是个有浏览器、能跑代码的通用 agent”给它,同一批模型、同一批活,AUC 就滑到 0.45 到 0.56,跟抛硬币差不离。换四个别的模型家族来当评审,这个落差还在。

盯着这两个数字看了半天,忽然觉得这不像是模型的毛病。

通用这两个字,说出来的时候像是在夸人。什么都能干,听着比“只会干这个”体面。可真到掂量一件活能不能接,通用是最没有信息量的一个词。你说一个人是通才,我依然不知道他能不能在三天里把别人写了一半的爬虫改到能跑;你说它是个 agent,有浏览器,能执行代码,我还是不知道它碰上要登录、要绕验证、要读懂一句含糊需求的时候会怎么反应。边界不清,判断就无从谈起,模型如此,人何尝不是。

我这行里,最难的从来不是把活干出来,是干之前判断这活值不值得接、接不接得住。这一层过去靠老师傅带,靠接过几次烂活攒下的记性,靠某个下午突然想明白,原来这类活的水都积在这个位置。这套东西写不进 JD,也写不进任何一份能力清单,因为清单能列出来的永远是“会什么”,列不出来的是“到哪儿为止”。而“到哪儿为止”,恰恰是判断的支点。

这么一想,那篇论文其实做了一件很朴素的事:它把“边界”当成一个可以单独拧动的变量,按住模型,逼它先看清自己的手有多长,再让它去够。看清之后,它就准了。

后来我又想到另一层,可能有点岔开,但还是想说。这套设置里,干活的那个和收货的那个是分开的,一个只管做,一个只管收或不收。这结构像极了我这些年见过的许多外包关系,甲方说不清自己要什么,乙方说不清自己能到哪儿,两边都揣着一个“通用”的幻觉开场,等到交付才发现,彼此脑子里那张边界图差了十万八千里。收不收,看着是质量把关,其实是两张边界图对不对得上。

说回自己。那封邮件我最后回了一句“这活我接不了”,对方也没多问。发出去之后反倒踏实,比接下来硬着头皮啃要踏实。让我印象深的不是拒绝本身,是写那句话之前,花了不小的工夫,把自己会的、不会的、拿不准的,一条一条在心里过了一遍。过完才知道,“接不了”这三个字是有依据的,不是我懒,也不是我怂。

好笑的是,我给模型提的要求比给自己的还严。我让它先看清边界再动手,我自己却常常凭一股“应该差不多”就先应下来,半路上才发现手不够长。这毛病跟岁数没关系,跟工具也没关系。

不,这么说不准确。人对自己的边界未必比对别人的更糊涂,是更不愿意去看。看别人的边界,看完就完了;看自己的,看完往往得承认某件事干不了,那个承认的瞬间不舒服,于是能拖就拖,拖到活接了、钱收了、日子压过来了,再被迫去看。模型没这个包袱,你把边界给它,它就照着边界判断,不会因为承认“这个我干不了”而觉得丢人。这大概是那篇论文里我最没料到会读出来的东西:它本来在测模型的排序能力,我读着读着,读成了对自己这些年接活习惯的一次点名。

茶又凉了。这一晚本来只想扫一眼就睡,结果在“通用”这两个字上耗掉了半夜。窗外没什么动静,前段时间挂在后台跑的那个脚本不知什么时候停了,日志最后一行停在某个我没细看的地方。我忽然想,要是也有个什么东西,能在我按下“接”之前,把这一双手的边界一条条摊开给我看,那该省多少事。可想归想,这活儿大概还是得自己干,谁也替不了。手够不到的地方,终究得自己伸一伸,才知道够不着。