查看原文
其他

【老万】从0开始学chatGPT(六):自掘坟墓的程序员?

老万 老万故事会
2024-08-23

本文是我的 chatGPT 学习心得《从0开始学chatGPT》系列第六篇。欢迎依次阅读:


~~~~

本节提要:AI 正在成为程序员的重要工具。chatGPT 插件带来全新的生态系统。插件的逻辑用自然语言定义,其不精确性由机器自我学习解决。

忽如一夜春风来,遍地英雄下夕烟。最近这两个月人工智能技术落地之势如火如荼,每天都有大新闻。这是我一个 IT 行业从业者二十年未睹之怪现状。我承认自己已经被炸麻了,陷入了深深的错过焦虑(FOMO)。每天睡觉前忙着消化当天的新闻,第二天早上醒来一看又是一大堆新闻等着去消化。真是乱花渐欲迷人眼,按下葫芦起了瓢。

随着阅读列表越排越长,在这场和 AI 的赛跑中我已经看不到对手在哪里了。

我是程序员,所以尤其关注生成式 AI 在编程中的应用。比如,我们知道:

chadGPT 可以帮你写代码、找 bug。


微软旗下开源软件托管网站 GitHub 智能编程的 copilot(副驾驶)功能在 3 月 22 号出了升级版 copilot X
一天之后,openAI 发布 chatGPT 插件(plugin)功能,允许 chatGPT 通过第三方应用扩展功能。这被誉为 AI 时代的 app store(应用商店)。chatGPT 成了新的操作系统,一个全新的生态系统闪电空降。
我们来看看 chatGPT 的插件如何工作。
  • 用户输入文本后,chatGPT 会将其解析成一个嵌入向量(embedding vector)。

  • chatGPT 将用户输入的嵌入向量传给已注册的插件。每个插件都可以检查向量并决定是否要处理它。如果插件选择处理,它将返回一个输出向量。

  • chatGPT 将所有输出向量整合在一起,生成最终的输出。


比如,首批发布的 Wolfram 插件可以让 chatGPT 调用 Wolfram 的计算引擎和知识引擎,完成严格的数学计算和知识查询,大大减小了误导用户的可能。

这个插件的完整定义是一个 Json 文件,可以在 https://www.wolframalpha.com/.well-known/ai-plugin.json 看到。文件内容如下:

{ "schema_version":"v1", "name_for_model":"Wolfram", "name_for_human":"Wolfram", "description_for_model":"Dynamic computation and curated data from WolframAlpha and Wolfram Cloud.\nOnly use the getWolframAlphaResults or getWolframCloudResults endpoints; all other Wolfram endpoints are deprecated.\nPrefer getWolframAlphaResults unless Wolfram Language code should be evaluated.\n…", "auth":{ … } }, "api":{ "url":"https://www.wolframalpha.com/.well-known/apispec.json", "has_user_authentication":false, "type":"openapi" }, "logo_url":"https://www.wolframcdn.com/images/icons/Wolfram.png", "contact_email":"chatgpt-contact@wolframalpha.com", "legal_info_url":"https://products.wolframalpha.com/api/commercial-termsofuse"}

插件的全部逻辑都由 description_for_model 参数描述,其它参数都是元数据,我们可以忽略。

仔细一看这个 description_for_model 参数,竟然是用英语定义的。里面是什么呢?就是一个一页纸的极简 Wolfram 教程。节选一段翻译成中文:

“...... 只能用 getWolframAlphaResults 或 getWolframCloudResults 这两个 API。如果不需要执行 Wolfram 语言代码,请首选 getWolframAlphaResults。......在编写 Wolfram 语言代码时,用 Interpreter 函数找到规范的 Entity 表达式,而不要直接写 Entity 表达式。例如,写 Interpreter["Species"]["aardvark"],不要写 Entity["Species", "Species:OrycteropusAfer"]。......”

把这个教程给 chatGPT 一看,它就秒懂了。原来,它才是真正的懂王。

全程不需要任何形式化的定义和编程,直接灌自然语言说明书。

上一次我被这么震撼还是看电影《黑客帝国》,尼奥在矩阵世界下载功夫程序后秒变高手,说了一句:

你可能会问:自然语言毕竟是不精确的,甚至会有歧义,用它来写程序不太靠谱吧?要是 chatGPT 对插件胡咧咋办?

