共计 2822 个字符,预计需要花费 8 分钟才能阅读完成。
AI 工具正在彻底改变编码和 IT 工作的方式,但它们是否真的让开发者更快?一项研究表明,情况并非如此。以下是 AI 有时会拖慢专家速度并加速错误的原因。
这个故事始于一个人和他的 AI。这个人,像许多人一样,既有点极客,又是个程序员。他还需要理发。AI 是人类数千年进步的巅峰,所有这些都是为了让他的生活变得更轻松。当然,这个人就是我。我就是那个人。
不幸的是,虽然 AI 可以非常聪明,但它也有撒谎的倾向,误导,并犯下令人震惊的愚蠢错误。本文将讨论愚蠢的部分。
轶事证据确实有价值。关于我如何用 AI 快速解决一些问题的报告是真实的。我用 AI 编写的程序仍在使用中。我用 AI 来帮助加快我的编程流程,特别是当我专注于那些我效率较低而 AI 相当擅长的领域时,比如编写调用公开 API 的函数。
你知道我们是如何走到这一步的。生成式 AI 在 2023 年初突然出现,并迅速进入知识工作领域。
正如叙事所说,AI 真正闪耀的一个领域是它编写代码和帮助管理 IT 系统的能力。这些说法并非不真实。我已经多次展示了 AI 如何解决我亲身经历的编码和系统工程问题。
现实世界中的 AI 编程:科学揭示的真相
新工具总是伴随着巨大的承诺。但它们在现实世界中的表现如何?
我关于编程效率的大部分报告都基于个人轶事证据:我自己使用 AI 的编程经验。但我只是一个人。我投入编程的时间有限,而且像每个程序员一样,我有某些领域是我大部分编码时间所花费的地方。
最近,一个名为 METR(模型评估与威胁研究)的非营利研究组织对 AI 编码生产力进行了更深入的分析。
他们的方法似乎很合理。他们与 16 位有经验的开源开发者合作,这些开发者积极贡献于大型、受欢迎的代码库。METR 分析师为这些开发者提供了 246 个需要修复的代码库问题。开发者被要求在没有 AI 帮助的情况下解决大约一半的问题,另一半则可以使用 AI。
结果令人震惊且出乎意料。虽然开发者自己估计 AI 帮助将他们的生产力平均提高了 24%,但 METR 的分析显示,AI 帮助实际上拖慢了他们的速度,平均降低了 19%。
这有点令人费解。METR 列出了一系列可能解释这种放缓的因素,包括对 AI 有用性的过度乐观、开发者对代码库的高度熟悉(以及对 AI 知识的缺乏)、大型代码库的复杂性、AI 的不可靠性,以及 AI 拒绝使用“重要的隐性知识或上下文”的持续问题。
我认为还有两个因素可能限制了有效性:
- 问题选择: 开发者被告知哪些问题必须使用 AI 帮助,哪些问题不能使用。我的经验表明,有经验的开发者必须根据需要解决的问题选择使用 AI 的地方。例如,在我这种情况下,让 AI 编写正则表达式(我不喜欢做,也不太擅长)比让 AI 修改我已经编写、经常使用并了如指掌的独特代码节省的时间要多得多。
- AI 选择: 根据报告,开发者使用了 Cursor,这是一个以 AI 为中心的 VS Code 分支,当时使用了 Claude 3.5/3.7 Sonnet。当我测试 3.5 Sonnet 时,结果很糟糕,Sonnet 在我的四个测试中失败了三个。随后,我对 Claude 4 Sonnet 的测试结果要好得多。METR 报告称,开发者拒绝了 AI 生成的超过 65% 的代码。这会花费时间。
那次 ChatGPT 建议我摧毁我的系统
METR 的结果很有趣。在编码帮助方面,AI 显然是一把双刃剑。但毫无疑问,AI 可以为编码者提供相当大的价值。如果有的话,我认为这个测试再次证明了 AI 是经验丰富程序员的绝佳工具,但对新手来说是一个潜在的高风险资源。
让我们看一个具体的例子,如果遵循 ChatGPT 的建议,可能会让我花费大量时间和麻烦。
我在家用实验室中使用 Portainer(一个帮助管理 Docker 容器的工具)设置了一个 Docker 容器。出于某种原因,Portainer 无法启用“部署”按钮来创建容器。
那天已经很长了,所以我没有看到明显的问题。相反,我询问了 ChatGPT。我向 ChatGPT 提供了配置的截图,以及我的 Docker 配置文件。
ChatGPT 建议我卸载并重新安装 Portainer。它还建议我从 Linux 发行版中移除 Docker,并使用包管理器重新安装它。这些操作将导致我所有的容器被销毁。
值得注意的是,ChatGPT 没有推荐或询问我是否有容器的备份。它只是给了我它建议我复制粘贴的命令行序列,以删除和重建 Portainer 和 Docker。这是一个极具破坏性和不负责任的建议。
讽刺的是,ChatGPT 从未弄清楚为什么 Portainer 不允许我部署新容器,但我弄清楚了。原来我从未填写容器的名称字段。就这样。
过度自信和缺乏信息的 AI:危险的组合
我也经历过 AI 完全失控的情况。它给出的建议不仅完全无用,而且表现得像专家一样自信。
如果你打算使用 AI 工具来支持你的开发或 IT 工作,这些技巧可能会让你避免麻烦:
- 如果没有太多公开可用的信息,AI 无法提供帮助。但 AI 会根据它所知道的少量信息编造内容,而不承认它缺乏经验。
- 像我的狗一样,一旦 AI 专注于某件事,它通常会拒绝考虑其他选择。如果 AI 卡在一种方法上,不要错误地相信它关于新方法的礼貌建议是真实的。它仍然会陷入同一个兔子洞。开始一个新会话。
- 如果你不太了解,不要依赖 AI。继续学习。有经验的开发者可以分辨出什么会奏效,什么不会。但如果你试图把所有编码工作都交给 AI,你将不知道它何时何地出错,也不知道如何修复它。
- 编码者通常使用特定工具来完成特定任务。一个网站可能使用 Python、CSS、HTML、JavaScript、Flask 和 Jinja 构建。你选择每个工具是因为你知道它的优点。以同样的方式选择你的 AI 工具。例如,我不使用 AI 来处理业务逻辑,但我在编写 API 调用和公共知识时使用 AI 来提高生产力,因为它可以节省我很多时间。
- 测试 AI 生成的一切。每一条。逐行测试。AI 可以节省大量时间,但也可能犯下巨大的错误。是的,花时间和精力手动测试可以帮助防止错误。如果 AI 建议编写单元测试,那就让它做。但要测试这些测试。
根据你的经验水平,以下是我建议你如何思考 AI 帮助:
- 如果你对某个主题或技能一无所知: AI 可以帮助你装作你懂,但它可能错得离谱,而你却不知道。
- 如果你是某个主题或技能的专家: AI 可以提供帮助,但它会让你恼火。你的专业知识不仅用于区分 AI 的愚蠢和有用,还用于精心设计一条 AI 实际上可以提供帮助的路径。
- 如果你介于两者之间: AI 是一个混合体。它可能帮助你,也可能让你陷入麻烦。不要将你的技能培养委托给 AI,因为它可能会让你落后。
生成式 AI 可以成为经验丰富的开发者和 IT 专业人士的优秀助手,特别是在用于有针对性的、充分理解的任务时。但它的自信可能是欺骗性和危险的。
AI 可以有用,但始终要仔细检查它的工作。
你是否使用过像 ChatGPT 或 Claude 这样的 AI 工具来帮助你的开发或 IT 工作?它们是加快了速度,还是几乎搞砸了一切?在关键系统上使用 AI 时,你是更自信还是更谨慎?你是否发现了一些 AI 真正闪耀的特定用例,或者它在哪里失败得可笑?请在下面的评论中告诉我们。