谷歌科学家Nicholas Carlini:17个AI用法让打工人效率翻倍,为什么需要编译程序
我们相信,不少行业的从业人员已经将大模型融进工作流甚至日常生活中去了,也不得不承认大模型的普及率还没有达到顶峰,没有达到人人皆用的程度。
从实用角度出发,造成阻碍的因素是什么?普通人该如何使用大模型?大模型对于每个人的具体益处到底是什么?
谷歌DeepMind 研究科学家 Nicholas Carlini,一位机器学习和计算机安全领域的大牛。以最贴近现实实用的角度,分享了他对大模型的看法,以及自己对大模型应用的50个案例。
乌鸦君做了部分精简,并摘取了17个人们在工作和生活中经常能够用到的案例 , 相信会对你有所帮助,以下为正文:
有的消息里,我只是用文字描述自己的需求,让模型给出完整的实现方案;有的消息里,我提出具体的修改要求.
我做的这个小测试,99%的部分不过是基础的HTML和Python网络服务器后端代码,门槛很低。
事实上,我可以笃定地说,如果没有大语言模型的帮助,我很可能根本不会去做这个测试,因为我可不想花时间从头开始编写整个网络应用程序。
而我还是个懂编程的人!我相信,即便是现有的大语言模型,也足以让绝大多数人通过询问解决方案,去完成他们以前根本无法完成的有意义的任务。
接下来我还有几个类似的例子,我让大语言模型为我编写了完整的应用程序。等这些应用发布时,我会明确说明它们是在大语言模型的帮助下完成的。
但一个人一天的时间有限,而且由于工作的原因,我大部分时间都花在了解最新的研究进展上,而不是JavaScript框架的最新动态。
这就意味着,当我要开展一个超出我特定研究领域的新项目时,通常有两种选择。其一,我可以使用我熟悉的技术。
这时,大语言模型就派上用场了。像Docker、Flexbox或React这类对我来说全新的框架或工具,对其他人而言并不新鲜。
这意味着,我无需阅读那些假定读者具备特定知识、想要实现特定目标的静态入门教程,而是可以与大语言模型进行交互式学习,掌握解决任务所需的一切知识。
例如,今年早些时候,我在构建一个大语言模型评估框架,希望能在一个受限的环境中运行大语言模型生成的代码,避免它删除我电脑里的随机文件之类的情况。
要是在90年代做这件事,我基本上得买一本从基础讲起的Docker使用手册,读完前几章,然后跳着阅读以弄清楚如何实现我的需求。
后来情况有所改善,如果是在过去十年做这件事,我会在网上搜索一些介绍Docker使用方法的教程。
比如,最近我想写一些CUDA代码,来对比在GPU上进行简单贪心搜索和在别人优化过的高效CPU上实现的性能差异。
搜索结果的前5条往往是垃圾内容农场产出的,里面的代码还是2008年的,而且有很多bug,只是为了搜索引擎优化(SEO)更新了一下,根本没法用。
这样我就能测试是否能成功编译并将代码上传到设备上,引脚是否都设置正确,从而基本掌握操作方法。
所以,我直接让大语言模型给我一个闪烁程序的代码。(再说一次:网上肯定有这样的代码,但我还得去搜索。)
我懂Python(信不信由你!),所以在解决了MicroPython的特殊问题后,我就可以直接继续编辑代码。
就连本节开头提到的例子也不是虚构的,我就曾询问如何使用Flexbox,因为我上次学习新的HTML布局方式还是用div标签替代表格的时候。
作为一名安全研究员,我经常会拿到一个包含别人数千行研究代码的新代码库,我得先弄清楚它的工作原理,然后才能对其发起攻击。
研究人员并没有动力去发布规范整洁的代码,所以很多人会把能运行的代码随便一放就发布了(我自己也会这样)。
有一个很棒的C++工具叫Golly能实现这个功能,但我不想把我的Python代码重写成C++代码。
这是那些令人烦恼的任务之一,如果由我来做,我可能永远不会完成。但现在我可以请求别人帮我完成,我得到的东西比我原来的Python代码快了100倍。
这是另一类让人头疼到我可能永远都不会自己去做的任务。但现在我只需提出需求,就能得到解决方案。
这并不炫酷,说“我用大语言模型让生活变得更轻松,不过是做了些无聊的事”也不会在网上引起轰动,但这却是实实在在的帮助。
大多数Python反汇编器只支持Python3.7及更早版本,无法处理我手头的3.9二进制文件。
再比如,当我需要将一些非结构化数据整理成结构化格式时,大语言模型也能帮上忙。有一次我在做某个项目,需要一份包含书名和作者姓名的列表。
于是我粘贴了差异和之前如何将差异转换为HTML的示例,并让LLM按照之前的格式为我生成差异。
另外,在工作中我经常需要为使用的资源生成引用。谷歌学术可以方便地为论文生成引用,我只需复制粘贴就行。
但为网页生成引用有点麻烦,最近我就直接让大语言模型帮我生成(当然,我会检查生成的引用是否正确)。
你会看到他们花上几分钟,甚至几小时去完成一个本来可以通过某种宏或者巧妙运用并行应用来自动化完成的任务。
我在网上找到一个用C语言写的实现,里面有很多类似“#defineKEYNAMEkey_code”的语句,我想把这些语句转换成一个Python字典,将整数代码映射到对应的字符串。
当我向人们展示这些例子时,有些人会变得有些防御性,他们说:“LLM没有做任何你不能用已有工具完成的事情!”
但是,用搜索引擎能做的事,用一本关于该主题的实体书也能做;用一本实体书能做的事,通过阅读源代码也能做。
然而,每一种方式比前一种都简单。当事情变得更简单时,你会更频繁地做,而且方式上也会有所不同。
这就是我问“哪个$命令可以传递所有剩余参数”并获得答案的例子。(紧接着是另一个“我该如何使用这个东西”的问题!)这实际上是我最常用LLMs的方法之一。我之所以不能给你展示更多这样的例子,是因为我在Emacs和我的shell中都内置了查询LLMs的工具。因此,当我想要做这些事情的90%的时间,我甚至不需要离开我的编辑器。
现在情况已经不同了。我想不起上次我在Google中使用OR的时间。我也想不起上次我使用减号(-)来移除结果子集的时间。
在大多数情况下,今天你只需要写下你想要找的内容,搜索引擎就会为你找到。但搜索引擎仍然不是100%的自然语言查询。
我可以直接输入“所以我知道+对应于__add__,但是是什么”,它会告诉我答案是__inv__。这是用标准搜索引擎很难搜索到的东西。
可能如果我输入“python文档元类add”,我可以搜索页面上的并得到答案。
只要问LLM你的问题。这样做任何一次只节省几十秒的时间,但当你在解决某个编码任务的过程中,已经试图同时记住一百万件事时,能够将你试图解决的问题倾倒出来并得到一个连贯的答案是令人惊讶的。
足够频繁是什么意思取决于模型,所以我确实需要花一些精力思考我是应该询问模型还是询问互联网。但模型只会变得更好。
程序可以分为两类。第一类是你希望能做好的程序,它们会存在一段时间,代码的整洁度很重要,因为未来几年你都要维护它们。
最常见的例子可能是帮我生成可视化研究实验数据的图表。我有几十个这样的例子,可能接近上百个而不是零个。
还有一个类似的例子是,当我有某种格式的数据,想把它转换成另一种格式的数据时。通常我只需要做一次,完成后就会扔掉生成的脚本。
比如,我让大语言模型给我写一个脚本,把我的论文读出来,这样我就能确保论文没有愚蠢的语法错误。
很多情况下,当我不太清楚自己想要什么时,我也会先让模型给出一些初始代码,然后再在此基础上进行迭代。
在2022年,我会花两分钟用Python编写代码,然后等上几个小时让它运行,因为这个程序只运行一次——优化它所花的时间比程序运行的时间还长。
于是,我和模型来回交流了好几次,我只是不断复制错误信息发过去,直到它最终给了我一个可行的解决方案。
我可以去读一本关于实用电子学的书。我可能真的会在某个时候这么做,以便彻底理解这个主题。但我并不想把我的时间花在感觉自己在学习上。
这就是LLMs发挥出色的地方。它们可能不如世界上最出色的专家那样知识渊博,但成千上万的人可能知道我可能会提出的任何电子问题的答案。
这意味着语言模型很可能也知道答案。它乐于为我提供所有问题的答案,使我可以享受乐趣而不必纠结于细节。
虽然,我完全可以通过在互联网上搜索来找到答案,但在忙碌一整天后,简单地让模型为我完成这些工作的便利性使我感到非常放松。
在下面这次交流中,我一开始让它写一个解析HTML的程序,之后又询问关于API参考或其他改进方法的提示。
我本可以花几分钟找出合适的命令,然后把它们组合成一个能实现我需求的脚本……但我也可以直接让大语言模型帮我搞定。
最近我在捣鼓一些电子方面的东西。我有一个能在Arduino上运行的C程序,但我想让它在树莓派Pico上以MicroPython的形式运行。
几乎所有事情都有人做过。你想做的事情几乎没有真正新颖的。而大语言模型非常擅长为它们见过的问题提供解决方案。
于是我(1)让大语言模型把代码重写成C语言,(2)让它构建一个能让我从Python调用C代码的接口。
把Python代码转换成C代码,我相信自己花一两个小时也能完成。虽然我不太清楚Python到C的API是如何工作的,但我相信通过阅读文档也能弄明白。
不过,对于简单的程序来说,把Python转换成C(大部分情况下)是一个技术流程,而且有一套标准的Python到C的调用规范。
基本上,任何时候我想要一段快速运行的代码,我就用Python描述需求,然后让模型生成优化后的C代码。
说实话,通常出问题的工具和你最终要完成的任务可能隔了好几层关系,你其实根本不在乎它具体是怎么运作的,只希望它能正常工作就行。
我没有相关的对话记录可以给你展示这些例子(或者说,我花了一个小时也没找到),但其实有个很好的原因:
我是Emacs用户。我对自己的工作环境进行了设置,每当我运行一个程序,若它以非零状态码退出(意味着出现了问题),系统会自动调用当前最快的大语言模型,让它解释错误原因,并同时请求一个可以直接应用到代码中修复该错误的补丁。
时不时地,当大语言模型修复了一个我知道会很难追踪的错误(比如某个地方的拼写错误)时,我都会感到惊喜。
我没有展示其他对话的原因,并非是模型在这些对话中让我失望了(虽然这样的情况也不少),而是因为:
作为参考,2024年我通过网页界面向大语言模型发起的查询比2023年多了30%——我甚至都没法统计通过API发起的查询增加了多少,但我猜至少是原来的两到三倍。
我在面试求职者时得到的一条最佳建议是:根据一个人能做什么来评估他们,而不是看他们不能做什么。
如果,有人让我参加一场普通话小学考试,我肯定会惨败。即使,在计算机科学领域内,也有很多我一无所知的领域。
同样的道理,我不会因为人类无法在脑海中计算64位整数的除法(这对计算机来说是小菜一碟)就认为人类完全无用。