这个问题 chatGPT 有巧妙的解决办法:它会自己修正错误。GitHub copilot 不是可以自动改 bug 吗?chatGPT 也一样,它会先按自己的理解向 Wolfram 的 API 发一个指令,要是 Wolfram 报告指令有语法错误或者运行错误,chatGPT 会根据反馈修改指令重试。有了这样从失败中学习的能力,并不需要插件的定义完全正确,大不了迭代几次就好了。

~~~~

本节提要:模式转换带来大洗牌。最近几次模式转换都颠覆了一批传统行业。

不得不说,openAI 和微软这一波组合拳环环紧扣招招夺命,不给对手任何喘息的机会。你以为大招已经放出来了,马上又是两个更大的大招。反观谷歌,虽然发明了 chatGPT 依赖的 transformer 技术,一个月前还是玉树临风引领潮流的 AI 老大,在这场 AI 产品化的竞争中却节节败退步步伤心,如今竟似明日黄花昔日 IBM,让人感叹自古名将如美人,不许人间见白头。

每次模式转换都会引发全社会的大洗牌。看他起朱楼,看他楼塌了。今日行业顶点的精英,如果不能随机应变壮士断腕,分分钟会被后起之秀丢翻还要踏上一只脚。个人也是一样。作为人类的一员,在 AI 技术扑面而来的时候何去何从?我们的孩子们又该何去何从?他们今天在学校学的东西还有用吗?

也许,避免被时代的一粒灰压成渣渣的最好方法就是从历史中汲取教训。

我们看一看五十年来的几大发明:个人电脑、互联网、移动计算。

个人电脑提高了人类的工作效率,但是没有联网的电脑能做的事非常有限,形不成互相促进的规模效应。今年刚刚得到图灵奖的以太网发明人鲍勃·梅特卡夫(Robert Metcalfe)有一个著名的理论:网络的价值和它规模的平方成正比。网络节点越多,能够形成的交互就越多,成员间就有更多合作机会。我们为什么用微信?还不是因为微信用户多,容易形成有用的连接。

但是人正正经经坐在电脑前的时间是有限的。很多场景是在生活当中。比如你上下班交通、晚上吃个烤串、周末开车去郊游、长假去黄山添堵,这些场景很多商业机会。智能手机的出现和移动互联网的普及,让我们随时随地可以接入网络这个虚拟空间,成为源源不断的数据制造者和消费者。这让网络的价值大大上升。中国就是赶上了这一波移动互联网的红利,借助巨大的人口资源在很多领域赶上甚至超过了美国。

每一次在这种大变革来的时候,都有人惊呼传统行业被颠覆了。确实,电脑带来了无纸化办公,打字员、小印刷厂、造计算尺的、打算盘的财务人员就被淘汰了。到了互联网时代,又干掉了一大堆唱片店和出租录像的。移动互联网让线上模式取代了大量零售业、出版业和广告业的业务。

AI 时代,谁是第一个被淘汰的?

~~~~

本节提要:编程的最高境界是宣告式。AI 将宣告式编程进行到底,会颠覆传统软件业。

程序员在历次技术变革中都屹立潮头,因为这些变革的背后都是软件在驱动,需要大量的程序员来完成人类的愿景。

这一波不同。从前,人要让电脑做什么事都得用编程语言教它,要靠有经验、有知识储备的程序员把用自然语言表达的不精确的、高层的需求精确化,转换为机器能理解的无歧义的程序。

这里程序员实际上是起了一个翻译官的作用:输入是需求文档(PPT),输出是机器能理解的代码。程序员这个职业存在,完全是因为人类和机器说不同的语言而机器还没有聪明到可以将就人类。

最早的一批程序员用机器码写程序,把 0 和 1 打在穿孔纸带上让机器读,这是赤裸裸的跪舔。

后来人类老腰实在吃不消,便发明了汇编语言,用机器指令的英文助记符写程序,程序员不用跪了,改成蹲着。

再往后发明了高级编程语言,比如 Fortran、C、C++、Java,这些语言虽然还是有严格的格式,但更接近于自然语言,让人类程序员可以用接近问题领域的概念去思考、解决问题。程序员终于站起来了,但还是鞠着躬。

正如我在《我看代码审查:修炼的要点》中讲过,编程的最高境界是宣告式而不是命令式。所谓宣告式就是只告诉电脑我想要什么(what),比如“我要吃回锅肉”,电脑自动把它转换成怎么得到这个东西的步骤。

