转自 | AI深度研究员
导读 本文通过Nicholas Carlini的亲身经历,展示了大型语言模型(LLM)在实际工作中的应用,并探讨了AI技术如何改变我们的工作方式和提高生产效率。
全文目录:
1. 细微差别
2. 我的背景简介
3. 如何利用语言模型
4. 评价LLMs的能力,而非它们的局限
5. 结论
在当今科技界,关于人工智能是否被过度炒作的争论从未停息。然而,很少有像谷歌 DeepMind 的安全研究专家和机器学习科学家 Nicholas Carlini 这样的专家,用亲身经历为我们提供了一个独特的视角。通过他的文章,我们看到了大型语言模型(LLM)在实际应用中的强大能力和多样性。这些并非空洞的营销宣传,而是切实可以改变工作方式、提高生产效率、激发创意的工具。
事实上,Carlini 的经历可能预示着一个更广泛的趋势:随着 AI 技术的不断进步和普及,我们可能正站在一个技术革命的风口浪尖。就像个人电脑和互联网彻底改变了我们的生活和工作方式一样,AI 可能会成为下一个推动社会变革的关键力量。
那么,面对这样的前景,我们应该如何看待 AI 技术的发展呢?是抱有审慎的态度,还是积极拥抱变革?
原文如下:作者:DeepMind 安全研究专家和机器学习科学家Nicholas Carlini
使用我之前从未使用过的技术构建整个网络应用程序。 教我如何使用各种框架,尽管我之前从未使用过它们。 将几十个程序转换为C或Rust以提高10-100倍的性能。 精简大型代码库,显著简化项目。 为我在过去一年中撰写的几乎每一篇研究论文编写初始实验代码。 自动化几乎所有单调的任务或一次性脚本。 几乎完全取代了帮助我设置和配置新软件包或项目的网络搜索。 在帮助我调试错误信息方面,网络搜索的替代率约为50%。
细微差别
我的背景简介
通常,我不是那种轻易相信任何事物的人。比如,尽管我经历了十年前信息安全界的加密货币热潮,我却从未参与撰写任何关于区块链的研究论文。我也从未拥有过任何比特币,因为在我看来,它们除了用于赌博和欺诈之外,没有任何实际价值。我一直持怀疑态度,每当有人向我宣称“某项新技术将改变世界”,我的反应总是冷漠。
因此,当第一次有人告诉我人工智能将极大地提升我的工作效率并改变我的日常工作方式时,我同样持保留态度,我的回应是:“见到实际效果我才会信。”
此外,我是一名安全研究员。在过去近十年的工作中,我专注于展示人工智能模型在面对未曾训练过的各种环境时如何彻底失败。我证明了只需对机器学习模型的输入进行轻微扰动,就能使其输出完全错误的结果;或者这些模型往往只是记住了它们训练数据中的特定案例,并在实际应用时简单重复。我深知这些系统的种种局限。
然而,现在我却在这里说,我认为当前的大型语言模型是自互联网问世以来,给我的生产力带来的最大提升。坦白说,如果今天要我在使用互联网和一个最先进的语言模型之间选择一种工具来解决工作中随机一个编程任务,我可能会选择使用语言模型的次数超过一半。
如何利用语言模型
1、为我开发完整应用
我曾经总能赶上各种新兴框架的步伐。但是一个人的时间毕竟有限,因为我的职业特性,我大多数时间都在跟进最新的研究进展,而不是最新的JavaScript框架。
这意味着当我开始一个不属于我研究领域的新项目时,我通常有两个选择:一是利用我已知的技术,虽然这些技术可能已经过时十年或二十年,但对于小项目来说通常足够了;二是尝试学习新的(通常也是更好的)方法。
这就是语言模型派上用场的时候。对我而言较新的框架或工具,比如Docker、Flexbox或React,对其他人来说可能已经相当熟悉了。世界上可能有成千上万的人已经非常了解这些技术。当前的语言模型也能做到这一点。
这意味着,我可以通过与语言模型的交互式学习,来掌握解决任务所需的任何知识,而不必依赖那些假设读者具备特定知识、目标明确的静态教程。
比如,今年早些时候,我在构建一个LLM评估框架时,希望能在一个受限环境中运行由LLM生成的代码,以避免它删除我的计算机上的随机文件等问题。Docker是完成这一任务的理想工具,但我之前从未使用过。
重要的是,这个项目的目标并非是要学会使用Docker,Docker只是我实现目标所需的工具。我只需要掌握Docker的10%,确保我能以最基本的方式安全使用它。
如果是在90年代,我可能需要购买一本关于Docker的书籍,从头开始学习,阅读前几章,然后试图跳读以找出如何实现我想要的功能。过去十年情况有所改善,我可能会在线搜索如何使用Docker的教程,跟着操作,然后搜索遇到的错误信息,看是否有人遇到相同的问题。
但在今天,我只需要请一个语言模型教我使用Docker。
4、代码简化
真正的程序员想要理解某个工具的工作原理时会阅读参考手册。但我是个懒惰的程序员;我更愿意直接得到答案。因此,现在我向语言模型提问。
当我向人们展示这些例子时,有些人会变得有些防御性,他们说:“LLM没有做任何你不能用已有工具完成的事情!”你知道吗?他们说得对。但是,用搜索引擎能做的事,用一本关于该主题的实体书也能做;用一本实体书能做的事,通过阅读源代码也能做。
然而,每一种方式比前一种都简单。当事情变得更简单时,你会更频繁地做,而且方式上也会有所不同。
这就是我问“哪个$命令可以传递所有剩余参数”并获得答案的例子。(紧接着是另一个“我该如何使用这个东西”的问题!)这实际上是我最常用LLMs的方法之一。我之所以不能给你展示更多这样的例子,是因为我在Emacs和我的shell中都内置了查询LLMs的工具。因此,当我想要做这些事情的90%的时间,我甚至不需要离开我的编辑器。
在互联网上搜索内容曾经是一项需要学习的技能。你想在查询中包含哪些特定的词汇?它们应该是复数还是单数?过去时?你希望避免在页面上出现哪些词汇?我是想要X和Y,还是X或Y?
现在情况已经不同了。我想不起上次我在Google中使用OR的时间。我也想不起上次我使用减号(-)来移除结果子集的时间。在大多数情况下,今天你只需要写下你想要找的内容,搜索引擎就会为你找到。
但搜索引擎仍然不是100%的自然语言查询。它仍然有点像你在玩反向危险边缘游戏,试图使用答案中会有的关键词而不是问题。这是一项我认为我们几乎都忘记了我们学过的技能。
对于今天的一些简单任务(随着时间的推移会越来越多),语言模型只是更好。我可以直接输入“所以我知道+对应于__add__,但是是什么”,它会告诉我答案是__inv__。这是用标准搜索引擎很难搜索到的东西。是的,我知道有方法可以问,这样我就能找到答案。可能如果我输入“python文档元类"add"”,我可以搜索页面上的并得到答案。但你知道还有什么有效吗?只要问LLM你的问题。
这样做任何一次只节省几十秒的时间,但当你在解决某个编码任务的过程中,已经试图同时记住一百万件事时,能够将你试图解决的问题倾倒出来并得到一个连贯的答案是令人惊讶的。
这并不是说他们今天在这方面已经完美。语言模型只有在线上被足够频繁地重复时才知道事情。"足够频繁"是什么意思取决于模型,所以我确实需要花一些精力思考我是应该询问模型还是询问互联网。但模型只会变得更好。
或者,每当我遇到随机崩溃时,我会将模型转储我所看到的并要求解释,就像我在这里做的那样,当我只是输入zsh没有找到匹配的“远程通配符传输问题”。或者,作为一个完全独立的例子,我去年在写一篇博客文章时,想要第一个字母大写,让其余的文字环绕它,就像我在这句话中所做的那样。现在这被称为下沉式大写字母。但我不知道这个。我只知道我想要的效果,所以问语言模型“我想让它看起来像一本华丽的书,文字围绕O”,它给了我我想要的东西:这个任务是另一个属于“我只是因为LLMs才做的”类别——我不会认为花大量时间弄清楚如何做是值得的。但因为我可以直接问模型,我就这样做了,它让我的帖子看起来更好一些。
有两种类型的程序。首先,你有一些你想要正确完成的程序;它们将会存在一段时间,因为你需要维护它们好几年,所以代码的清晰性很重要。然后,你有那些只存在大约25秒的程序;它们将帮助你完成某些任务,然后立即被丢弃。
在这些情况下,我根本不关心代码的质量,而且程序是完全独立的,我现在几乎专门使用LLMs来为我编写这些程序。
请注意:大多数这些情况再次出现,你会看着它们说“就这?”。但就像我之前说的,我每天只有那么多小时来处理一个项目。如果我能节省编写一次性使用的程序的时间和精力,我会选择这样做。
可能最常见的例子是帮助我生成一些图表,以可视化我作为某些研究实验结果生成的一些数据。我有几十个这样的例子。可能接近一百而不是零。它们看起来基本上都一样,这里只是一个例子:或者,另一个类似的例子,当我有一种格式的数据并想将其转换为另一种格式的数据时。通常这是我只需要做一次的事情,一旦完成,我就会扔掉生成的脚本。但我还可以给你举出一千个其他例子。通常情况下,当我有一个足够简单的脚本想要编写时,我会直接请求LLM整体编写。例如,这里我请求LLM为我编写一个脚本,让它大声读出我的论文,这样我可以确保它们没有愚蠢的语法问题。在许多情况下,当我不太清楚我想要什么时,我也会从请求模型提供一些初始代码开始,然后从那里进行迭代。例如,这里有一个一次性任务,我只是需要快速处理一些数据。在2022年,我会花两分钟用python编写这个,然后等待几个小时因为它只运行一次——优化它所需的时间会比python程序运行的时间还要长。但现在呢?你敢打赌我会花同样的两分钟请求用Rust代码为我处理数据。或者这里是另一个例子,我请求模型为我下载一个数据集,并对其进行一些初始处理。这对我来说容易做吗?可能是。但这不是我想要考虑的任务;我想要考虑的是我将要用数据集做的研究。消除分心非常有价值,不仅仅是节省几分钟的时间。
另一次,我编写了一个程序,这样我就可以用小立方体3D打印一些像素化的图像。为此,我想将PNG转换为STL文件;但这不是项目的重点。这只是沿途必须发生的事情。所以我请求LLM为我解决这个问题。或者,作为另一个例子,我最近想使用Docker Compose来设置一个新项目。我遇到了一些问题,只想让它运行起来,然后我会弄清楚出了什么问题。所以我只是来回几次,我所做的就是复制一个又一个错误消息,直到它最终给我一个有效的解决方案。我还会发现自己在很多情况下首先请求一个完整的解决方案,然后请求如何修改它的提示。在这次对话中,我首先请求一个解析HTML的程序,然后请求API参考或其他改进方式的提示。最近我一直在尝试做一些电子产品相关的事情,我有一个在Arduino上运行的C程序,但我希望它在树莓派Pico上以MicroPython运行。这个转换过程没有什么有趣的;它只需要完成。所以我没有亲自完成工作,只是请语言模型为我做。对于另一个项目,我需要用一些花哨的ML模型在一些交互循环中分类一些图像。我本可以自己编写,或者我可以直接请求模型为我做。
10、解释事物给我听
我最近开始对电子学产生了兴趣。我年轻的时候做过一些电子项目,并在大学期间上过几门相关课程。但现在我想进行实际的电子项目,我发现有许多我不了解的细节,这让开始任何项目都变得困难。
我可以去读一本关于实用电子学的书。我可能真的会在某个时候这么做,以便彻底理解这个主题。但我并不想把我的时间花在感觉自己在学习上。我从事电子学的部分原因是想从整天的阅读和写作中抽身而出。
这就是LLMs发挥出色的地方。它们可能不如世界上最出色的专家那样知识渊博,但成千上万的人可能知道我可能会提出的任何电子问题的答案。这意味着语言模型很可能也知道答案。它乐于为我提供所有问题的答案,使我可以享受乐趣而不必纠结于细节。虽然我完全可以通过在互联网上搜索来找到答案,但在忙碌一整天后,简单地让模型为我完成这些工作的便利性使我感到非常放松。
这里是一些例子,展示了我如何询问语言模型有关电子学中事物工作原理的基本问题。这些答案完美吗?谁知道呢。但你知道它们比什么更好吗?比我什么都不知道要好。
11、解决具有已知解决方案的任务
几乎所有事情都已经有人做过了。你想做的事情几乎没有什么是真正新颖的。语言模型特别擅长提供它们之前见过的事物的解决方案。
在最近的一个项目中,我需要提升一些Python代码的性能。因此,我(1)请求LLM将其重写为C语言,然后(2)请求它构建一个接口,以便我能从Python调用C代码。
这些任务都不是“难”的。将Python转换为C是我确信自己能在一两小时内完成的。尽管我不完全知道Python到C的API如何工作,但我相信我可以通过阅读文档来了解。但如果需要我自己来做,我永远不会去做。它不是关键路径上的一部分,我宁愿等待计算机解决问题,也不愿花时间加速那些我不经常需要运行的任务。
但是,将Python转换为C主要是简单程序的技术过程,而且有一个标准的Python到C的调用约定。所以,我直接请求LLM来帮我完成。
从那以后,我开始期待这是我可以做到的事情,几乎在任何时候,当我需要一些高速的代码时,我会用Python描述我想要的内容,并请求生成优化的C代码。其他时候,我做同样的事情,但如果我认为比较Rust输出和C输出的正确性更容易的话,我会请求Rust输出。或者,作为另一个例子,用multiprocessing库并行化Python函数并不困难。你需要编写一些样板代码,基本上它就会为你完成。但编写代码有点痛苦,会妨碍你想要完成的实际工作。现在,每当我需要做这个时,我只会请求一个LLM来帮我。还有很多时候,当我尝试测试某个API时,我最初会编写一个curl请求来开始。一旦它开始工作,我想以编程方式重复任务,我就会将它转换为Python。以前,我通常会做些非常丑陋的事情,直接调用os.popen()运行curl命令,但这并不理想。更好的方法是将其转换为Python的requests库;但这需要时间,所以我不会这么做。但现在我可以简单地请求一个LLM帮我完成,并在更短的时间内获得一个更干净的程序。对于即将到来的一个项目,我可能会在这里讨论,我需要了解人们通常用作简单无线电发射器的是哪些东西。因为我真正想要的是大多数人的答案,LLM是一个完美的选择!
在2022年之前,当我遇到某些流行工具或库的错误信息时,我通常会采取以下步骤:
复制错误信息。
将其粘贴到Google搜索。
点击最顶部的Stack Overflow链接。
确认问题是否与我遇到的一致;如果不是,返回第2步。
如果无效,返回第2步,更换搜索词,祈祷等。
因为,坦白说,通常出问题的工具与我最终想要解决的任务差距很大,我其实并不太关心如何使其工作,我只需要它能工作。2024年现在这个流程是怎样的?
复制错误信息。
向LLM询问:“我该如何修复这个错误?(错误)”
如果无效,反馈“那不起作用”。
我没有任何对话记录来展示这些例子。(或者说,我找了一个小时也没有找到。)但这实际上有一个很好的原因:我已经将它整合进我的工作流程中了。
我是一个Emacs用户。我设置了我的环境,每当我运行一个程序并且它以非零状态码结束时(意味着有错误发生),它会自动调用最新最快的LLM,并要求它解释答案,同时请求一个可以直接应用来修复代码中bug的补丁。
现今的模型大多数情况下还不足以在这项任务上胜过我,但它们正在逐渐进步。偶尔,当LLM修复了一个我知道如果自己追踪可能非常困难的错误时,我会感到非常惊喜,尤其是当错误只是因为某处的小笔误。
13、以及无数其他事情
我上面提到的所有对话只占我过去一年与LLMs互动总数的不到2%。我没有提供其他链接的原因并不是因为这些是模型失败的案例(尽管有很多这样的案例),而是因为:(1)许多互动重复了我已经提到的那些模式,或(2)它们不容易解释清楚发生了什么,也不容易让你自己看到它们为何对我有用。
我完全预期未来我使用这些模型的频率会持续增长。作为一个参考,我在2024年通过网页界面进行的LLM查询比2023年增加了30%——而且我甚至无法计算API查询的增加,但我猜测至少增加了2到3倍。
评价LLMs的能力,而非它们的局限
... 计算句子中的单词数! ... 写一首每个单词都以字母“a”开头的诗 ... 乘以两位数 ... 从列表中随机选择一个元素
结论
撰写这篇文章的初衷有两个。首先,正如我在文章开头所述,我想证明LLMs已经为我提供了大量的价值。此外,我注意到很多人表示喜欢使用LLMs的想法,但不知道它们能如何帮助自己。因此,如果你是这些人之一,希望通过我的使用案例能看到一些示例。
因为至少对我来说,LLMs能做很多事。它们不能做所有事情,甚至不能做大多数事情。但当前的模型,正如它们现在存在的样子,为我提供了可观的价值。
在展示这些示例后,我经常收到的一种反驳是:“但这些任务很简单!任何计算机科学的本科生都能学会如何做到!”确实,本科生可以通过几小时的搜索来告诉我如何正确地诊断CUDA错误以及可以重新安装哪些包。本科生可以通过几小时的工作重写那个程序为C语言。本科生可以通过几小时的学习相关教科书来教我任何我想知道的关于那个主题的内容。不幸的是,我没有一个随时可以回答我任何问题的神奇本科生。但我有语言模型。所以,虽然语言模型还不够好,不能解决我作为程序员工作中的有趣部分,而且当前模型只能解决简单的任务。
但五年前,LLM最好的能做的就是写出看起来像英语的段落。当它们能从一个句子到下一个形成连贯的思想时,我们都感到惊讶。它们的实际用途几乎为零。然而,今天,它们已经提高了我在项目中编程方面的生产力至少50%,并消除了足够多的繁琐工作,让我能够创建一些我否则永远不会尝试的东西。
因此,当人们说“LLMs只是炒作”和“所有LLM都没有为任何人提供实际价值”时,很明显他们是错误的,因为它们为我提供了价值。现在,也许我是个例外。也许我是唯一找到了让这些模型有用的方法的人。
我只能代表我自己。
往期推荐
火山引擎基于大模型 ChatBI 的演进与实践
AI改变工作:一天内打造专属于你自己的RAG
多智能体系统(OpenAI Swarm)的可观测性研究实践
京东数据架构解析:供应链效率提升与决策优化策略
大模型推理之显存优化探索实践
蚂蚁集团、网商银行统一动态纠偏框架,非随机缺失问题优化新视角
大模型时代下的私有数据安全与利用
打破数据访问壁垒:Alluxio在AI/ML场景中的应用与实践
独家专访李飞飞爱徒,斯坦福AI博士,a16z投资千万美元,AI视频月收入飞涨200%
对话Nvidia黄仁勋:机器学习不仅是关于软件,而是涉及整个数据管道;机器学习的飞轮效应是最重要的
点个在看你最好看
SPRING HAS ARRIVED