今天被李厂长的暴论刷屏了,在央视《对话》界面中,他称“以后不会存在程序员这种职业了,因为只要会说话,人人都会具备程序员的能力。”这一论断迅速在业界引起广泛影响,特别是程序员在过去几年里,属于高薪职业,虽然 996 严重,但是能在激烈的各个行业中获得“福报”,算是少数能快速将知识变现的途径,比起绝大多数人来说,处于食物链的上部。但是,现在厂长的话,剑指这一高薪岗位,引发了一系列震荡。虽然暴论带来的娱乐性很强,但是我们必须反思,实际上,在过去 10 年里,我发现,这些所谓的暴论,都是“社会的真相”,例如任大炮在 16 年称“年轻人现在应该买房”,马爸爸在 19 年称“年轻人有工作是福报”,某米高管称“得屌丝者得天下”,以及厂长在 23 年称“中国用户愿意用隐私换便捷”,这些暴论,听上去都像是反社会反人类,然而当时间过去几年,现在回头看,如果当时听进去,福报变暴富也不是不可能。因此,我有理由相信,此次厂长的暴论在某种程度上也应该被人们听进去。
本文试图从技术的角度,梳理这两年 LLM 成为具有颠覆性的普世化技术后,整个行业在技术路线、技术架构、技术模式上的变化,以及已经初见端倪的类编程任务(非 code 编程)对软件行业的影响。
起源:Copilot辅助写代码
2021年10月26日,GitHub Copilot 作插件在 JetBrains 市场上发布。彼时 LLM 还未被大多数人知晓。从原理上,我们理解 Copilot 的工作模式,就是利用 github 的大数据,与程序编辑器中正在编写的代码进行匹配,然后把大数据中较为匹配的部分复制给程序员,程序员通过一个 tab 键完成黏贴动作。这样,copilot 解决了程序员以前需要“搜索->挑选->复制->黏贴”的动作过程,大大节省了时间。当然,彼时很多人瞧不起“复制黏贴”模式的工作方式,行外人也因此对程序员这一身份的刻板印象越来越深。
到了 2022 年初,作为程序员圈的新产物,chatGPT 的出现并没有引起大的波澜,因为大家发现 chatGPT 给出的代码并不很好,很多无法运行起来,修改它给的代码的时间,还不如我们自己写。然而,到了 2022 年底,chatGPT 突然出圈,开始在社会各个领域被关注,并逐渐形成 AIGC 的产业。
早期形态:AIGC(Code)
AIGC 成为泛行业的热题之后,工程师们又发现,这里的 C 也可以是 Code 呀,于是 AI Generate Code 又成为开发技术领域的热点。基于 chat 的形式,Cursor 浓重发布,它通过让程序员描述自己写的代码的功能,自动生成代码。此时,从原理上,已经和 copilot 的原始方式不同。不过,随着 AIGC 成为主流模式,早期的 copilot 工具的底层也逐渐切换到生成模式。现在市面上不仅有了 code copilot,还出现了其他行业领域的 copilot,可以说是从技术开发领域向其他领域的入侵。
除了通过 chat 的模式来生成 code,还有一类叫 D2C(Design to Code),设计稿直接出代码。这类技术的路线也经历了和 copilot 类似的过程,最早是通过各家自己的算法来对设计稿进行数据设计稿文件格式的 tansform,得到 code。之后他们发现,直接把设计稿作为图片丢给训练好的机器学习模型,也能得到用来转化为 code 的中间产物。再到 AIGC 的时代,这下更先进了,不需要精细的设计稿,只需要通过文本描述,就可以生成对应的代码,或者通过文本描述 + 图形调整来获得设计稿,再到 code。
应用开发:LangChain框架
单纯写功能代码,或者通过设计稿输出静态代码,已经无法满足开发者们对 AI 的设想了,2023 年中开始,开发界已经将“让 AI 自动帮我完成需求”作为终极目标了。此时,他们已经再不断想,怎么让 chatGPT 直接给我写出满足需求的代码成品,甚至直接生成软件,而不是只是作为一个 copilot,或者作为一个模型得到 code 而已。在一番疯狂的折腾后,类似 AutoGPT、AutoDev 等项目上线,它们把 chatGPT 作为智能大脑和代码生成工具,用大脑去分析理解需求、拆解任务、设计测试或验证方案,再让它按照这些内容去生成 code,于是,自动编程实现了。
在这过程中,出现了 LangChain 框架,它是较早从 AI 编程的角度去设计和实现的框架。利用这类框架,开发者们不去写具体实现需求的代码,而是写调度和调优代码,用这些代码去驱动 AI 来生成实现需求的代码。这个感觉就像,产品经理说“我要吃鱼”,程序员不是去捕鱼,而是教会机器人捕渔技能,让机器人去抓鱼给产品经理吃。当然,这个过程中其实会有偏差,产品经理可能需要的是鲤鱼,结果机器人抓了一条草鱼回来,这样的可能性就目前来看还是比较大。不过,好在,通过调优,程序员可以让机器人自己检查一下抓到的鱼是不是符合要求。
从“写需求功能代码”转变为“写生成符合需求代码的代码”,程序员的身份在这其中发生了转变。好在,此时,抓草鱼的可能性还很大,所以写需求的程序员失业的危机感还是比较小的,如果这种可能性可以在不久的将来被消除,那么,一个公司往往只需要几个可以维护生成系统的程序员,就足够应对了。
范式转变:无算法编程
我想起以前的一个项目,要求我们开发一个系统,让工作人员在这个系统中,摘抄合同文件里面的关键内容。这个需求本身很重要,但是这个开发方式却很搞笑。开发需要设计存储、数据结构、字段、表单、生成 PDF 预览文件、两份不同期合同的 diff、文件打水印、根据条件筛选查找等等功能,这样想想,作为普通开发者,是不是很脑壳疼?然而,2024 年的今天,一切都变了。这里面很多东西都可以被改变,首先是请大量工作人员对合同里面的关键内容进行摘抄这件事,现在根本就不需要人来去做,我们将所有的合同文件作为知识库丢给大模型,然后让大模型从中提取出我们需要的关键内容,并且按照 table 或 JSON 格式返回,根本不需要由人来进行阅读和摘抄,那么,表单设计和开发等一系列的工作都可以不需要了。同样,PDF 文件的生成,也可以借住大模型生成 PDF 原料,再由 PDF 生成工具去生成。总之,这个需求当初我们做了很久,如今来看确实是很搞笑的。
这个例子只是无限的编程工作中的一个渺小的例子,以前我们需要自己去训练一个模型,来去从文本中提取内容,或者写一个非常牛X的算法来消除图片中的杂质,等等工作,如今,都可以借住大模型或 openai 的生态模型快速完成。甚至现在连视频都可以由 sora 来生成。我们过去编程界应以为傲的算法,需要花数月时间来挑选数据集并进行训练(而且还只是为了解决一个业务场景),如今全都不需要,大模型可以帮我们做算法。你还不理解?我举个例子,我们以前需要自己写一个编译器来解释我们发明的 DSL,用户使用 DSL 具有严格的语法;现在,我们不需要自己写编译器就可以解释 DSL,而且用户不需要严格的语法,只要意思差不多,就可以解释为我们需要的 AST。所以,除了必要的场景下,我们现在可以完全丢弃以前一些常见的算法了。
当然,这里我们是用算力换算法,以前算法的另外一个目标是提升性能,如果都采用新的模式,那么性能这块肯定还是会被质疑。
工程化:AutoGen框架
我关注了一位牛X大佬 phodal,他从 2023 年开始研究 AI Dev 领域的内容。从阅读他发表的文章中,我能明显感受到这个领域的一步一步发展,可以说现在,通过 AI 来实现业务需求的工程化已经完全可行了。
我们来举例一个场景:
老板下发紧急通知:甲方要求我们在3天内拿出2套方案。经理接受命令后找各位总监开会,对任务进行大致划分,并安排总监分工。总监回来又把自己的内容分派给各个组长,要求组长在1天内给出自己负责的任务的设计方案。组长回来找到自己最得力的干将,要求不同岗位的人通力协作,A 在什么 deadline 给稿,B 在什么 deadline 审稿,C 在什么 deadline 给出评估,最终在什么 deadline 要汇总为最终的方案文档往上交。
你看,这么熟悉的一个场景中,不同的人有各自的角色,抛开办公室勾心斗角的因素,大家在自己的岗位上通力协作,完成项目,为了争取在划定的 deadline 前完成,加班加点,甚至通宵。
可是,写文案,不是 chatGPT 的强项吗?来,给不同的 AI 安排上角色,AI1 作为文案,AI2 作为审稿,AI3 作为评估,AI4 作为汇总,大家协调起来,开始工作。这些 AI 我们统称为 Agent,具有前提设定的一个 AI 应用。通过特定关键词的设定,我们可以让一个 Agent 具备对应的身份和生成内容的特征,就像人物性格和职业角色的专业性一样。最后,我们需要有一个东西可以把这些 Agent 的工作调度起来。我们用文本这样写下:
@AI1 从网上抓取过去三年甲方的全部营销信息,并汇总做成简报。 @AI2 以该简报作为背景信息,撰写有关xxx的销售方案,方案内容包含大纲、章、节,并将方案发送给 @AI3 审查。@AI3 基于甲方公司的信息和本公司的资源,对文案的架构、细节程度、财务收支、法务等进行审查,并将发现的问题反馈给 @AI2,@AI2 基于审查结果对方案进行调整,再发送给 @AI2 审查。审查通过后,将方案交给 @AI3 进行评估,评估高于 70 分时发送给 @AI0,否则打回重新设计方案。@AI0 接收方案后整理为可提供给甲方的文件,并通过打印机 @printer1 进行打印,打印完成后通过 @企业微信 通知xxx。
这样一段话看上去时安排工作的描述,然而,实际上,你根本想不到,这是一段程序。这段程序丢给我们的任务系统后,会按照指令进行调用和执行,最终,我们会收到企业微信通知和一叠厚厚的方案文件。
在 AutoGen 中,不仅可以对 Agent 进行角色的定义和功能的实现,而且还可以像现实中一样,对角色进行分组、层级设定等等。当 AI 以现实中的团队进行运作时,我们需要做的,就是定义不同 Agent 的角色及其性格特征和专业领域,以及向系统提供更多的可以实现具体能力的 Agent,这样,就可以让 AI 帮助我们按照一个团队的方式完成编程工作。
时至今天,2024 年初,我们已经可以实现这样的编程,在 chatGPT 的新版本中,上线了非常多的 GPTs,这些 Agent 可以作为其中的一个角色完成我们的工作,你现在就可以按照这种思路去尝试一下。当然,由于目前这类 Agent 还是很匮乏,真正能实现的能力还有限,不过从这条路径来讲,我们甚至可以让 AI 在发现没有对应功能的时候,让它自己写一个程序来完成这个功能,这样的代码可以是 python 的,可以说是随用随生成随销毁。
结语
从本文中,你可以看到,编程的范式随着时间的推移,发生了很大的变化。程序员作为编程领域的主力军,也面临着挑战。相信在将来很长一段时间,两种范式还会共存很久,但最终还是会统一。在过去两年里,程序员们正在疯狂的寻找“把程序员干掉”的方法,它们像着了魔一般的尝试让 AI 去替代程序员的编程工作,虽然他们的梦想是解放自己的双手让自己喝着咖啡就可以领到客观的薪水,然而,很明显,发明这些开发方案的程序员们,他们的作品可不单单是自己会用,还有其他很多人,包括那些发薪水的人。当然,传统的编程还是会在一定范围内必须存在,除开纯粹的文案生成工作外,我们还需要很多其他的工具,让 AI 可以去调用,将来面向 AI 编程可能是传统编程的唯一自留地。从这个意义上讲,程序员这个职业永远不会消失,但是从普遍意义上讲,这个职业或许确实面临着前所未有的挑战吧。
2024-03-11 1070
这是wordpress网站,速度太快了吧。比单个静态页面速度还快。
可能会衍生出一个新的职业来,现在的程序员就像是甲方和QA,而 AIGC 就是乙方。
可能QA的角色也会被替代掉,因为AI可以自己写用例自己跑用例自己debug。我们只需要提供编程思路,坐收结果并验证即可。