DeepMind科学家万字分享50个AI提效用例详解,工作中我是这么用AI的
文章作者是 DeepMind 的机械进修专家 Nicholas Carlini,分歧于别人的先容 AI 利用实例的文章,此次 Nicholas Carlini 具体讲授了本身在日常中若何使用 ChatGPT,好比写代码、优化代码、修复差错等,并且将完备的对话分享了出来。 在这些对话中,可以看到 Nicholas Carlini 的每一条详细的 prompt,以及终极若何天生可用的成果。 鉴于对话较长,很难用文档的情势出现,我们在每个案例下附上了对话的链接,可以直接点击查看。
我不以为如今 AI 模子(LLM)的用场被过火夸年夜了。
诚然,任何新兴技术都邑吸引谋利取巧的人。许多公司都爱传播鼓吹本身「正在利用 AI 技术」,就像他们以前喜欢讲「基于区块链技术」一样。(我们已经多次见识过这种征象)我们可能正处在一个泡沫之中。互联网泡沫在 2000 年破碎,但如今我们所使用的很多 app,放在曩昔是科幻小说里才有的器械。

不外我以为,我们比来取得的技术提高并非仅仅是炒作。曩昔一年里,我每周都邑花上一些光阴和分歧的年夜型语言模子互动,他们办理繁杂问题的才能让我觉得惊讶。
正因如斯,我可以说,这些模子让我在编写研讨项目和小我项目标代码时,效力至少进步了 50%。许多在网上讨论年夜型语言模子(LLM)效用的人,要么异常乐观,以为所有事情都邑在三年内实现主动化;要么异常消极,以为 LLM 至今一无可取,未来也不会有所作为。
在这篇文章里,我想测验考试把讨论拉回到实际中,纰谬将来做出任何猜测。我想要列举 50 个例子,展现一个法式员和机械进修范畴的研讨科学家,是若何经由过程与分歧的年夜型语言模子进行对话,实质性地晋升我的研讨才能,并辅助我开展各类编程项目标。
这些例子包含:
使用我从未打仗过的技术从头搭建整个 Web 利用。
教我若何使用各类框架,只管我之前从未使用过它们。
将浩繁法式迁徙到 C 语言或 Rust 语言,实现 10 到 100 倍的机能晋升。
精简繁芜的代码库,年夜幅简化项目布局。
为曩昔一年里我撰写的每篇研讨论文起草初步的试验代码。
主动化处置险些所有反复性义务或一次性剧本。
险些完全代替了收集搜刮,帮忙我搭建和设置装备摆设新的软件包或项目。
在赞助我调试差错信息方面,取代险些一半收集搜刮的功效
我将这些例子归纳为两年夜类,一个是「助力我的进修」,另一个是「简化乏味的事情」。
助力进修的紧张性不问可知,它赞助我可以或许掌握曩昔难以应对的技巧。简化乏味的事情同样症结,它节俭了我的精神,让我可以或许集中注意力在最长于的范畴,攻克那些辣手的问题。最症结的是,这些例子都是我现实使用年夜型语言模子(LLMs)来赞助我的真实例子。
我做这些不是为了夸耀我的才能,而是由于我真的在完成现实的事情。这就意味着这些例子并不花哨,我天天做的年夜部门事情自己也不花哨,今朝我在用的 LLMs 险些帮我主动化了所有这些事情。
在这篇文章里,我的目的实在便是用一个又一个详细的例子让你目不暇接,向你展现我是若何在曩昔一年中应用 LLMs 明显晋升我的事情效力的。不外要知道,我展现的还不到 LLMs 赞助我的案例的 2%。
文章内容相称长,可以依据标题探求你好奇的部门,进行浏览。
原文链接:https://nicholas.carlini.com/writing/2024/how-i-use-ai.html
点击存眷,发现更多 AI 创业者
00讨论条件
假如非要说互联网哪里做得欠好,我感到是容易发生误会。我并不是盘算传播鼓吹,当今年夜型语言模子 (LLM) 将会统治天下,我也不会去讨论将来模子可能或弗成能实现的功效。我仅想探究的是,如今的模子对我的现实赞助。
你可能会好奇——为什么有人会专门写一篇文章来证实语言模子的适用性。这不是明摆着的吗。但事实上,彷佛有许多人——无论是在学术界、软件工程范畴,照样媒体圈——都在普遍宣扬 LLMs 毫无建树,是一时的炒作,几年后便会消散,对天下毫无影响。我将经由过程详细的例子阐明,这些人的见地是差错的,现有的 LLMs 已经显示出了它们的适用代价。
然而,我必要对概念限制一下,由于还有另一群人持有完全相反的概念:他们以为当前的模子可以或许代替所有法式员,人们无需再进修编程,由于来岁他们就会赋闲。我不会在这里直接反驳这些人的概念,但我必要明白,我并不是在为这些人辩白。
此外,我不会去主张「目标合法化手腕」,说我们应该掉臂这些模子可能带来的负面影响去训练它们。我完全清晰这些模子可能带来的负面(乃至可能是极其负面)效果,像是分布虚伪信息到,到监督人类、事情岗亭的流失。)(乃至有人担心人类的灭尽。)我将在不久的未来专门写一篇文章,来讨论 LLMs 可能带来的有害影响。但这与我们本日要讨论的 LLM 是否有效的议题是离开的——正如我所说,这才是我想要在这里探究的。
我当然懂得,你可能会由于语言模子容易发生幻觉、反复事实,在面临繁杂环境时可能彻底失败的倾向而不肯使用它们——可能我对这些局限性的相识比你更深。这篇文章不会讨论这些。由于我以为,即便存在这些缺陷,模子仍旧可以施展其作用。
我当然也懂得,训练这些模子的伦理问题是值得质疑的。大概你不喜欢它们在未经人们批准的环境下,使用人们的数据进行训练(我可能比你更懂得这一点)。或者你可能在斟酌那些为了直接训练这些模子而只获得菲薄待遇的人。我认同,这些都是问题。但这篇文章也不会讨论这些。
正如我在前文多次强调的:我将只讨论,现有的模子是否具有适用性。
小我配景简介
通常,我不容易完全信任什么器械。好比,只管十年前我切身阅历了收集平安范畴内对加密技术的炒作和高潮,我从未写过关于区块链的论文,我也从未拥有过比特币。它们险些没有什么用途——除了打赌和欺诈。一直以来,我是一个对所有主张持狐疑立场的人。每当有人奉告我「新技术将转变天下」,我的通常表示得很冷淡。
以是,当我第一次据说这个 AI 对象将会异常有效,而且会明显转变人们处置日常事情的方式时,我的反响根本上是一样的:「目击为实。」
此外,我照样一名平安研讨员。在曩昔的近十年里,我的日常事情便是展现 AI 模子在面临面临它们未颠末训练的情况时,是若何彻底失败的。我已经证实,轻松地稍稍转变输入,就能让机械进修模子发生极其差错的输出;或者年夜多半机械进修模子是若何从它们的训练数据集中影象特定的例子,并在人们使用时反复。我完全懂得这些体系的局限性。
然而,即便如斯,我照样要说,我以为自从互联网诞生以来,当前的年夜型语言模子为我的临盆率带来了最年夜的晋升。说真话,假如你本日让我选择办理一个随机的编程义务,要么经由过程互联网,要么经由过程一个最先进的语言模子,一半以上的环境下我都邑选择语言模子。
下面的内容,是我若何应用年夜模子(LLMs)来助力我的事情。
你或许对我的利用案例不感兴致,感到它们有点傻,可能对你毫无赞助。我认可这确切有可能,但我只能写我本身的体验。这里每个案例都是真实的,是我从曩昔一年与年夜型语言模子的对话记载中直接提取的。
01为我构建完备利用
客岁我开发了一个测试,人们可以在网站上测试本身能多精准地猜测 GPT-4 办理义务的才能。这个考试异常受迎接,阅读量已经跨越了一万万。
你猜我怎么做的。我险些让 GPT-4 为我写了整个利用法式的初始版本。开发进程是经由过程一系列问题来实现的,从扣问利用法式的根本布局开端,之后我慢慢增长各类功效。整个对话长达 3 万字,这对 GPT-4 模子的才能是一个真正的磨练。
完备对话:https://chatgpt.com/share/39e7db3d-acee-409a-9629-87a2a6a9db22
假如你翻看此次对话,你会看到我提出的所有 prompt。有时刻,我仅仅用笔墨描写我的需求,哀求模子提供完备的代码,有时我会提出详细的变革哀求(好比,"大众Instead of saying how this compares to the average score can you say what percentile it is, using the KDE?"大众))。还有一些环境,我会粘贴完全未指定的差错新闻,追求 AI 赞助(e.g., "大众Plotting: numpy.linalg.LinAlgError: singular matrix"大众)。我还会仅扣问简单的一次性问题("大众How do I add an iframe to a page with javascript that has contents loaded from a string?公众))。
通常,这种办法之以是行得通,是由于这些模子可以或许很好地处置人们已办理的问题,而且这个小测试的绝年夜部门只是一些根基的 HTML 代码,以及 Python 会作为网页服务器的后端支撑,这是天下上任何有代码才能的人都可以完成的。
这个小测试之以是吸惹人,并非它背后的技术让人感兴致,而是它的内容。经由过程主动化处置那些乏味的法式,我异常轻松地制造出了这个小测试。
坦率地说,我确信,假如不克不及应用 LLM 的辅助,我可能不会开发这个考试——由于我本不肯意花光阴从零开端编写整个收集利用法式。并且我照样理解编程的人。我信任,即就是今朝的模子,也足够让年夜多半人经由过程简单地哀求办理计划,来完成他们以前无法完成的义务。
我手头还有几个相似的例子,我让模子帮我编写了整个利用法式,比及它们上线时,我会测验考试明白这些利用法式是在 LLM 的辅助下开发的。
02相识新技术的导师
作为新技术的引路人,我曩昔老是可以或许掌握最新的技术框架。
但人一天的光阴有限,由于我的事情类型,我主要的精神都放在了跟进最新的研讨进展上,而不是紧追 JavaScript 框架的更新。这意味着,当我开端一个与我的研讨范畴无关的新项目时,我有两个选择。一是使用我现有的常识,固然这些常识可能已经有些过期,但对付一些小型项目来说,照样足够的。二是去进修那些新的、通常也更先进的技术办法。
这便是年夜模子年夜显技艺的时刻了。对我来说很新的 Docker、Flexbox 或 React 这些新框架或对象,对其他人来说可能已是耳熟能详。环球可能有成千上万的人对这些技术洞若观火。是以,现有年夜模子可以或许提供赞助。
这就意味着,我不必局限于那些预设了特定读者、特定常识配景和特定目的的静态教程,而是可以与年夜模子进行及时互动,进修可以赞助我办理特定义务的常识。
举个例子,本年岁首年月搭建一个年夜模子 (LLM) 的评估框架时,我必要在受控情况中运行 LLM 天生的代码,以避免它误删我电脑上的文件。Docker 是完成这项义务的抱负对象,只管我之前从未打仗过。
评估框架:https://nicholas.carlini.com/writing/2024/my-benchmark-for-large-language-models.html
紧张的是,我的目的并不是进修若何使用 Docker,而是把它作为一个对象,目标是实现我必要的功效。我只必要掌握 Docker 的一小部门常识,足以让我确信我在以最根本的方式平安地使用它。
假如这产生在 90 年月,我可能必要购置一本关于 Docker 根基的册本,从头学起,跳读章节来找到我必要的内容。在上一个十年,环境有所改善:我会在网上搜刮一些关于 Docker 的教程,测验考试随着做,然后依据我遇到的差错信息上彀搜刮,看看是否有人遇到过雷同的问题。
但如今,我只必要向语言模子告急,让它教我 Docker 的相关常识。
完备对话:https://chatgpt.com/share/40dcc017-9cc6-4a99-8eac-959a171fbb2f
当我胜利设置装备摆设并启动了 Docker 之后,我遇到了一些在 Linux 情况下运行时的权限问题。我愿望能办理这些问题,于是我向语言模子追求赞助。
完备对话:https://chatgpt.com/share/1e3940c1-70d9-4747-a0c3-f48106a5b9f6
经由过程这个进程,我初次打仗了 Podman。随后,我哀求语言模子帮我将所有针对 Docker 编写的代码转换为等效的 Podman 版本。
完备对话:https://chatgpt.com/share/91506eb7-9596-440e-a833-f4b823e52c0e
接着,我发现我要知道若何在 Docker 容器中通报宿主机的图形处置单位(GPU),我向语言模子提出了这个疑问。
完备对话:https://chatgpt.com/share/6537ce71-c89a-4d9b-ab3d-fc3582c1c559
03开端新项目标助手
回顾起来,我最初打仗的编程语言是 Java。我异常喜欢编程,但面临一个新项目标空缺屏幕时,我照样觉得异常头疼。分外是使用 Java 编程的时刻。哪怕是编写一个简单的「Hello World」法式,也会让我迷惑——公众public static void main string args公众这一串代码是什么意思。括号应该怎么放。哪些字母必要年夜写。还有,为什么这里用花括号,那边又用方括号呢。
于是,我采取了任何一个孩子遇到难题时可能采取的行为——请我父亲帮我完成。
韶光飞逝二十年,假如要使用那些我不太认识的框架开端新项目,我照样会觉得头疼。仅仅摆弄那些模板代码,就要挥霍年夜量光阴,主要是我还对整个进程一头雾水。
举个例子,比来我盘算测验考试编写一些 CUDA 法式,测试一些简单的贪婪搜刮算法在 GPU 上的机能,并将其与别人已经高效优化过的 CPU 版本进行比拟。
然则我不知道若何编写 CUDA 法式。我知道怎么写 C。我相识 GPU 的事情原理、内核的作用以及内存结构和统统。但现实上编写代码以将功课发送到 GPU。不知道若何开端。以是我只是让模子在我的 CUDA 法式中给我写第一遍。完善吗。弗成能。但这只是一个开端。而这恰是我想要的。
完备对话:https://chatgpt.com/share/1ead532d-3bd5-47c2-897c-2d77a3896427
你会看到,这里的代码有挺多差错,但对此我并不介怀。我寻求的并非完善无缺的办理计划,而是愿望有个草稿,之后我可以自行深刻。假如未来的模子可以或许加倍精彩,那天然再好不外。不外,今朝年夜模子的才能已经极年夜地帮到了我。
或者,换个话题,谈谈我进行的其他小我项目。
我正在使用的是树莓派 Pico W,这是我初次打仗它。我期望它可以或许为我完成一些义务,分外是处置一些收集功效。当然,我确信网上确定有详尽的教程指示若何实现我的需求。但你有没有把稳过如今的互联网。搜刮成果的前五条每每是一些充满着过期代码的低质量内容,这些代码自 2008 年以来就不曾真正更新,仅仅是为了搜刮引擎优化而稍作调整,现实上仍旧无法正常事情。
是以,我选择向一个语言模子告急,让它帮我杀青我的目的。我之前有过使用微节制器的履历,以是对它们的事情原理还算相识。但 Pico W 对我来说照样头回用,我所必要的,仅仅是一些根基的领导,帮我搞定所有需要的依附项,之后我就可以自行摸索。
对付任何一款新的微节制器,我编写的第一个法式老是让 LED 灯闪耀。这个简单的法式可以赞助我验证代码可否胜利编译并上传到了装备,确保所有引脚设置装备摆设无误,从而让我对本身的操作有根本把握。以是,我们就直接来哀求一个让 LED 闪耀的法式吧。(趁便一提:这种法式在网上险些确定能找到。但那样我还得操心去搜刮。)
完备对话:https://chatgpt.com/share/4e6c74a0-1739-432d-880c-df12c0abf0a4
一旦这段代码开端正常事情,接下来的工作我就胸有定见了。究竟,我对 Python 的运作方式照样洞若观火的(不管你信不信。)。如许我就可以继续在原有根基长进行编纂,办理了 Micro Python 的问题。
当我再次遇到必要分外处置的问题时,我会直接哀求模子帮忙。好比,接下来我就直接哀求模子帮我写一个衔接 Wi-Fi 的剧本。
完备对话:https://chatgpt.com/share/c9d024e1-c279-4409-bbda-d99efdcaec25
接下来,当我又一次陷入困境,此次是由于必要衔接到 MQTT 服务器,我便再次向模子告急,以办理这个问题。
完备对话:https://chatgpt.com/share/4b9190d8-4a50-4eb5-bdde-ebf457e2cdd5
我如今已经养成了如许的习气。好比,本节开首提到的例子是真实产生的——我在追求若何应用 Flexbox 进行结构。究竟我上一次进修 HTML 结构方式时,用的是 div 元素,而不是表格。
完备对话:https://chatgpt.com/share/e91b44f8-f2fd-45a9-af7e-1ffd95bfd073
04简化代码
作为平安研讨范畴的一名专家,我常常遇到如许的场景:我要反省一个全新的代码库,此中可能包括了数千行由他人编写的研讨项目代码。我的义务是懂得这些代码的事情原理,以便我进一步阐发并测验考试发现潜在的平安破绽。
抱负环境下,假如所有代码都编写得有条不紊,这项事情应该并不繁杂。然而,实际天下并非如斯,研讨者们每每没有足够的念头去编写和宣布整洁的代码。成果便是,人们可能会将任何可以或许运行的代码——无论其质量若何——公之于众。老实说,我本身在某些环境下也会这么做。
只管我手头没有可以在此分享的研讨案例,但我可以分享一个我正在做的小我项目标例子。有人曾说,我对康威的性命游戏有着难以自拔的留恋。比来,我一直在探求一种办法,可以或许从 Python 快速评估一些性命游戏的模式。有一个异常精彩的 C++对象 Golly 可以或许做到这一点,但我并不想将我的 Python 代码转换为 C++。
康威:https://nicholas.carlini.com/writing/2022/multiplexing-circuits-game-of-life.html
Golly:https://golly.sourceforge.io/
Golly 提供了一个敕令行界面对象,恰好相符我的需求——我所必要的只是找到一种正确的办法来挪用它。第一步是获取这个 C++代码,它底本支撑年夜约 50 种分歧的敕令行选项,而我必要做的是让它只执行我想要的那一个功效。于是我将这 500 行 C++代码输入到 LLM 中,并哀求天生一个可以或许实现雷同功效的更简练的版本。
完备对话:https://chatgpt.com/share/e2edc8ab-5d6f-4627-8283-d8b6e448cd54
成果出人意表地好,它完善地运行了。之后,我又哀求了一个环抱这个 C++代码的 Python 封装器。同样,这也胜利了。
还有一项义务,它繁琐到我可能永久不会亲主动手去做。但因为如今可以请别人代庖,我获得了一个速率比我本来的 Python 代码快上 100 倍的对象。
我发现本身越来越频仍地如许做。还有一个例子,用 Python 来执行这项完全雷同的义务。
完备对话:https://chatgpt.com/share/1b44ae40-ce49-4751-812c-c7d5d38a3383
再次强调,这些义务自己并不繁杂。但每次如许做,都能为我节俭年夜量的光阴。这恰是我以为年夜语言模子(LLMs)当今令人赞叹的缘故原由之一:它可能看起来并不起眼,也不会由于说「这是我使用 LLM 简化生涯的平常方式」而在网上得到年夜量赞誉,但它确切为我的生涯带来了实质性的方便。
05处置无聊的义务
有许多工作我不得不做,这些工作枯燥无味,不必要动头脑,但却必需完成。
事实上,我发现本身之以是会迁延义务,每每是由于我知道完成这些义务会觉得无聊和痛苦。LLMs 极年夜地减轻了这种痛苦,让我在开端义务时就知道本身只必要办理有趣的问题。是以,我想一一先容一些经由过程哀求 LLMs 协助而办理的异常通俗的问题。
好比比来,我必要对一个用 Python 3.9 编写的法式进行反编译。年夜多半 Python 反编译对象只支撑 Python 3.7 及更早版本,而我用的谁人 3.9 版本的二进制文件无法运行。
如今,反编译并不是一项分外艰苦的义务。它主要是一个避免犯错的演习,你必要追随法式中的跳转指令来重修节制流程。是以,我没有花光阴手动翻译几千条操作码,这些操作码对应数百行代码,而是让一个年夜型语言模子帮我完成了这项事情。它的表示异常精彩,超越了我的预期。经由过程三次分歧的对话,我得以让模子来为我做这件事。
完备对话:
https://chatgpt.com/share/90c41b0a-f4ec-4afb-af78-12c70b91c378
https://chatgpt.com/share/7ad7908c-f743-435d-aa38-1fbfd9ca6673
https://chatgpt.com/share/ac7a971a-911c-4553-87b6-06f3049b8dae
另一个例子是,有时我必要获取一些非布局化数据,并将其格局化为布局化格局。举个例子,当我在做一个项目时,我必要整顿出一个包括书名和作者名字的书单。我在网上找到了一些格局凌乱的数据,于是哀求年夜型语言模子帮我整顿这些数据。成果,模子帮我很好地完成了这项事情,使数据变得井然有序。
完备对话:https://chatgpt.com/share/2049edf7-b10d-4e4a-98d0-c4979f338048
再好比,我比来在撰写一篇博文,先容我是若何攻破某个防御体系的,而且想要展现我所做的代码改动的全体差别。于是我提供了(1)代码差别的内容,以及(2)之前将代码差别格局化为 HTML 格局的示例,末了哀求年夜型语言模子依照之前的方式帮我将这个差别也转换成响应的 HTML 格局。
完备对话:https://chatgpt.com/share/7640ae1d-c03d-4075-b622-a91782718896
再好比,在我的事情进程中,我经常必要为引用的资本创立引用。对付学术论文,Google Scholar 让这件事项得很容易,我只需简单地复制并粘贴现成的引用格局。然而,对付网页引用,这个进程就稍显麻烦;比来,我开端测验考试让年夜型语言模子帮我主动天生引用。(必要强调的是,我会亲自核实这些引用的精确性。)
完备对话:https://chatgpt.com/share/b11270e4-bd5a-4501-b20d-1951bb44e737
我可以继续举出至少一百个相似的例子。但我想你已经明确了我的意思。
我完全明确这种义务可能会让人感到「就这。」但我们要记住,五年前这些模子险些不克不及连贯地写出一个段落,更别说为你办理整个问题了。
06让每一小我都成为「超等用户」
假如你曾目睹或人使用对象的纯熟水平远不如你,那可能会有些令人难熬难过。你会看到他们消费数分钟,有时乃至几小时来完成一项义务,而这项义务明明可以经由过程某种巨集来主动化,或巧妙地并行运行利用法式来主动化的义务。
然而,掌握实现主动化的技能必要光阴,而且颇具挑战性。
例如,我比来试图编写一个 Python 法式来处置来自 Apple Lisa 键盘的输入。我在线找到了一小我用 C 语言编写的相关代码,此中包括很多像 #define KEYNAME key_code 如许的语句,我想将它们转换为一个 Python 字典,将整数代码映射到对应的字符串。
我是一个 Emacs 用户。我知道若何在 Emacs 中办理这个问题,这乃至并不难。这是我刚记载的一些症结操作,可以到达这个后果:
C-h C-s #def [enter] M-f [delete] C-d M-f
C-[space] M-f C-w C-a C-y : 公众 M-f 公众, C-g C-] } C-[ {
只管这对我险些是天然的,但到今朝为止,我已经花了跨越一半的生涯光阴在 Emacs 上变得足够纯熟,以至于这成为了天然反响。但你知道如今我衔接了 LLM 到我的编纂器,我会怎么做吗。
C-h C-h rewrite these #defines to a dictionary of {keycode: string, ...}
然后,文本就在我面前目今被重写了。
在这种情形下,我以为年夜语言模子的潜在效用对非专业人士来说,乃至可能比专业人士更高。模子为所有人提供了一个根基程度的晋升,假如你之前一窍不通,突然之间你就可以或许做许多工作了。
07作为 API 参考
那些真正的法式员们,当他们想要相识一个对象的事情原理时,会去翻阅官方的参考手册。然则我是一名怠惰的法式员,更愿望谜底能直接送到我面前。以是,我开端告急于语言模子。
当我向一些人展现这些例子时,他们可能会有些抵牾,反驳说:「年夜语言模子并没有做出任何你用现有对象做不到的工作。」你猜怎么着。他们说的没错。但同样,使用搜刮引擎能做到的工作,读一本实体书也能做到,而念书能做到的工作,经由过程浏览源代码也能做到。
然而,每一样对象的使用,都比前一种更轻便。当某件事项得加倍容易时,你不仅会更频仍地去做,并且还会以更多样化的方式去利用。
以是,当我扣问「哪个$敕令可以或许接管所有残剩的参数」并获得谜底时,便是如许的例子。(紧接着,我可能又会立即提出另一个「这个器械怎么用」的问题。)
完备对话:https://chatgpt.com/share/08f4fcbc-06fa-4bed-b884-5b971fb88030
好比,当我必要在 LaTeX 文档中将笔墨设为赤色时,我不再翻阅文档或上彀搜刮,而是直接向语言模子提问。
完备对话:https://chatgpt.com/share/7f606e88-e9d8-43b8-956f-5b094afba3b4
当我必要相识若何在 LLDB 中使用与 GDB 敕令功效类似的敕令时,我采取雷同的办法。
完备对话:https://chatgpt.com/share/dbc73612-961b-4feb-853f-90ad5b82e069
或者当我想知道一些查找敕令是若何事情的。
完备对话:https://chatgpt.com/share/5dbdd5a9-63e7-487b-a9f4-67a63996bc2b
或者若何使用 lpr。以及若何从新绑定一些 latex 敕令。
完备对话:
https://chatgpt.com/share/9d14cbbf-6337-4913-ae24-f308baf49048
https://chatgpt.com/share/5f89c11d-936a-478e-8969-050fcfea32de
这现实上成了我使用年夜语言模子最频仍的场景之一。我之以是不克不及给你展现更多如许的例子,是由于我在 emacs 编纂器和我的 shell 中都内置了一个可以查询年夜语言模子的对象。是以,约 90% 的环境下,当我必要进行这类查询时,我基本无需分开我的编纂情况。
08搜刮难以找到的信息
曩昔,在网上搜刮内容是一项必要技能的活。你必要精心遴选哪些词汇参加到你的搜刮哀求中。是使用复数情势照样单数。是使用曩昔时态吗。您愿望避免哪些字词呈现在页面上。你是想搜刮包括 X 和 Y 的成果,照样 X 或 Y 中的任一个。
这种环境已经不复存在。我记不得上一次使用 OR 在 Google 中搜刮是什么时刻了。同样,我也忘怀了上一次使用减号 (-) 来排除某些搜刮成果是什么时刻。如今,年夜多半环境下,你只需简单地输入你想要找的内容,搜刮引擎就会帮你找到。
然而,搜刮引擎还没有完全到达天然语言查询的程度。它仍旧有点像在玩一个反向的「危险问答」游戏,你必要试图依据谜底,来倒推症结词,而不是基于问题。我以为,这种技能险些是我们所有人都已经遗忘了的。
对付本日的一些简单义务(并且跟着光阴的推移,越来越多的义务将会如斯),语言模子表示得更好。我只需输入「以是我知道+对应于__add__,然则~是什么」,它就会直接奉告我谜底是__inv__。
完备对话:https://chatgpt.com/share/e05b6d20-c02c-4fbd-bef2-53d43c0ffb21
这通常是用传统搜刮引擎难以找到的内容。切实其实,我知道若何提问以便找到谜底。假如我输入「python documentation metaclass "大众__add__"大众」,可能就能在页面上搜刮到~并获得谜底。但你知道吗。直接向年夜语言模子提问同样有用。
每次如许做可能只节俭了几秒钟,但当你正忙于办理编码义务,同时试图在脑海中记住无数事变时,可以或许将你正在办理的问题一股脑儿地倒出来,并获得一个清楚的谜底,这真的异常神奇。
这并不是说年夜语言模子在这方面已经无可抉剔。它们只有在某个信息在网上被频仍反复后才会知道。而「频仍」的尺度则取决于详细的模子,以是确切必要花点心思去斟酌,我是应该向模子提问,照样应该告急于互联网。但可以确定的是,这些模子会赓续提高。
或者,当我遇到随机瓦解的问题时,我会把看到的所有信息都奉告模子,并哀求解释,就像我如今所做的,当我仅仅输入 zsh 没有找到匹配项 "大众长途通配符传输问题"大众。
完备对话:https://chatgpt.com/share/b5924669-b53a-4723-b9e1-56845974a256
或者,举一个完全分歧的例子,客岁我在撰写一篇博文时,我愿望文章中第一个单词的首字母年夜写,其他笔墨环绕它分列,就像我适才在这个句子中展现的那样。这种后果被称为「首字下沉」,但我之前并不相识这个术语。我只知道我想要的视觉后果,于是我向语言模子描写说:「我想要它看起来像一本精巧的册本,笔墨环绕着'O'分列」,然后它就给了我确实的谜底:
完备对话:https://chatgpt.com/share/4706f9f1-fbfe-475f-b29d-b80cc6c92d65
这个义务也是属于「我之以是会去做,全由于有了年夜语言模子」的类型——我底本不会花年夜量光阴去揣摩若何实现这个后果,这不划算。但正由于我可以直接向模子提问,我就这么办了,这也让我的文章加倍悦目。
09办理一次性义务
法式可以分为两类。一类是你想要精心编写的法式,它们将会历久存在,这些代码的整洁性至关紧张,由于你必要在将来几年内维护它们。
另一类法式可能只运行 25 秒;它们帮你完成某个义务,义务完成后就会被立刻丢弃。在这些环境下,我基本不关怀代码的质量,并且法式是完全自力的,我如今险些只用来 LLMs 为我编写它们。
请注意:年夜多半这些环境再次呈现,你会看着它们说「就这。」。但就像我之前说的,我天天只有那么多小时来处置一个项目。假如我能节俭编写一次性使用的法式的光阴和精神,我会选择如许做。
最典型的环境可能便是赞助我天生图表,可视化我某些研讨试验天生的数据。我手头有几十乃至上百个如许的例子。它们看起来根本上都是一样的,以是这里只展现一个:
完备对话:https://chatgpt.com/share/17e9d433-aeba-4535-a67c-4c14147bb374
再举一个相似的例子,便是当我手头有某种格局的数据,必要将其转换成另一种格局时。这通常是一项一次性的事情,一旦转换完成,响应的剧本就会被我丢弃。
完备对话:https://chatgpt.com/share/bc99c46b-d1a8-48ea-8d46-411182f415d6
我可以举出无数相似的例子。许多时刻,当我必要编写一个简单的剧本时,我会选择让年夜语言模子来代庖。好比,我哀求年夜语言模子为我编写一个剧本,它可以或许年夜声朗读我的论文,以便我可以反省是否有初级的语法差错。
完备对话:https://chatgpt.com/share/d52a9754-dd68-4151-ae5b-0107ee9dc400
在许多环境下,假如我不太肯定本身想要什么,我会先向语言模子哀求一些根基代码,然后在此根基长进行迭代改良。
例如一个暂时义务,我必要敏捷处置一些数据。假如回到 2022 年,我可能会花上两分钟用 Python 写个法式,然后让它运行几个小时,由于这种法式只运行一次——优化它所消费的光阴可能比法式自己运行的光阴还要长。但如今,我当然会选择花同样的两分钟光阴,哀求一段 Rust 代码帮我完成这个义务。
完备对话:https://chatgpt.com/share/7b1772f6-e298-4caa-90e9-f4c3c70438d1
再举一个例子,我哀求年夜语言模子帮我下载一个数据集,并对其进行初步处置。对我来说,这容易做到吗。可能吧。但这并不是我想要投入精神去斟酌的义务;我更乐意将注意力集中在我将要对数据集进行的研讨。去除这些滋扰的代价,远远跨越了它为我节俭的那几分钟光阴。
完备对话:https://chatgpt.com/share/7114d352-03fc-419c-b97d-e22b044fa4eb
还有一次,我编写了一个法式,目标是用小立方体进行 3D 打印像素绘图像。在这个进程中,我必要将 PNG 图像转换成 STL 文件,但这并非项目标焦点,这只是一个在实现目的进程中必需完成的步调。是以,我哀求年夜语言模子帮我办理这个问题。
完备对话:https://chatgpt.com/share/7e9bdcab-dba8-4b68-8742-877be9f1cc7e
再好比,比来我在测验考试使用 Docker Compose 来设置装备摆设一个新项目。进程中遇到了一些难题,我其时只想尽快让它运行起来,至于问题地点,盘算之后再细究。于是我采取了一种直接的办法:重复复制粘贴差错信息,直到终极获得了一个可以或许运行的办理计划。
完备对话:https://chatgpt.com/share/a58a95c5-b6c5-4e05-8b8f-29ee7d7a9755
我常常在许多环境下,一开端就要求获得一个完备的办理计划,然后追求若何对其进行改动的提醒。好比在此次对话中,我一开端哀求一个解析 HTML 的法式,随后又扣问有关 API 引用或其他可能的改良办法的提醒。
完备对话:https://chatgpt.com/share/211a98cc-225b-46c1-8602-ca7ac1b4945b
或者,还有一次,我想跟踪我的计算机在一段光阴内使用了若干内存和 CPU。我本可以花几分钟光阴找出恰当的敕令,并将它们组合成一个剧本来完成这项事情... 但我选择了更简单的办法,直接向语言模子告急来完成这项义务。
完备对话:https://chatgpt.com/share/8fb393e3-17dc-411b-8980-7baa89811093
比来我开端涉足一些电子范畴的事情,我有一个用 C 语言编写的法式,底本是为 Arduino 设计的,但我必要将其移植到树莓派 Pico 上,并使用 MicroPython 来运行。这个转换进程自己并没有太多技术含量,它只是一项必需完成的义务。是以,我没有亲主动手,而是选择让语言模子来代庖。
完备对话:https://chatgpt.com/share/6960ac4b-51e6-491e-934d-f048a9df69df
在另一个项目中,我必要应用一些先进的机械进修模子,在一个交互式轮回中对图像进行分类。我有才能本身编写如许的法式,但我选择直接哀求模子来帮我完成这项事情。
完备对话:https://chatgpt.com/share/dc8e2ac6-a918-44ab-b967-284373acb624
10入门科普专家
我比来开端对电子学发生了兴致。我年青的时刻做过一些电子项目,并在年夜学时代上过几门相关课程。但如今我想进行现实的电子项目,我发现有很多我不相识的细节,这闪开始任何项目都变得艰苦。
我本可以找一本适用电子学的册本来研读,大概未来我会这么做,以便更深刻地舆解这个范畴。但我不想把光阴花在感觉像进修的工作上。我之以是投身电子制造,部门缘故原由是为了从日常的浏览和撰写论文中临时抽离。
这便是年夜语言模子施展作用的处所。它们可能不具备天下上最顶尖专家的常识,但有成千上万,乃至数百万人知道任何我可能遇到的电子问题的谜底。是以,语言模子很可能也包括了这些谜底。它们乐于直接向我提供所需的谜底,让我可以或许在不纠结于细节的环境下享受乐趣。只管我可能经由过程互联网搜刮也能得到谜底,但在处置了一天繁杂的研讨代码之后,可以或许轻松地向模子提问,这种方便性其实令人觉得放松。
以下是我向语言模子提出的一些关于电子学根基的问题。这些谜底是否完善。不得而知。但你知道他比什么强吗。比我一窍不通要强得多。
(这篇文章已经相称冗长,到了这里,你可能和我一样,对浏览它觉得疲倦。是以,我将不再对这些例子进行评论。)
我扣问的一些根本 PCB 设计问题的例子:
完备对话:https://chatgpt.com/share/cc940032-77e0-4127-9074-b8ddc0147b40
我提出的一些根本的焊接问题:
完备对话:https://chatgpt.com/share/020723cf-610a-4f80-9b47-c74790a4df0d
我提出的一些根本的电容器问题。
完备对话:https://chatgpt.com/share/dca63ae7-0580-4090-959b-e2278115bc0e
我提出的一些根本的 LED 问题
完备对话:https://chatgpt.com/share/5caf55c6-1048-4904-b941-446b6e3e59c2
我还咨询了有关软盘的根基常识的问题。
完备对话:https://chatgpt.com/share/dcf4c9ae-af16-4b95-adf2-628b9e5dbb53
我可以继续举例,但我信任你应该已司理解了我的意思。
11更快办理有已知办理计划的义务
险些所有的工作,都曾有人做过,你想做的所有工作险些都不是新的。而语言模子长于的便是提供它们已经见过的办理计划。
在比来的一个项目中,我必要晋升一些 Python 代码的机能。于是我(1)哀求年夜语言模子用 C 语言重写它,然后(2)哀求它构建一个接口,使我可以或许从 Python 挪用 C 代码。
这些义务都不算「难」。将 Python 代码转换为 C 语言,我信任我可以在一两小时内完成。只管我不太相识 Python 到 C 的 API 是若何事情的,但我确信经由过程浏览文档我能弄清晰。
但假如必需本身来做,我可能永久不会开端这个义务。这并不是我看重的工作,我宁愿期待计算机来办理这个义务,而不是花光阴让它更快地运行那些我并不必要频仍执行的工作。
然则,将 Python 转换为 C 主要是一个技术流程,对付简单的法式来说,存在一个尺度的 Python 到 C 的挪用商定。以是我直接哀求年夜语言模子帮我完成这项事情。
自那以后,我预期这将是我可以或许做到的工作,根本上每当我想要一些快速的代码时,我都邑描写我想要的 Python 并哀求优化 C。
完备对话:https://chatgpt.com/share/aee2ea95-82ce-4647-b245-8db8f9512b49
在其他环境下,我也会采取雷同的办法,但假如我感到相比 C 语言的输出,更容易验证 Rust 语言输出的正确性,我就会哀求获得 Rust 代码而非 C 代码。
完备对话:https://chatgpt.com/share/7cd3e302-b525-4d41-ad76-492bee7393ff
再好比,并行化 Python 函数自己不是难事,可以经由过程 multiprocessing 库来实现。艰苦的处所是编写一些模板化的代码,之后它就主动完成了。但编写这些代码自己有些繁琐,会疏散你对现实事情的专注。如今,每当我必要进行并行化操作时,我就直接让年夜语言模子来代庖。
完备对话:https://chatgpt.com/share/5d228e09-fc98-4977-8829-f532ff0bc903
有时在测验考试测试一些 API 时,我会先写一个 curl 哀求,然后开端运作。一旦 curl 哀求事情正常,而且我必要以编程方式反复执行这个义务,我就会将其转换为 Python 代码。曩昔,我可能会采纳一些不太优雅的办法,好比使用 os.popen() 来执行 curl 敕令,但这种办法并不睬想。更好的做法是将其转换为使用 Python 的 requests 库,但这会消费一些光阴,以是我之前不会这么做。但如今,我可以直接哀求年夜语言模子来帮我完成这项事情,用更短的光阴得到一个加倍整洁的法式。
完备对话:https://chatgpt.com/share/0627f7e3-8f0e-431e-b245-a93d9d8ecce4
对付我即将在这里分享的一个新项目,我必要相识人们通常使用哪些装备作为简单的无线电发射器。由于我所追求的是一个通俗人可能会给出的谜底,以是年夜语言模子是抱负的选择。
完备对话:https://chatgpt.com/share/302541d0-dd99-4bd6-a8ed-9c43372f546e
12修复常见差错
在 2022 年之前,遇到流行对象或库的差错新闻时,我会遵循以下步调:
复制差错信息
粘贴到 Google 搜刮
点击排名靠前的 Stack Overflow 链接
核实问题是否与我遇到的环境符合;假如不是,返回第 2 步
利用保举的最佳办理计划
假如无效,返回第 2 步,测验考试分歧的搜刮词,祷告,等等
由于老实说,通常出问题的对象与你终极要办理的义务关系不年夜,你并不真正关怀若何让它正常事情,只愿望它能正常事情。那么在 2024 年,这一进程变为了:
复制差错信息
向 LLM 扣问「我该若何办理这个差错。」
依照年夜语言模子提供的计划,慢慢办理问题
假如它不起作用,请对 LLM 说「不起作用」
我没有展现这一进程的记载(或者说,我找了一个小时也没找到)。但现实上有一个好理由:我已经将它集成到了我的事情流程中。
作为 emacs 用户,我设置了我的情况,每当我运行的法式以非零状况码退出时(意味着呈现问题),它就会主动挪用当前最快的年夜语言模子,并要求它解释谜底,同时哀求一个可以直策应用的修复代码的补丁。
只管今朝的模子在年夜多半环境下还不敷以超出我,但它们正在靠近。看到年夜语言模子修复了个很难追踪的 bug 时,我会觉得异常惊喜——这 bug 是由于不知道哪儿的代码中有一个拼写差错。
13以及其他数不清的事
我上面提供的对话链接,仅代表了我客岁与年夜型语言模子(LLMs)互动总数的一小部门,还不到 2%。我没有链接到其他对话的缘故原由不是由于模子让我绝望(只管有许多如许的案例),而是由于(1)它们中的许多都与我已经提供的链接内容反复,或者(2)它们不容易解释,你也可能无法直观地舆解它们为何对我有所赞助。
我预期,将来我使用这些模子的频率将会连续增加。作为参考,我在 2024 年经由过程网页界面提议的 LLM 查询比 2023 年增长了 30%---至于经由过程 API 的查询增加,我无法给出确实数字,但我预测至少增长了 2 到 3 倍。
14评估 LLMs 的才能,而不是局限
在口试求职者时,我获得的最好建议是,依据候选人的才能和潜力来评价他们,而不是他们所不长于的。
我信任,假如我提出一些简单的问题,可能会让你感到本身不够称职。以一个极度的例子来说:天下上有十亿人说通俗话,而我连数到十都不会。假如有人让我加入通俗话的小学测验,我确定会考得乌烟瘴气。
即便在计算机科学的范畴内,也有许多我完全不相识的范畴。我对 SQL 的相识仅限于写出一个有用的 SELECT 语句。这真的是我独一会写的句子。
是以,我不太懂得为什么有人会在网上争论说年夜语言模子只是炒作,由于「它们乃至不克不及 XXX」。这里的 XXX 可能是:
... 计算一个句子中的单词数目。
... 写一首诗,每句话的首字母都是「a」。
... 做两位数的乘法。
... 从列表中随机选择一个元素。
你前次真正必要做这些工作,而且至心以为年夜语言模子是适宜的对象是什么时刻。
同样,我不会由于人类不克不及在脑海中进行 64 位整数的除法——这对计算机来说是一项异常简单的义务——而以为人类毫无用场。我以为,由于你可以构造出一个它们不克不及办理的义务就否认年夜语言模子是没故意义的。显然这是容易的——真正的问题是,你可否找到它们提供代价的义务。
法式员已经很清晰,某些事物对分歧的目标可能有效。想要编写操作体系。大概你应该使用 C 而不是 Python。没有人会说「看看 Python 有多傻,它乃至不克不及强制变量与 32 字节界限对齐。」这是由于 Python 不实用于这种抽象条理的问题。语言模子也是一样。它们在异常高的抽象条理上运行;你不克不及期望它们办理纵然是最简单的法式也能办理的义务。但你可以等待它们办理分歧类型的义务。
15结论
撰写本文,我有两个目标。
起首,就像我在文章开首讲的,我想说,年夜语言模子(LLMs)已经为我提供了极年夜的赞助。
其次,我常常看到有人再说,他们对 LLMs 感兴致,但不知道它们能若何帮到本身。愿望这篇文章能让你看到我是若何应用 LLMs 的。至少对我而言,LLMs 功效壮大。它们不是全能的,乃至做不到年夜多半工作。但现有的模子,已经为我提供了伟大的代价。
当我展现这些例子时,最常见的否决意见是:「这些义务很简单。任何计算机科学专业的本科生都能学会。」确切如斯。一个本科生,只需几小时的搜刮,就能奉告我若何正确诊断 CUDA 差错,哪些包可以从新安装。只需几小时的尽力,他们就能将法式用 C 语言重写。只需几小时的进修,他们就能掌握相关常识,解答我关于该主题的任何疑问。
遗憾的是,我没有如许一个随时待命、有求必应的本科生。但我拥有年夜模子。当然,年夜模子尚未成长到能办理我法式员事情中有趣的那些难题,今朝的模子只能处置简单义务。
回顾五年前,LLMs 最年夜的成绩便是写出一段听起来像英语的段落,它们能将一句话连贯地衔接到下一句,我们就已然觉得惊讶,它们险些没有现实用途。然而本日,它们已经至少进步了我 50% 的编程事情效力,让我从繁琐的事情中摆脱出来,构建了以前我从未测验考试过的器械。
以是当有人说「LLMs 只是炒作」,或者说「LLMs 没有给任何人带来任何现实代价」时,我很清晰他们错了,由于 LLMs 为我带来了代价。大概我是特例,大概我是独一找到让这些模子施展作用的人。但我只能代表我本身谈话。斟酌到 LLMs 明显晋升了我的效力——一个在使用 LLMs 之前已有 20 年编程履历的人——我想年夜概率还有其他人也能从中受益。
今朝我们讨论的还只是现有的模子。将来五年会若何成长,尚未可知,在下一篇文章中,我将对此进行一些猜测。但我不知道本身是应该是以觉得兴奋照样忧虑。
转载原创文章请添加微信:founderparker