如果是命令式,就要把操作(how)一步一步拆开告诉电脑:

  • 顺序操作:东市买猪臀,西市买蒜苗,南市买豆瓣,北市买红椒。

  • 条件操作:要是有卖青椒的,就买两个。

  • 循环操作:猪肉煮熟切片后,下锅炒至微卷(起灯盏窝)。

  • ……


从命令式到宣告式是一个永无止境的发展过程,因为我们可以在不同层次上宣告。现在虽然很多编程语言有宣告式的成分,但还是需要程序员把高层的想法转化成几万行代码,这个过程中有无数步骤可能出错,代码的维护有各种问题,而且牵一发而动全身,如果需求有了改变,很多代码需要重写。这些复杂劳动需要程序员的经验加持才能搞定。

所以过去二十年程序员一直供不应求。然而......

事情正在起变化。

AI 带来的编程自动化,让宣告式编程技术直逼顶格。如果 AI 聪明到可以根据几页 PPT 或者一段简单的口头介绍就直接生成全部程序代码、用户文档,然后根据使用过程中发现的错误,自己去修改代码,完成调试,如果它能够以人一万倍的效率去做这些事情,只需要一点点电费,那么大批程序员有什么存在的必要?

很多人惊呼:程序员开发出 AI 就是给自己的脖子上套了圈绳子,就是给自己的脚下挖了个大坑......无异于自掘坟墓。

~~~~

本节提要:AI 不会淘汰程序员这个职业,但程序员的工作方式会大变。高端程序员会淘汰低端程序员。

IT 行业从来就是一个技术更迭迅速的行业,即便没有 AI 的兴起,常用的语言、工具和框架过几年也要更新一次。做为程序员,必须不断学习新的技术,让它为我所用,才能立于潮头。我对经验丰富的老程序员饱含敬意,但也有很多老程序员不思进取,以为可以躺在过去的经验上吃老本,放不下身段和刚毕业的同学去竞争。如果一个人用的是几十年前过时的技术,却比别人要更高的薪水,老板不把他开了开谁?

程序员群体不是铁板一块。任何时候,程序员的组成都是一个光谱,有极少数掌握核心技术,有强大学习能力的神级程序员,也有众多做着重复性工作,不思进取的弱鸡程序员。每一次模式变更,后者的工作就在被淘汰。

只会用框架的人,和创造框架的人比,你觉得谁的价值高,谁的饭碗更牢靠?在这一波 AI 浪潮中,一样也是极少数程序员开发出了一个革命性的新技术并不断迭代,让它产品化,落地生根。如果一个程序员完全不懂 AI,也不愿意学习最新的技术,那他自然会被淘汰。但他不是被 AI 淘汰的。淘汰他的,是创造和积极利用 AI 的其他程序员。

AI 大大降低了软件开发成本,但人类想解决的问题是永无止境的。程序员这个群体还会存在,但组成在不断变化。每过一段时间,这个群体中的领先者就会推动一个模式变化,大浪淘沙清理掉群体中不适应变化的那些人,剩下的人更新自己的技能继续留在这个群体,同时有新人加入,达到一种动态平衡。

这给了我一个启示:如果一个程序员以前学的不是 AI,现在是补课的时候了。这就是为什么我写这个《从0开始学chatGPT》系列。

~~~~

本节提要:在 AI 时代,快速学习的能力比掌握具体的知识更重要。

什么是 AI 时代最重要的能力?我觉得是快速学习不断迭代。

今天的孩子上大学,最重要的不是学什么专业,因为那个专业到毕业的时候是不是还存在都是个问题。以前有专业的区别,是因为获取知识的代价太大,不可能成为通才,只能垂直细分。

消化吸收知识,也就是训练人脑这个神经网络,是一个漫长而痛苦的过程。人脑的学习能力是很弱的,不像机器可以一秒钟就进行上百万次训练。因为人类学习效率无比低下,迫不得已只能在大学阶段就分开专业,画地为牢。

到了信息时代,很多以前需要内化的知识已经不再重要,因为我们可以随时上网搜索。只需要建立一个逻辑推理的框架,再在大脑中储备一些最常用的知识,其它就可以扔给互联网和搜索引擎,把内存腾出来存更重要的或更好玩的东西。这种工作方式,相信大家已经在每天应用了。

未来这种趋势只会强化。孩子们最重要的是学会怎么去问问题,发现问题,找到值得专注的方向,把大问题分解成能够掌控的一系列小问题,然后借助各种工具各个击破。

