正文
你可能会问,为什么还需要一篇文章来证明语言模型的用途呢?这难道不是显而易见的事实吗?但事实上,无论是在学术界、软件工程领域还是媒体行业,都有不少人声称LLMs毫无用处,只是一时的炒作,几年后将默默无闻,对世界没有任何影响。我要反驳这些观点,因为目前的LLMs已经证明了它们的实用性。
但同时,我也需要说明,另有一批声音同样强烈的人士持相反观点,他们认为现有模型能够取代所有程序员,人们不应再学习编程,因为不久后大家都将面临失业。虽然反驳这些观点不是本文的主旨,但我必须明确,我并不支持这种极端的看法。
此外,我也不会主张“目的正当化手段”,即便这些模型的训练确实存在诸多负面影响,我不认为应当因此而推广使用。
我充分意识到这些模型可能带来的负面后果,这些后果可能非常严重,包括但不限于散布错误信息、滥用、监控以及取代工作岗位(甚至有人担忧到人类灭绝的地步)。我将在不久的将来撰写一篇文章,深入探讨LLMs可能引发的危害,届时会在此放上链接。然而,这与语言模型是否有用的讨论是两码事——这正是我此处想要探讨的问题。
我也清楚你可能因为语言模型偏向于生成不准确的信息、重复已知事实、在面对复杂情况时可能彻底失败的倾向而不愿使用它们——可能我对这些局限性的了解比你更深。但本文不会讨论这些。因为我认为,尽管有这些不足,模型仍然是有用的。
此外,我也深知培训这些模型所涉及的伦理问题极具争议。你可能不赞成在未经许可的情况下使用人们的数据来训练它们(我对此的理解可能比你更深刻)。或许你关注的是那些为直接训练这些模型而获得微薄报酬的人。我承认这些都是问题,但本文也不打算讨论这些。
正如我已经多次强调的:我在这里讨论的,仅仅是这些模型在当前状态下是否实际有用。
我的背景简介
通常,我不是那种轻易相信任何事物的人。比如,尽管我经历了十年前信息安全界的加密货币热潮,我却从未参与撰写任何关于区块链的研究论文。我也从未拥有过任何比特币,因为在我看来,它们除了用于赌博和欺诈之外,没有任何实际价值。我一直持怀疑态度,每当有人向我宣称“某项新技术将改变世界”,我的反应总是冷漠。
因此,当第一次有人告诉我人工智能将极大地提升我的工作效率并改变我的日常工作方式时,我同样持保留态度,我的回应是:“见到实际效果我才会信。”
此外,我是一名安全研究员。在过去近十年的工作中,我专注于展示人工智能模型在面对未曾训练过的各种环境时如何彻底失败。我证明了只需对机器学习模型的输入进行轻微扰动,就能使其输出完全错误的结果;或者这些模型往往只是记住了它们训练数据中的特定案例,并在实际应用时简单重复。我深知这些系统的种种局限。
然而,现在我却在这里说,我认为当前的大型语言模型是自互联网问世以来,给我的生产力带来的最大提升。坦白说,如果今天要我在使用互联网和一个最先进的语言模型之间选择一种工具来解决工作中随机一个编程任务,我可能会选择使用语言模型的次数超过一半。
如何利用语言模型
以下是我如何利用大型语言模型(LLMs)来提升工作效率。
你可能对我所述的使用案例不感兴趣,甚至认为它们有些荒谬。也可能这些案例与你的需求不相关,这一点我也能理解。但我只能从个人角度出发。这些使用实例都是我在过去一年里与LLMs的交流记录中直接摘录的。
1、为我开发完整应用
去年,我创建了一个测验,让人们评估GPT-4在处理几个特定任务上的表现。这个测验非常受欢迎,获得了超过一千万的页面浏览量。你可能想不到,我几乎是让GPT-4为我编写了这个应用的全部初始版本。这一过程是通过一连串的问题进行的,我从询问应用的基本架构开始,然后逐步扩展其功能。整个对话长达30,000字,极大地测试了当时的GPT-4模型的能力极限。如果你翻看这些对话,会发现从我描述需求并请求模型完成全部实现的信息,到我请求做出具体修改的信息(如“不要比较平均分数,而是用核密度估计表示它是哪个百分位”),以及我提出一些完全不明确的问题时复制粘贴的错误信息(例如,“绘图错误:numpy.linalg.LinAlgError: singular matrix”),还有我仅仅询问简单单次问题的情况(比如“如何用JavaScript在页面上添加一个iframe,内容是从字符串加载的?”)。
这种方法之所以有效,主要是因为语言模型擅长处理人们已经解决的问题,而这个测验的99%内容只不过是一些基础的HTML和Python后端服务器,这是任何人都可以编写的。这个测验之所以引人关注并受到喜爱,并非因为其背后的技术,而是因为测验内容本身。通过自动化所有重复性的部分,我能轻松地完成这个项目。
实际上,如果没有语言模型的帮助,我可能根本就不会去创建这个测验,因为我不愿意花时间从头编写整个网页应用。尽管我擅长编程!我相信,即使是现有的模型,也足以让大多数人仅凭提问就能解决他们以前无法解决的重要任务。
我还有一些类似的例子以后介绍,其中我让模型为我编写了整个应用,当这些应用发布时,我会明确指出它们是在语言模型的协助下完成的。
2、作为新技术的向导
我曾经总能赶上各种新兴框架的步伐。但是一个人的时间毕竟有限,因为我的职业特性,我大多数时间都在跟进最新的研究进展,而不是最新的JavaScript框架。
这意味着当我开始一个不属于我研究领域的新项目时,我通常有两个选择:一是利用我已知的技术,虽然这些技术可能已经过时十年或二十年,但对于小项目来说通常足够了;二是尝试学习新的(通常也是更好的)方法。
这就是语言模型派上用场的时候。对我而言较新的框架或工具,比如Docker、Flexbox或React,对其他人来说可能已经相当熟悉了。世界上可能有成千上万的人已经非常了解这些技术。当前的语言模型也能做到这一点。
这意味着,我可以通过与语言模型的交互式学习,来掌握解决任务所需的任何知识,而不必依赖那些假设读者具备特定知识、目标明确的静态教程。
比如,今年早些时候,我在构建一个LLM评估框架时,希望能在一个受限环境中运行由LLM生成的代码,以避免它删除我的计算机上的随机文件等问题。Docker是完成这一任务的理想工具,但我之前从未使用过。
重要的是,这个项目的目标并非是要学会使用Docker,Docker只是我实现目标所需的工具。我只需要掌握Docker的10%,确保我能以最基本的方式安全使用它。
如果是在90年代,我可能需要购买一本关于Docker的书籍,从头开始学习,阅读前几章,然后试图跳读以找出如何实现我想要的功能。过去十年情况有所改善,我可能会在线搜索如何使用Docker的教程,跟着操作,然后搜索遇到的错误信息,看是否有人遇到相同的问题。
但在今天,我只需要请一个语言模型教我使用Docker。
3、开始新项目
回想起来,我最初接触的编程语言是Java。我非常喜欢编程,但有一件事我绝对讨厌:面对新项目的空白屏幕。特别是在使用Java时!甚至仅仅是让程序编译一个hello world程序——这个“public static void main string args”到底是做什么的?括号应该怎么放?哪些字母应该大写?为什么这里用花括号,那里用方括号?