揭穿号称首位人工智能软件工程师 Devin 能在 Upwork 接活的谎言![译]
前言
这是"互联网的错误"节目。我是卡尔。要说的第一件事就是,这里有个谎言。这个视频分为三部分。首先,我们会讨论那个声明。然后会谈论原本应该做什么。Devin 实际上做了什么,它如何做到的,及其效果如何。
AI 的发展和过度炒作
我从业软件行业已经 35 年了。我并不反对高新科技。但我确实反对过度炒作。这也是我做这个视频的原因。Devin 在大约一个月前被推出。被吹嘘为世界上第一个 AI 软件工程师。我并不认同它是第一个软件工程师。我已经对此拍摄了一个视频。我会在简介里放上链接。但今天要谈论的是一个具体的声明。即视频简介的第一句话。"看 Devin 如何通过处理混乱的 upwork 任务来赚钱。"这个声明是不正确的。你在视频里看不到这一点。视频里并未发生这种情况。然而,更糟糕的是,由于一些人不断重复并夸大这一说法,引发了公众的恐惧、不确定感和疑虑。他们这么做可能是为了增加点击率,或者希望自己的内容能够走红,或者只是想跟上时代的潮流。总的来说,对 Devin 的炒作简直疯狂。而这个声明似乎成为了这场炒作的支点。
为了记录,我个人认为生成式 AI 很酷。我经常使用 GitHub Copilot。我使用 ChatGPT、Llama 2、Stable Diffusion。所有这些工具都很酷。但是,撒谎关于这些工具的功能对所有人都是不公正的。因此,Devin 完成了一些令人印象深刻的工作。我希望这家公司本可以保持真诚,简单地承认这一成就。但他们没有这么做。他们不得不假装它的功能远超实际。
现在,我无意贬低那些真正开发 Devin 的工程师们的贡献。我认为 Devin 在很多方面都很出色。特别是,我不是要针对视频中的那位朋友。谎言不在视频中,而是在视频的描述和公司发出的推文中,以及那些一再重复这一谎言的文章和人们中。这种行为不应被接受。公司不应该在没有受到指责的情况下撒谎。人们也不应该未经核实就重复互联网上的言论。我知道这似乎是徒劳无功,但我愿意为此坚持到底。由于没有看到其他人在解释这是个谎言,看来要解决这个问题,我需要亲自出马。在你觉得这种谎言无伤大雅之前,请认识到这确实能造成实质的伤害。你可能是有一定技术背景的观众,请记住,很多人只看标题,不读正文,他们并没有技术背景。这些谎言导致非技术人员错误地认为人工智能的能力远超当前水平,从而引发了多种问题。
人们对于 AI 的怀疑不足,对 AI 的输出也缺乏必要的警觉性。目前对 AI 盲目信任已让许多人面临困境。可以搜索"AI Lawyer fake cases" 或"AI fake scientific papers"了解具体情况,这些只是一些显著的案例。这种情况也对真正的软件专业人员造成了伤害,因为有人会信任 AI 生成的代码,这意味着网络上将出现更多的错误,而现在网络的状态已经很糟糕了,漏洞和黑客活动层出不穷。糟糕的代码越多,对每个人的生态环境的影响就越恶劣。
Devin 应该完成的工作
现在我们来讨论第二部分。Devin 应该完成的工作是什么?这是视频的开始或较早的部分。请注意,屏幕左下角标有我已经给你即将分析的每一帧都标上了时间码。现在我们来到了视频的 2.936 秒处,如果你对某个具体细节感兴趣,或想要知道更多我讨论内容的背景信息,你可以自行查看。
这就是 Devin 在 Upwork 上的工作情况,我们稍后详谈。首先,请看看屏幕左上角。注意到他们搜索过这个内容。因此,这不是随机的工作。这不是...Devin 可以在 Upwork 上承担任何工作,对不对?这是他们精心挑选的。这并不一定具有欺骗性。你可能也会这么期待。但请记住,这意味着 Devin 在其他大部分工作上可能比这一次的表现还要差,而这次的表现就已不尽人意。
再来看看那个特定请求的细节,在下面,那才是客户真正需要的。我想要利用这个库来进行推理。你需要提供详细的操作指南。我不想讨论完成这项工作预计需要的时间。Devin 没有提及这一点。没关系,我不在乎这个。但你看,这才是 Devin 实际被告知的内容。这是直接复制并粘贴给 Devin 的。我希望利用这个模型在库中进行推理。这是那个库。请自己弄明白。
好的,回到工作本身。你需要提供的是如何在 AWS 的 EC2 上操作的详细指南。简单地说"请自己弄明白"和提供 AWS 的 EC2 实例操作的详细指导是不一样的。记录一下,视频末尾这是 Devin 生成的报告。报告中根本没有提及客户实际所需。
那么,这份工作的最终成果应该是什么呢?首先,你要明确的是怎样开始这项工作。你将需要在云端配置一个实例。确定实例的大小、类型、所需的内存等,这些都要弄清楚。你需要向客户询问,他们是更倾向于一个运行更快但成本更高的实例,还是一个更经济但运行较慢的实例?这个系统需要持续在线吗?随时可以处理提交的任务并给出回应吗?还是你计划在使用后关闭以节省开支?
你如何处理你需要进行推理分析的资料?如何处理你需要分析的图片?你将怎样把这些上传到服务器?可以设立一个网页界面来处理。你也可以通过 SSH 上传,或者放在 S3 bucket 里。那输出结果的访问方式又是怎样的呢?这些都是你必须了解的问题。
这也是我之前视频里提到的,软件开发者的工作中一部分,那些 AI 做不好的部分。难点、关键、复杂、耗时的部分主要是与客户、上司及其他利益相关者的沟通。弄清楚到底需要处理什么,反复讨论,说:"这么做会简单很多,我们就这么做如何?"这些都是 AI 目前无法完成的任务,而这些恰恰是我们所做的非常重要的事情。
这就是 AI 开始错误行动的例子。遗憾的是,这是在 upwork 上的情况。因此,对于那些未来可能会遇到这个情况的人来说,像这样的提案请求很糟糕。如果可能,尽量避免。合理的提案请求流程会包含问答环节。他们会说明他们的需求,你向他们提出问题,其他供应商也会提出问题。他们会回答所有问题,然后将答案公布给所有人,之后开始投标。
因为在 upwork 上不能这么操作,因为平台不支持,接下来最好的做法 (虽然并不是很好) 是你罗列所有问题,选择那些可以最大限度减少你工作量的答案。然后在你的提案开头明确说明,"这些是我所做的假设。如果这些假设有任何不符,可以重新协商,但这意味着成本会上升。"因为你要尽可能地低报价,同时确保客户明白,你的出价是基于这些假设的,如果他们需要不同的实现方式,就必须付出更多。这不是一个好的投标流程,但如果你必须这样做,就按此方式进行。
此任务的交付内容应该包括:哪种云实例类型、哪种操作系统和镜像的使用以及如何设置、安装环境 (关于 CUDA、APEX、PyTorch,如果你不熟悉这些并不重要)。还需要说明如何安装该代码库,这是一个四年前的库,你需要要么更新这个库以便适用于现代 Python 及其库,或者你需要解释如何安装一个四年或更旧的环境,必须选择这两种方案中的一种。你需要向客户解释如何将数据上传至实例,他们如何从实例下载输出结果等。
我实际上重现了 Devin 的工作,我们稍后还会详谈此事。这是我使用的实际实例的规模。我选择了 Vulture 而不是 AWS,因为 AWS 的界面复杂不易操作,不适合制作视频。而且,到这个视频被编辑和发布时可能已经有新版本发布,导致数据出错。因此,这种方式稳定性更高,操作也更简单。对于这项工作,为客户着想,本来打算在 AWS 上完成的。我们不知道 Devin 使用了什么样的图片。他们没有透露任何信息。如果你喜欢自虐,这里有个链接,可以看到完整视频,我会现在放在描述中。整整 35 分钟 55 秒,复制 Devin 所做的一切。如果你真的没事干,不妨看看。我认为透明度很重要,这视频虽然无聊,但至关重要。我希望那些制造 Devin 的公司及其他在网上发表此类声明的人,能够真的发布原始视频,让我们在必要时可以核实他们的声明。
好的,接下来的部分。考虑到 Devin 没有按客户的要求行事,他的报告也没有包含客户要求的内容,Devin 实际也没有得到任何报酬,那 Devin 到底做了什么呢?如果没有赚钱,它究竟产出了什么,工作做得好不好呢?
Devin 实际上做了什么
这是视频的一个截图。这就是被提到的 Repo。我们稍后再回到这类屏幕。这是 Devin 第一次真正的变动。这是一个名为 requirements.txt 的文件,它规定了代码的依赖库版本。并且它必须改变一些事情,因为这个代码库最初依赖的一些库是四年前的版本,而现在其中一些库已经不再提供下载,因为它们已被出售,所以不得不进行了一些修改。这里提到 Devin 正在更新代码。这种说法在某种程度上可以成立。我认为这更多的是在修改配置文件,而非代码更改,但这也说得过去。Devin 能够做到这一点确实令人赞叹。如果这个工具仅仅是调整了所有 requirements.txt 以使它们一致,那将大大节省我的时间。这将是一个很棒的功能。所以,能做到这一点很好。我不确定是否将其称为代码,但这是真正需要完成的工作的很小一部分。
与客户的要求相比,他们基本上希望建立自己的推理能力。Devin 被告知只使用样例数据就可以,因此这正是我复现 Devin 操作时所做的。通常情况下,应该比这更复杂,但我们将展示 Devin 实际所做的。好的,Devin 很早就遇到了一个错误。我没有遇到这个错误,马上你会看到原因。在这里仔细看,这是一个命令行错误。
在顶部,我们遇到了与打开图像、文件未找到、无此文件或目录相关的错误。这个错误出现在一个名为 visualize_detections.py 的代码文件中。我没有遇到这个问题,是因为在那个代码库中不存在名为 visualize_detections.py 的文件。我不确定那个文件从哪来的,但关于这个问题的更多信息稍后会提供。回到命令行,如果你放大窗口的其他部分,你会看到这些。Devin 将一些内容写入一个名为 inspect_results.py 的文件中接着运行 Python 执行这个文件结果出现了语法错误。在 Python 文件中使用反斜杠 n 是不行的它不是这样工作的。echo 命令也不该这么使用。这整个过程都是错误的毫无意义。这可能是由于人为疏忽而进行的操作然后你会突然意识到,"哦,对了,我应该改变我的方法。"
但现在看来,Devin 在创建这些含错误的文件后,又进行了修正。视频中提到,Devin 实际上是在进行打印行调试。这是一个很常见的做法,很多人都会用到。在某些情况下,使用打印行调试确实很有用,能看到 Devin 也能这样做,感觉很酷。但这里也出现了另一个我之前没有注意到的错误。Devin 正在尝试解决这个问题。
评论里说,"Devin 正在添加代码,追踪数据流直至彻底理解。" 我对此没问题。我不确定在这种情境下使用"理解"这一词是否恰当。我不相信 Devin 真的能理解任何事物,我对此表示怀疑。不过,我们经常给事物赋予人类特征,这也是语言使用上的一种便利。因此,我不会因此而严厉批评他们。但让我们来看看 Devin 实际在做什么。放大观察这一部分,可以看到一个奇特的循环。它正在读取一个文件,并把数据读入一个缓冲区。这是 update_image_ids.py 文件。
再次说明,这个文件在客户要求我们使用的代码仓库中不存在。实际上,我在 GitHub 上搜索了所有可能的位置,只有两处存在带有这个名称的文件。屏幕上显示三个的原因是其中一个是另一个的分支版本,它们与 Devin 正在使用的文件完全不同。所以我不清楚这个文件从何而来,我们也一无所知。但问题在于 Devin 此处正在调试一个自己创建的文件,而这个文件完全不在项目代码仓库中。这非常不妥。对于那些可能不太专心看视频的观众,或是那些没时间或没精力去查看代码库的人,或没有时间检查代码仓库的人,这段视频给他们的感觉是 Devin 正在识别并修正 Upwork 用户提出需要我们检查的代码库中的错误。这并非真相。Devin 自行生成错误,随后自己调试并修复了这些错误。这似乎不符合 Devin 的常规操作。这既不是人们普遍认为 Devin 应该做的,也不是很多撰写关于 Devin 的文章和视频的人士所描述的。
其实,Devin 并不是在修正它在网上发现的代码,也不是在处理客户指定的问题代码,而是在修正自己生成的错误代码。这完全不是大多数看这个视频的人所认为的情况。更糟糕的是,这样做并无必要。这是那个代码库中的 readme 文件。
我曾说过我们会回到这个页面。该库中有一个名为 infer.py 的文件,正如视频中 Devin 所做的那样。readme 文件说明了其功能及使用方法。在右侧,甚至还有一个小按钮,你可以点击它来复制整条命令,粘贴至你的命令行窗口,然后按下回车。如果你看过我演示如何重现结果的长视频,这正是我所做的。我复制粘贴了这个代码,修改了路径名后按下回车,它就开始工作了。我认为开发这个检测道路损坏的代码仓库的人已经尽可能地简化了使用说明,但 Devin 似乎还是没能理解。因此他不得不自己创建了一个混乱的项目。这段代码,关于读入缓冲区的部分,是很糟糕的,对吗?这是几十年前在 C 语言,这种更低级的语言中才会用的方法。Python 有更有效的处理方式。
正如 Devin 正在发现的,这样的代码很难调试。它复杂,难以处理,很容易出现小错误,我想这正是 Devin 现在尝试解决的问题。我不完全确定具体是什么出了问题,但看起来像是字符偏移了,导致 JSON 没有被正确解析。但我要说的是,现在这种方法已经过时了。我们在 Python 中不会这样做。这不是我在代码审查时会接受的,尤其是来自一个初级开发者的。这种做法引起的问题比它解决的要多。这是非常糟糕的。此外,代码仓库里确实存在一个真正的错误,Devin 没有找到也没有修复。Devin 最近创造了很多东西。
正如我之前说的,我自己复制了 Devin 的工作。这是链接,将会在视频描述中提供。我使用了 Torch 2.2.2,这是比 Devin 使用过的版本更新的版本。回看之前的 requirements.txt 文件,我遇到的主要困难是安装一个叫做 Apex 的软件包,需要配合正确版本的 CUDA,也就是 NVIDIA 的驱动程序。这非常棘手。我最终不得不从源码开始构建,这个过程大约占了我工作总时间的 16 分钟,共 36 分钟。可能有更简单的办法,但以 16 分钟的编译时间来看,这是最直接快捷的方法。我确实把硬编码从 requirements.txt 文件中删除了。Devin 只是更改了一些数字,我认为我的改进更好,技术上两种方式都行。
下一张幻灯片中,实际上有一个需要修复的错误,我将会展示那是什么。总共花了我大约 36 分钟,具体来说是 35 分 55 秒来完成我所做的事。待会当我们讨论 Devin 花费的时间时,这会很重要。这是我上传的那个长视频的截图,虽然没列出,但我提供了链接,欢迎观看完整视频。放大查看。所以,真正的错误在于名为 dataset.py 的文件第 33 行。问题是 torch 模块缺少一个名为 underscore six 的属性。我在谷歌上搜索了这个问题,找到了 GitHub 上的一个相关评论。我按照该评论中的建议修改了代码行,这样确实解决了问题。我还附上了一个链接,展示了我是从何处获得这个解决方案的灵感,因为我对 Apex 的工作原理并不是非常熟悉。能在网络上找到帮助真是太好了。解决这个问题总共花了我大约一分钟七秒的时间,只需这么短的时间我就修正了错误。这只是一个快速的谷歌搜索而已。
以下是我所做的修改的具体内容。这是我最初状态和最后状态之间的差异。这是 requirements.txt 文件的一处修改。最开始使用的是 torch 1.4.0 版本,我使用了最新版本的 torch,即 2.2.2,或者至少是一个比较新的版本。在过去的一小时里,可能已经有了更新的版本。然后在右边,这是 Devin 视频中的最后一屏,左边是我的视频,也就是最后的输出。它们两个大同小异。我的框框是黄色的,他们的是红色的。我不清楚哪个更好或者更差。不过我只花了 36 分钟,Devin 花的时间稍微多一点。
Devin 修复错误所用的时间
这里是 Devin 视频的早期部分。视频显示了一个 3 月 9 日下午 3.25 的时间戳。在视频的后半部分,你可以看到另一个时间戳,就是 3 月 9 日晚上 9.41。那么我们看到的是 6 小时 20 分钟的间隔。我完全不知道这 6 小时 20 分钟里发生了什么。我希望像 Devin 那样,他在等人的时间较长,因为这个过程花这么长的时间实在没有道理。这简直是疯了,因为我只用了大约半个小时。另外一个我猜想,可能就是他们让它过夜,然后第二天再回来处理,因为又有一个时间戳,是第二天下午 6 点的。希望这个过程并没有持续这么长时间。所以我估计用了六个小时,但实际上也可能花了一天两小时。
那就无法理解为什么会花这么长的时间了,这样效率太低,我不能称之为高效。当你逐帧查看时,你会发现屏幕上出现了一些奇怪的命令行操作。这里有一个奇怪的错误。看看这个命令"head -N 5 results.json | tail -N 5"。这是什么意思呢?它表示取这个 JSON 文件的前五行,然后再取这些行的最后五行。这完全没必要。没有人会这样做。这种让人觉得毫无意义的操作,就是 AI 有时会做的事。当你稍后回过头来看,你就会发现自己正在试图调试什么。然后到处都是这些无关紧要的东西。这让找出问题的关键变得非常困难。其实,正确的做法应该是"head -5 results.json"。那个-N 是多余的。只要说 -5 就可以,不需要那些多余的东西。
这种情况就是,当 AI 现在生成内容时,会让事情变得更复杂,希望这种情况能有所改善。但现在,AI 生成的东西中有很多都很愚蠢。比如它在 Python 中执行操作的方式,就像你在 C 中执行操作的方式,然而现在没有人会用 Python 这么做。即使它现在能正常工作,但是生成式 AI 的现状就是它完成的工作糟糕、复杂、混乱,这不仅给每个人增加了更多的工作,如果你将来要尝试去维护它,修复其中的错误,或者更新到新的版本,或者做任何类似的事情,都会非常困难。
Devin 完成工作的效果及其评价
让我们看一下 Devin 认为需要完成的任务列表。如果你看看左边,那里有一系列我接下来会详细介绍的复选框。具体是什么并不重要,只是看一下数量而已。这一系列复选框给人的感觉是 Devin 完成了一些复杂或困难的任务。当你观看视频,看到这些信息快速滚动过去,你可能会觉得,哇,Devin 做了很多事情。
然而,为了复制 Devin 的结果,我只需要在云实例上设置合适硬件的环境,并实际运行两个带有正确路径的命令。这些东西看起来就像 Devin 做了很多工作,完成了很多任务。然而,只要你设置好环境,实际上你只需要运行两个命令。这些代码修正全都无关紧要,因为它们都是 Devin 自身生成的代码。在视频的最后,讲述者说道:"做得好,Devin。"而实际上,Devin 完成的任务对于 AI 来说的确很酷。
如果你几个月前问我,一个 AI 面对这个问题可能会有什么样的表现,我可能会预测它的表现会比 Devin 实际上的要差。说实话,在我看来,这真的相当令人印象深刻。但在 Upwork 工作应该完成的任务背景下,尤其是在一些人声称 Devin 从 Upwork 接活并完成的情况下,再加上公司的声明,即这段视频将展示 Devin 如何通过工作获得报酬,这些都只是谎言,我不能确定我是否会称赞 Devin 的工作。所以,如果你们正在开发 AI 产品,那很好。AI 是有价值的,我经常使用它,我希望它能变得更加优秀。请继续开发 AI 产品,但请一定要如实告诉大家关于它们的事情。
如果你是一名记者,博主或者影响者,千万不要盲目地转发和扩大互联网上的信息,而不进行必要的核实,没有查证它们是否真实。如果你对某些信息是否真实感到困惑,或者你自己无法确定它们是否真实,那么请向其他人询问,或者干脆不要转发这些信息。因为许多人并不会去查看信息的原始来源,他们只看标题,然后就会误以为这些信息是真实的。这确实让人遗憾,但这就是我们的现实。如果你现在正在使用互联网,那么,请,为了所有重要的事情,对你在互联网或新闻上看到的一切,尤其是任何可能与 AI 相关的内容,都要持保留和怀疑的态度。
目前有太多的炒作,有很多人在散播各种信息,声称这些是真实的,但实际上并非如此。所以,请一定不要忘记对一切持有怀疑的态度。这很重要。
结语
好了,这就是我在这个视频中要分享的内容。在我们下次见面之前,记住互联网上充满了误解,任何否认这一点的人都可能在向你推销某种东西。祝大家一切顺利。