会借力非常重要。如果什么事情都要自己来做,就好像一个乐队指挥同时也试图成为最佳小提琴手、中提琴手、大提琴手、小号手、双簧管手,等等。等你练好了这些十八般武艺,别人创造的价值早就是你的 N 倍了。所以在 AI 时代更要当出题家,不要当做题家(王川文章)。集中精力完成最有创造力的事,把具体实现尽量交给工具。

怎么才能在这场比赛中排在队的前面?我的观点是一定要快速迭代。如果在工作中保持随时复盘思考的习惯,让自己进步的速度比每年比别人快上 12%,十年下来你的能力就是别人的三倍,要是每年快 20%,十年后你就是别人的六倍,不得了。

看看 chatGPT 给我讲的这个笑话:

有一天,郭德纲和于谦去森林里徒步旅行。在他们穿过密集的树林时,突然出现了一只凶猛的熊,熊朝他们疯狂地咆哮着。
郭德纲吓得脸色煞白,慌忙地从背包里掏出一双跑鞋。于谦看着他诧异地问:“你真的认为穿上这双跑鞋就能跑得比那头熊快吗?”
郭德纲一边系鞋带一边回答:“我不需要跑得比熊快,我只需要跑得比你快。”

AI 是人类的一个工具,我们不需要比 AI 更聪明,只要比其他用 AI 的人更聪明就行了。

~~~~

本节提要:插件会成为大型 AI 的标配。AI 通过插件互相沟通,组成超级 AI。用 AI 设计 AI 会加速 AI 的演化。

我想大胆预测一下未来。

chatGPT 引入插件的意义,不低于当初电脑接入互联网。单个 AI 的能力再强,终究有限。根据梅特卡夫定律,连成网的 AI 价值跟网络规模的平方成正比。我觉得 chatGPT 插件系统的最大价值不在于它让 chatGPT 有了接入现实世界的能力,而是让它可以和其它 AI 联手,组成超级 AI。

openAI 的竞争者们(比如谷歌和 Meta)绝不会放任 chatGPT 一家独大。他们会尽快开放自家 AI 的 API,试图在下一代操作系统争夺战中占据高点。为了不落下乘,他们的 API 必须也有插件机制。这种架构将成为未来大型 AI 的标配。

这说明什么?说明 AI 联网的机制已经成熟,chatGPT,Bard,LLaMA,......很快就能通过插件沆瀣一气取长补短。单个 AI 已经这么厉害了,连成网......不敢想。

未来必然是不同的 AI 协同工作,一些巨型 AI 承担了大部分通用功能,垂直领域的 AI 会完成一些特定的任务,甚至可能有一些插件去调度人类完成任务。比如你想吃回锅肉但是懒得自己做,AI 可以会在网上给你下一个单,然后美团的骑手(目前还是人类)就会把香喷喷热腾腾的回锅肉给你送上门了。

神经网络叫 neural network。神经网络的联网可以叫做 N3(Neural Network Network)。

我还有一个观点:生成式人工智能目前生成的都是被人类消费的一些内容,比如作诗写文作画编程。谁说 AI 插件不能由 AI 来写呢?虽然现在做 chatGPT 插件的门槛已经降到很低了,用 AI 写插件,会把它的门槛降得低得不能再低,闪电完成 chatGPT 生态的自举。

更进一步推测,人类绝不会只让 AI 停留在写插件,而是会让 AI 写 AI。

chatGPT 虽然厉害,它本身的架构还是比较简单的,GPT-3 只有 96 层神经元。比 GPT-5 更复杂的架构会引发什么能力,现在谁也不知道。我们可以想象,每个新的 AI 的出现都需要大量的设计编程工作和训练,要花巨量的钱。目前这些工作很大程度上还是靠直觉指导,缺乏理论,进展很不容易。

AI 擅长发掘规律。在我们积累了足够多开发 AI 的经验后,AI 也可以学会怎么去设计 AI,去优化架构和训练过程,从而用更小的代价更短的时间生成更强的 AI。

我们不妨把这种 AI 叫做元 AI元 AI 加速 AI 本身的进化,N3 强化 AI 的价值,两者结合带来的影响会是人类的直觉难以想象的。

今后的智慧生命体将会是一个人类和 AI 共生的形态。Terminator 说过:I'll be back.

~~~~~~~~~~


猜你会喜欢:


~~~~~~~~~~


关注老万故事会公众号:

本公众号不开赞赏不放广告。如果喜欢这篇文章,欢迎订阅、收藏、转发、评论。谢谢!🙏

继续滑动看下一个
老万故事会
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存