彩虹渐变标题
此文所述,或有虚构之处,然文中之情与事,皆非无中生有。至于文中友人,亦非实指一人,而是取身边数位朋友的言行,合而为一罢了。
一日午后,友人传来讯息,言简意赅:「快来看看我的网站!」语末附一链接。 我素知他专攻物理,与公式数据为伍,于程序设计一道,则不免有些生疏。点开一看,一道长虹赫然映于眼前,自赤至紫,色相俱全,底下是「量子物理研究组」六个黑体大字。其光灿烂,颇有破屏而出的气势。
「AI 写的,」他颇为得意,「是不是很炫?」
我望着那足有一千八百行的代码文件,不禁默然。在某个理想世界里,或许将所有代码归于一处确是某种高明的章法。但在我们这个世界,这通常被称作一团乱麻。
说来话长。他们研究室里有一份祖传的代码,不知是哪位前辈的手笔,变量之名,如 XX1、XXX 之类,神秘莫测。谁也不知其所以然,只晓得稍动一个数字,结果便会大相径庭。友人是所里唯一还在维护这份代码的人——说得确切些,是唯一敢碰它的人。
他曾求助于 AI。「它说,这或许是某种改良过的 TEBD 算法。」
「或许?」我问。
「我又让另一个 AI 用 Python 重写,结果慢了十倍。」
于是他只好继续用着那份谁也看不懂的旧物,偶尔对着 AI 的解释凝神,那神情,宛如考古学家端详着象形文字,猜测古人的用心。
我们二人对待 AI 的方式,可说是截然不同。他放手让 AI 施为,像是给了一位热心的助手无限的权力。我则不然,我像一个偏执的乐团指挥,唯恐哪个音符出了差错。
他会说:「写一个计算物理场分布的函数。」然后便静待奇迹,看着 AI 洋洋洒洒,从读取文件到三维成像,一应俱全,无不周到。
我的指令却是这般模样:「给定参数fields,其类型为Array<PhysicsField>,返回DistributionMap类型。只需函数体,勿写声明,勿加注释,亦不必处置错误。」
我的终端之上,出现最多的并非代码,而是一行行红字:
⎿ Interrupted by user我按下 ESC 键的频率之高,键帽日久,已有些松动了。AI 刚要热心地替我规划整个项目,我便打断它;AI 想要体贴地补上几行错误处理,我又是一按。
友人见我如此,颇为不解:「你为何总是不让它说完?」
「它做了分外之事。」我答。
「可它是在帮你。」
「这种帮助,我尚不需要。」
这份差异,也体现在我们各自的流程上。他简单明了:有了想法,告知 AI,静候佳音。AI 说用 Three.js,他便用 Three.js;AI 建议三种向量数据库,他便装上三种。他对 AI 的信赖,犹如信赖物理定律一般。
我的流程则要繁琐得多。先要与 AI「讨论」一个钟点,反复诘问它的每个设计:「为何用此方案?」「有无更简练之法?」「是否过于复杂?」讨论之后,我还要再花一个钟点修改 AI 生成的文档,删去一切我认为冗余之处。真正动手写代码时,我用 AI 最多的,反倒是自动补全注释——这大概是我唯一能全然信它的地方。
后来,他的导师交予他一件新任务:建一个网站,展示研究成果。「要现代化一些,」导师说,「最好能接上大语言模型,让访客可以直接提问。」
我自然是要帮忙的。「用 React 吧,」我建议,「TypeScript、Next.js、Tailwind CSS,这些都是 AI 最熟悉的。」我庆幸自己未曾推荐我惯用的那套冷僻工具,AI 对那些东西所知甚少,每每退回到最原始的办法上去。
一月之后,他把代码发了过来。
第一个文件,一千八百行。我原以为这便是全部,他却说:「这只是其中一个组件,主文件有三千多行。」
那一刻,沉默是今晚的康桥。
在他的代码里,我看到了 AI 的另一面。每一个难题,AI 都给出了对策;每一个对策,都平添了数百行代码。日子一久,代码便如霉菌一般滋长。他用了三个向量数据库,并非真有需要,而是因为「AI 建议都试试」。他甚至搭建了一整套 RAG 管道,却不知 RAG 为何物。
若此事由我来办,大概会先花三天与 AI 争辩究竟是否需要向量数据库,再花一周逐行审阅生成的代码,删去所有不必要的枝节。结果或许是一个清爽的系统,过程却不免如西西弗斯推石,永无止境。
「chunk_size 该设多少?」他问我。
稍顿,又问:「什么是 chunk?」
我想起我早年上过的一门复杂网络理论课程,被迫使用某名校研究室写的 Python 2 旧包,在二〇二三年还要费心去维护 Python 2.7 的环境。说到底,我们都在与不属于自己领域的工具苦斗,承受着相似的折磨。只是他选择了信任,而我选择了控制。
但他似乎乐在其中。每当 AI 生成新的花样,他都兴致勃勃地拿来给我看。那些过于鲜亮的配色,永不对齐的文字,此起彼伏的动画,在他眼中,皆是「现代化」的体现。在我看来,却是一场视觉上的灾难。
我曾试着向他演示我的做法。我们并肩而坐,我打开终端,输入一段精心设计的指令。AI 开始应答,我即刻按下 ESC。再试,再按。第三次,依然是 ESC。
「你到底想要什么?」他终于看不下去。
「我想要它只做我让它做的事。」
「可你什么都没让它做完。」
「因为它总是做多余的事。」
他望着我,神情之困惑,一如我望着他那三千行的组件。
「试试 shadcn/ui 吧,」我近乎央求,「求你别再让 AI 写下去了。」
「可是看起来好素净,」他答,「能不能加点颜色?」
一周后,他果真给那些素净的 shadcn 组件,加上了渐变色。
这或许便是我们这一代研究者的宿命。我们并非科班出身的程序员,却要在各自的领域里与代码周旋。他用 AI,如同一场即兴演奏,有惊喜亦有意外;我用 AI,则像一场精密实验,每个变量都需严加看管。他的代码是一座巴别塔,宏伟却根基不稳;我的代码是一架精密仪器,高效却少了些意趣。
最后,那个网站还是上线了。标题依旧是那道长虹,只是字体换了。页面能正常显示数据,访客也能向 AI 提问,尽管回答常常是整段论文的照搬。教授阅后,颇为满意,誉为「很有科技感」。
而我,还在与 AI 较劲。昨日我花了两个钟头,只为让它正确地使用 fd 而非 find。「我明明在指令里写得清楚,」我对着屏幕自语,手指又悬在了 ESC 键上。
夜深人静,我们仍会在通讯软件上交换彼此的烦恼。他发来新的代码截图,我已学会了先做一次深呼吸。我抱怨 AI 又忘了我的规矩,他便说:「让它自由发挥试试?」
「不行,」我答得坚决,「那就会变成你的三千行组件。」
「三千行又如何?能用就行。」
「能用与能维护,是两码事。」
「反正也没人维护。」
此言一出,我竟无词以对。
在这 AI 能写代码的时代,人各有其法。他的方式或许失之于放任,我的方式或许失之于苛求,但这又有什么要紧呢?我们都做完了各自的研究,都让导师称心,也都在深夜里对着屏幕发愁。
在某个理想天地里,或许真有运用 AI 的完美法门。然在此俗世,你我所拥有的,不过是那一道渐变的虹,与一个似乎永远也按不完的 ESC 键。
至于那 AI 本身,恐怕亦在暗自思量:此二人,一个随心所欲,一个百般挑剔,究竟谁更难侍候?