AI 时代的自我
自从 GPT3 腾空出世以来已经过了快三年了,大家对 GPT3 这些 LLM 的态度也产生了变化:它什么都做不了、它好像能做好一些事情、它要取代我了、它不是什么都能做好。
这十分符合技术成熟度曲线,我想我们,或者说我,已经到达了第四个阶段,对于 LLM 的态度和看法也发生了些微的变化。
作为一个程序员、工程师,我的作品和工程对我而言意义丰厚:它是我的经验结晶,我的心智模型的具象化,是我对这个任务抽象后又具象化的结果。而 LLM 正在尝试取代我:它有着人类几乎所有电子化记录下来的经验、知识,它的水平远超于我,而我还依然坚持着我自己写代码,只是利用 LLM 作为帮手、知识库。这和当前的潮流背道而驰:我没有将 LLM 纳入我的工作流,它只是个旁观者。
但它没有取代我,并且在长远的未来也取代不了我。
在这里我无意讨论技术问题,但要知道一个基础概念:运算资源不是无限的,而计算机的运作很大程度是基于很多个"假如"来运行:
- 假如这个东西会在多久后被替代:UNIX 时间戳,新千年虫问题
- 假如进程不会超过多少个:Linux 内核进程管理从位图更换为基树
我作为一个工程师需要长期学习,不断的学习建模方式,强化我对工程的理解,最终我对工程的理解、对世界的构建会成为我的常识,成为我无意识就能做到的事情。但 LLM 做不到,我们传递给 LLM 的心智模型只会是一些碎片。莫拉维克悖论告诉我们,计算机模拟人类所独有的高阶智慧不需要很多的资源即可完成计算,但模拟人类无意识做出的行为反而需要巨大的算力。
这正好说明了一个现象:我在创造新模式的时候只需要花费大量的时间,因为需要总结我之前的经验,但 LLM 在这方面并不需要太多时间,他们有十足丰厚的知识来做到这点;但在维护已有模式时 LLM 反而表现得不如人类,即使 LLM 的知识水平可以说远超过人类。不如人类不是说 LLM 的质量不如人类,而是说在同一个质量的情况下和 LLM 合作完成一件事所花费的时间是大于熟练的人类工程师,因为熟练的人类工程师在无意识的情况下完成了诸多的工作,这是非常快速且无意识的
这和我在开源社区积累下来的感受也相符合:优质的 PR 往往小而完整,他运作在已经构建好的框架之上,符合我们当初建立的心智模型。我的导师经常提示我我应该将一个 PR 拆分成为多个 PR,这样每次提交 PR 导师们都能轻轻松松的审查这些新增的代码,使其符合项目的心智模型。并且在这个过程中我也会加深对于项目的理解,将实际构建出来的项目转换成为我对于工程的理解,并且建立属于我自己的心智模型。
但 Vibe Coding 的出现打乱了这个良好的循环:我可以说大多数通过 Vibe Coding 得到的 PR 并不符合这个良好的循环模式。为什么?
为什么 Vibe Coding 打破了建立心智模型的良好的循环模式?
在提交 PR 之前需要对项目有一定程度的了解,即使这个了解是错误的。这和培养人才、工程师的线路是一致的,需要他们对于项目有一定的了解。但 Vibe Coding,或者说依赖 LLM 来做这件事很显然是一种"偷懒"。
当有开发能力的用户萌发出一个想法,或者他觉得他有能力解决一个开源软件的缺陷、有能力贡献出一个新功能,那么他就必须阅读相关的代码。当今 LLM 可以代替他做到这一点,替他完成阅读并且修补缺陷、实现新功能
然后压力就来到我们维护者身上了:我们需要知道这些代码到底是不是符合我们的、项目的心智模型。想象一下,一个 PR 出色的完成了他所述的任务,但你仔细看代码,你发现了不少代码晦涩难懂,于是你作为维护者需要询问贡献者这些代码为什么、能不能有更好的写法,但贡献者贴上来一段 LLM 生成的解释,此时你是什么想法?
好的结果,就是你这些代码你理解了并且有能力改写出更简单的代码,这些代码符合了工程的模型。
坏结果,这些代码依然晦涩难懂,并且提交代码的贡献者再也没有了回信,PR 进入了 miss-assignment 状态。
很遗憾的是,在当前 LLM 或者说 Vibe Coding 的水平之下,后者是常态。
在阅读他人博客的时候,有幸读到一篇十分有价值的论文,Programming as Theory Building
programming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand
正确的编程应当被视为一种活动,通过它,程序员形成或获得对所处理问题的某种洞察、一种理论。
我想这是大多数程序员、学生都应该要有的一种基础意识。Vibe Coding 的出现打破了这个健康的循环模式,甚至使得不少程序员也失去了这个基础意识。
但事情并不是绝对的:开源项目可以看作是我自己的一亩三分地,我愿意花费巨量的心血去维护;但我还有工作,而工作只在乎我的产出,因此需要我提高效率。
回到我刚刚提到的一点,工程师在接手一个项目的时候很难快速建立正确的完整的心智模型,但是在 LLM 的帮助下却能快速建立一个简单的、大概正确的心智模型:通过询问 LLM 的方式了解这一部分代码的工作,在单元测试和回归测试中验证对这部分代码的修改是否正确。
在互联网上,Vibe Coding 只是 LLM 开始大规模应用的一种表现,而有趣的是,还有另外一种表现。
"@grok, check fact."
在推特的一些消息类型、历史讲解的一些帖子之下我们经常能看到有人向 Grok 查询事实,我觉得这是一个很有趣的现象:这样和 Vibe Coding 本质是一件事,只是不 coding 而已。
让 Grok 来搜索数据,整合数据,然后告诉用户结论,这何尝不也是一种 vibe?
LLM 有提高我的效率吗?
毋庸置疑地讲,要分开来讨论:
- 是否是我熟悉的领域?
- LLM 是否在这方面有十分丰厚的知识积累?
- LLM 的知识是否过时
很多时候我是在我熟悉的领域工作,这样的时候在编写代码和设计时几乎是无意识的行为,我会利用我熟悉地再熟悉不过的方式来进行建模和编写代码。
但如果我在这个时候插入 Vibe Coding 环节,我需要花费大量的时间去查看 LLM 写出的代码是否正确;但我对我自己亲手编写的代码有充分自信他几乎是正确的——只要能通过单元测试和回归测试。
我现在还在做系统方面的开发,维护着 uutils 之下的 procps,在这个领域 LLM 没有帮助我太多忙,即使是我不熟悉的领域。
为什么?因为 LLM 在这方面的知识积累并不多,即使 procps 的命令基本上已经存在了二十年左右了,但 LLM 对这些命令还是知之甚少,而且还会因为幻觉问题开始考虑奇奇怪怪的边角情况,这些情况很难说能遇到,而我们向来是将这些情况等测试集不通过或者用户汇报有问题的时候再开始调查——这也不符合我们建立心智模型的路径。
换句话来讲,我接触的领域是:
- LLM 知识过时
- LLM 并没有积累太多知识
的领域,所以很难说得上 LLM 在这些事情上有提高我的效率。
所以应该不使用 LLM?
不,这不是我的结论。实际上,我也会利用 LLM 在编程方面帮助我:
- 帮我编写
FFmpeg
命令行 - 帮我理解函数的作用
- 帮我确认注释是否易懂
在这些小方面,LLM 做得十分出色。甚至于在编程之外,我也会利用 LLM 来帮我一些忙:
- 一篇论文给 LLM,使其帮我提炼大纲
- 看不懂的算法让他解释
但如果我真的想完全理解一个东西的时候,我会选择关闭 LLM。
一个很形象的例子:如果我要去往一个地方,我骑着电瓶车肯定比我骑着自行车更加快速。但如果我其实只想通过骑自行车锻炼自己,那么我骑电瓶车对我有什么好处吗?当然没有。
所以我认为,LLM 对于快速探索某个话题,并且更快完成任务方面,他们绝对是无二的好帮手。而如果你想真正的掌握一项技能,你更需要的是去积累丰厚的经验,而不是去找一个捷径——相信我,在长期依赖 LLM 之后一旦你失去了 LLM ,你会变得一无所知。
那如果利用 LLM 抹平学习路上的所有困难呢?我觉得利用 LLM 抹平路上的一些边角上的困难是可以的,因为在解决这些困难的路上很难说得上学到对我们有使用价值的知识。但如果完全抹平我认为这或许不是一件好事。
人类在解决困难的路途中会不断积累经验,这些经验能构筑独一无二的你我,成为我们成长路上最宝贵的部分。但...如果让 LLM 替代我们做这件事,或许我们会感到大脑光滑十分爽快,在结束后我们如果回顾路途会感到一无所知和空虚:因为困难全部被 LLM 解决了,我们几乎没有参与这件事本身。
但 LLM 还有个优点也十分明显,毕竟它叫作大语言模型。
如果你和我一样,将 LLM 作为一个帮手、教科书,你会发现 LLM 的一个巨大的优点:几乎所有的 LLM 都是有无限的耐心,他们会一直陪着我们,也几乎不会有掉线一说。我能在深夜情绪很差的时候寻找 LLM 聊天,说出我的想法;我能在周围没有人可以回答我的问题的时候向 LLM 咨询一些事情;完全不擅长社交的我在和 LLM 聊天的时候几乎感觉不到任何压力(即使我几乎很少和 LLM 闲聊)
这就是赛博生命(如果你能接受这种叫法的话,或者叫其他的类似的)的优点,我和他不在一个维度,我对他没有心理负担。
我在其他博客中看到个类似的观点:
LLM 的出现和当初的 Google 出现有十分的相似之处,在 Google 这种搜索引擎出现之前人们只能通过在图书馆中不断的查找书籍和不断的询问教师教授等方式获取资料,但 Google 出现后改变了这一点:现在人们可以在深夜在互联网上毫无顾虑地查找资料,不需要担心打扰到谁,也能节约大量的时间不再需要去图书馆。
或许一年后我对 LLM 的看法又会变了呢,毕竟离 GPT3 横空出世,到现在也不过 2 年。
谨以此文告慰此时于 LLM 时代找到"自我"的我。