ARTICLE · 1089997
AI很能干,但你得有主意
AI用一分钟写出一段代码,很容易让人惊叹。可这段代码,也许要在一个系统里待五年。
第一分钟有多快,屏幕上看得见。以后修改一次要花多久,出现故障时能不能查清原因,接手的人要费多大力气,当时都还没有答案。
所以,“AI写得比人快”,我愿意承认。但它还没有回答我更关心的问题:这段代码到底好不好?
生成的速度,与成果的质量,需要分开评价。
最近,我又想到更往前一步的问题:我们是不是也把“能力”和“智能”,混在一起了?
人类发明的许多工具,早就在某些方面超过了人类。运输车比人力搬运强得多;照相机记录眼前景象的速度和细节,也远远超过徒手绘画。具体到这些任务,工具的优势无须争辩。
但我们不会因为起重机能吊起几十吨,就说它比人聪明。相机的记录能力,也不能替我们决定什么值得表达。
我们发明工具,本来就有一个目的:让自己做得到更多。
严格说,智能也是一种能力。为了把问题想清楚,可以暂时从两个角度观察:一个系统在给定条件下能做得多好,以及条件改变以后,它能否理解变化、学习并形成新的办法。
研究者François Chollet提出过一种智能评价框架,强调获取技能的效率,并提醒我们注意已有知识和训练经验对任务表现的影响。[1] 这给了我一个启发:已经表现出来的本领,与形成新本领的能力,值得分别考察。
两个人都能写出一个缓存,其中一个可能熟悉某种写法,另一个可能理解了它背后的取舍。只看第一版代码,差别未必明显。等到一个进程变成多个节点,允许数据过期变成必须及时更新,原先的假设开始失效,理解的深浅才可能显现出来。
同一套标准也应该用于AI。它若能识别新约束、找出旧方案失效的原因、调整设计,这些表现当然值得承认。我们没有必要把“智能”这个词专门留给人类。
但即使承认它有智能,也不能因此免除对结果的检查。聪明的工程师也会写出糟糕的代码:不了解业务,遗漏约束,或者只顾着把眼前的问题解决掉,都可能留下麻烦。
聪明、熟练、可靠,是有关联的几件事,却不能相互担保。
举一个很小的例子。
让AI给后台任务加上“失败重试”,它可能很快写出一份完整的实现:失败后等待,再试几次,记录日志,还把等待时间做成可配置项。看起来很周到。
假设这个任务负责发送邮件。邮件已经成功发出,只是成功的回执在网络中丢了。程序以为失败,又执行了一次,于是用户收到了两封相同的邮件。
重试代码可能完全按照要求运行,系统的行为却出了问题。
这里需要弄清的,是在不知道上一次是否成功的情况下,再执行一次是否安全。这个问题涉及任务的含义、外部系统的行为,以及我们愿意接受什么后果。把重试循环写得再漂亮,也不能替代这些判断。
人会漏掉它,AI也会漏掉它。评价质量时,谁写的并不能直接给出答案。
写文章也一样。语言流畅,未必有值得表达的观点;报告图表精美,论据仍可能站不住。我们得到的,首先是一份需要评价的成果。
想到这里,荀子的那句话就有了很具体的意义:
君子生非异也,善假于物也。
“生”通“性”,“假”是借助。《劝学》用车马、舟船说明,人可以借助外物到达自身力量难以到达的地方,再以此阐述学习与修养。[2]
借船过河,确实到达了对岸。这份能力是真实的,目的也已经实现了。但这段行程,并不会自动变成自己的游泳水平。
使用AI时,也会出现类似的两种增长:借助工具能够完成的事情增加了,自己能够理解和独立处理的问题也可能增加。它们可以一起发生,也可能只发生前一种。
没有必要贬低借来的能力。程序员一直在借助语言、编译器、数据库和他人的工作,没有谁从零造出自己需要的一切。会找到合适的工具,把它放在合适的位置,本来就是本领。
只是,我们需要知道能力来自哪里。哪些部分自己理解了,哪些部分依赖工具,哪些结论还需要证据。边界清楚,才知道什么时候可以放心借力,什么时候应该停下来核对。
“善假”也体现在这里。工具到了手里,还需要会用它。
而鲁迅的《拿来主义》,又把这种态度推进了一步。
他写的是文化取用,强调:
运用脑髓,放出眼光,自己来拿!
谈到如何处理拿来的东西,他又写:“他占有,挑选。”[3]
这里有一种很清醒的主动性:东西到了手里,选择权仍然在自己手里。可以使用,可以改造,也可以舍弃。接收一份东西,并不意味着必须接受它的全部。
把这种态度借用到AI上,就很有意思了。
AI生成了一套方案,其中可能有一个不错的思路,也有几层多余的抽象,还有不适合现有系统的处理方式。我们完全可以保留思路,删除多余结构,重新划分边界。
它给出一千行代码,我们可以只留一百行。它写出一篇文章,我们也可以只拿走其中一个值得继续思考的问题。
没有必要因为内容看起来完整,就维护它的完整。采用多少,应当由自己的问题决定。
过去,人可能舍不得删掉花三天写出的代码。现在,也可能舍不得删掉AI三秒钟生成的代码,因为它看上去实在太像一份完成品了。
生成得越容易,越值得认真决定什么应该留下。
对我来说,这种“拿来”的态度,可以落在三个具体动作上。
- 生成之前,把目的说清楚。
要解决什么问题,什么结果才算有用。不要在看见一大堆现成功能之后,才替它们寻找用途。 - 采用之前,找到检验依据。
代码要看边界行为,文章要核对事实,方案要检查前提。还可以让AI寻找反例,再用测试、原始资料或实际运行去验证。 - 拿到结果,继续做取舍。
留下有用的,改掉不合适的,删去增加负担的部分。工具已经花掉的力气,不应该成为我们接受结果的理由。
这也不要求人独自完成所有检查。我们可以让AI解释、质疑、比较,帮助发现自己遗漏的问题。需要关心的是,最终采用的结论有没有依据,以及那些依据经不经得起检查。
再往长远看,我还在意另一件事:用过工具之后,有没有留下一点可以带走的理解。
同样得到一段代码,一个人直接复制,另一个人经过追问和修改,弄明白了为什么这里需要限流、为什么那个异常不能忽略。两个人都得到了成果,后者还积累了下次能用上的经验。
当然,不必把每个小任务都变成一堂课。坐船的人也没有义务学习造船。但对于准备长期负责、反复依赖的事情,多理解一点,往往能让下一次使用工具时更有分寸。
拿来的东西,经过消化,才有机会变成自己的本领。
我愿意让AI帮我写代码、找思路、挑错误,也愿意承认它在某些方面比我强。这些都不妨碍我对准备采用的结果,继续追问:为什么需要它,凭什么相信它,以及条件变化时该怎样调整。
荀子说善假于物,鲁迅说运用脑髓。借力与动脑,原本就可以同时发生。
AI越来越能干,是一件好事。省下来的时间和心力,我们也可以拿一部分来弄清自己究竟想做什么,什么值得相信,什么应该舍弃。
借工具的力,也长自己的眼光。
引用与参考:
François Chollet,《On the Measure of Intelligence》,2019年。文中介绍的是作者提出的一种智能评价框架。 荀子,《劝学》。 鲁迅,《拿来主义》,1934年。本文将其中关于主动取用、辨别与选择的思想延伸到AI使用场景。