我从人工智能编码代理的过度使用中学到的 10 件事

观点:作为强大的软件工具,人工智能代理可能会让人们比以往任何时候都更加忙碌。

图片来源:Aurich Lawson | Getty Images

如果你用过3D打印机,或许还记得第一次打印出自己永远无法雕刻或制作的东西时的那种奇妙感觉。下载一个模型文件,装入塑料耗材,按下按钮,几乎就像变魔术一样,一个三维物体就出现了。但打印出来的成品并不完美,也无法进行大规模生产,而且要创造出新颖的形状,需要的技能远不止按下一个按钮那么简单。有趣的是,如今的AI编码代理也面临着类似的挑战。

自去年11月以来,我一直通过个人Claude Max账户使用Claude Code和Claude Opus 4.5进行大量的AI辅助软件开发实验(我也以类似的方式使用过OpenAI的Codex,但频率较低)。完成50个项目后,坦白说:自从9岁时在我的Apple II Plus上学习BASIC以来,我从未如此享受过电脑带来的乐趣。这并非推荐,而是我个人的亲身经历:我自愿承担了这个项目,并且自费购买了OpenAI和Anthropic的高级AI套餐。

我一生中一直以实用型程序员的身份涉猎编程,在需要时编写一些小型工具或脚本。在我的网页开发生涯中,我曾从零开始编写过一些小型工具,但主要还是修改他人的代码以满足自身需求。自 1990 年以来,我使用过 BASIC、C、Visual Basic、PHP、ASP、Perl、Python、Ruby、MUSHcode 等多种语言进行编程。我对这些语言都算不上精通——我只是掌握了足以完成工作的基本知识。多年来,我一直使用 BASIC、Torque 游戏引擎和 Godot 开发自己的业余游戏,因此我对如何构建一个易于扩展的模块化程序架构有一定的了解。

去年十二月,我使用 Claude Code 创建了一个名为“Christmas Roll-Up”的多人在线 Katamari Damacy 克隆游戏。
去年十二月,我用 Claude Code 制作了一款名为“Christmas Roll-Up”的多人在线游戏,它是《块魂》的克隆版。 图片来源: Benj Edwards

Ars Video

Claude Code、Codex 和 Google 的Gemini CLI似乎能在小规模范围内创造软件奇迹。它们可以快速生成炫酷的简单应用程序、用户界面甚至游戏原型,但这仅限于它们从训练数据中借鉴模式的前提下。就像 3D 打印机一样,要完成生产级别的工作则需要付出更多努力。创建持久耐用的生产代码、管理复杂的项目或打造真正新颖的产品,仍然需要远超当今人工智能代理自身能力的经验、耐心和技能。

然而,这些工具为我打开了一个此前与我隔绝的软件创造世界,它们赋予了我极大的力量。即便如此,我也明白这些只是业余项目,而且编码代理的局限性也让我相信,资深软件开发人员或许不必担心这些工具会很快让他们失业。事实上,他们可能会比以往任何时候都更加忙碌。

过去两个月里,我已经创建了超过 50 个演示项目,这部分要归功于我感染新冠病毒后卧床不起,只能依靠笔记本电脑,以及 Anthropic 在 12 月最后几周实施的慷慨的 Claude 两倍使用上限。我整天疯狂敲键盘,妻子不停地问我:“你在跟谁说话?”

您可以在我的个人网站上看到一些比较有趣的研究成果。以下是我从这个过程中学到的10个有趣的经验。

1. 人仍然是必要的

即使拥有当今最先进的AI编码代理,人类在软件开发过程中仍然不可或缺。经验丰富的软件开发人员能够带来AI模型所缺乏的判断力、创造力和领域知识。他们知道如何构建可长期维护的系统架构,如何在技术债务和功能开发速度之间取得平衡,以及在需求不合理时何时提出异议。

对于像我这样的业余项目,我可以容忍很多马虎。但对于生产环境的工作,如果有人了解版本控制、增量备份、逐个功能测试以及调试系统间复杂的交互,那就完全不一样了。了解优秀的软件开发流程对指导AI编码代理大有裨益——这个工具会增强你现有的知识,而不是取代它。

正如独立人工智能研究员西蒙·威利森在一篇区分严肃的人工智能辅助开发和随意的“感觉编码”的文章中所写的那样,“人工智能工具可以增强现有的专业知识。作为一名软件工程师,你拥有的技能和经验越多,你使用LLM和编码代理就能更快、更好地获得结果。”

有了人工智能的帮助,你无需记住所有操作步骤,只需知道自己想做什么即可。

《卡牌矿工:地球之心》完全由人工智能使用克劳德代码编写而成,并由人类独立设计。它代表了大约一个月的迭代开发成果。
《卡牌矿工:地球之心》完全由人类设计,但其人工智能代码使用了 Claude Code 编写。它代表了大约一个月的迭代开发成果。 图片来源: Benj Edwards

所以我经常提醒自己,编码代理是软件工具,最适合用来实现人类的想法,而不是自主编码的员工。无论背后的公司如何宣传,它们都不是人(也不是人的替代品)。

仔细想想,你在电脑上做的每一件事,曾经都是手动完成的。像ENIAC这样的计算机,其编程过程实际上就是用导线在接线板上连接物理元件。编程的历史就是一部不断自动化的历史,因此,尽管人工智能辅助的飞跃令人有些惊讶,但我们可以把这些工具看作是类似于高级语言、自动编译器和调试工具,或者基于图形用户界面的集成开发环境(IDE)的出现。它们可以自动化许多任务,但管理整个项目范围的重任仍然落在告诉工具该做什么的人身上。

而且它们还能带来快速叠加的效益。我现在利用人工智能工具编写了更好的工具——例如修改模拟器的源代码,以便编码代理可以直接使用它——这些改进后的工具已经开始产生连锁反应。但为了更好地实现我的设想,人的参与必不可少。这种方法让我非常忙碌,而且与一些人普遍担心人工智能会使人变笨相反,我在这个过程中学到了很多新东西。

2. 人工智能模型在训练数据之外非常脆弱

与所有基于Transformer 架构的 AI 模型一样,支撑当今编码代理的大型语言模型 (LLM) 存在一个重大局限性:它们只能可靠地应用从训练数据中获得的知识,并且将这些知识推广到数据中未表示的新领域的能力有限。

什么是训练数据?在这种情况下,当构建具有编码特性的逻辑学习模型(LLM)时,人工智能公司会从GitHub等平台下载数百万个软件代码示例,并用它们来构建人工智能模型。之后,公司会通过微调流程,使这些模型更适合编码应用。

人工智能代理能够通过试错法——尝试一次又一次——来缓解低级逻辑模型(LLM)的脆弱性。但这并非完美无缺,看到一个编码代理反复尝试却屡屡失败,或者因为它不知道如何完成任务,或者因为它之前学会了如何解决问题,但由于上下文窗口被压缩而忘记了(更多信息请参见此处),这确实令人沮丧。

暴力跳棋是一款基于物理原理的经典棋盘游戏的变体,使用 Claude Code 编写。
《暴力跳棋》是一款基于物理引擎的经典棋盘游戏,采用克劳德代码编写。 图片来源: Benj Edwards

为了解决这个问题,最好让AI模型在解决问题的过程中详细记录它是如何解决某些问题的,以便未来的实例可以从中学习。此外,还需要在claude.md文件中设置一些基本规则,供智能体在启动会话时读取。

这种脆弱性意味着编码代理在他们经过训练和微调的内容(现代编程语言、JavaScript、HTML 和类似的成熟技术)方面表现出色,而对于他们没有经过深入训练的任务(例如 6502 汇编语言或使用逼真的字符图形编写 Atari 800 游戏)则表现得非常糟糕。

我用 Claude 只花了五分钟就做出了一个不错的 HTML5 演示,但要做出一个类似的 Atari 800 游戏演示,却花了我整整一周的时间,经历了无数次痛苦的试错,还得自己进行系统的设计。为了实现这个演示,我不得不使用 Claude Code 开发一些工具,比如命令行模拟器和MCP 服务器,这些工具能够让我窥探 Atari 800 的内存和芯片组的运行机制,才能着手实现这个演示。

3. 真正的创新可能是一场艰苦的战斗

由于编码模型神经网络中内置了某种可以被诗意地称为“先入为主的观念”(更准确地说是统计语义关联),即使你仔细地阐明你想要什么,也很难让 AI 代理创造出真正新颖的事物。

例如,我花了四天时间试图让 Claude Code 为我的 HTML 游戏《暴力跳棋》创建一个 Atari 800 版本,但却遇到了困难,因为在游戏设计中,棋盘上的方格除了初始位置之外没有任何意义。无论我跟代理解释多少遍(并在我的 Claude 项目文件中做了记录),它最终都会回到尝试将棋子居中对齐到方格、将棋子吸附到方格内,或者将方格作为游戏计算的逻辑基础,而实际上它们应该只是构成背景图像而已。

为了在 Atari 800 版本中解决这个问题,我重新开始,告诉 Claude 我正在制作一款游戏,游戏中一个 UFO(而不是圆形棋子)会飞过一片相邻的方格——全程没有提及“跳棋”、“棋盘”或“跳棋”这些词。通过这种方法,我得到了想要的结果。

这是 Benj 在忙于其他项目时,用 Mac 电脑开发 Atari 800 家用电脑版《暴力跳棋》游戏时的屏幕截图。
这是本杰在忙于其他项目时,用Mac电脑开发Atari 800家用电脑版 《暴力跳棋》游戏时的屏幕截图。 图片来源: 本杰·爱德华兹

为什么这很重要?因为对于语言学习模型(LLM)来说,上下文至关重要,而语言中,上下文会改变词义。以“bank”(河岸)一词为例,在其前面加上“river”(河流)或“central”(中心),看看词义会发生怎样的变化。某种程度上,词语就像地址,能够解锁神经网络中编码的语义关系。因此,如果你在上下文中放入“checkerboard”(棋盘)和“game”(游戏),模型的自注意力机制会将关于跳棋游戏规则的大量语义关联联系起来,而这些语义包袱会干扰模型的理解。

一些技巧可以帮助人工智能程序员克服这些限制。首先,避免用无关信息污染上下文。其次,当智能体遇到困难时,可以尝试这样的提示:“你需要哪些信息才能立即完美地实现这个功能?你有哪些工具可以用来系统地发现这些信息,而不是靠猜测?” 这迫使智能体识别(语义上关联)自身的知识缺口,这些缺口会在上下文窗口中明确指出,并会在未来的操作中得到解决,而不是盲目地摸索。

4. 90% 问题

人工智能编程项目的前90%进展迅速,令人惊叹。而剩下的10%则需要通过与智能体反复试错的对话,繁琐地完善细节。对于那些需要比智能体所能提供的更深入的洞察或理解的任务,仍然需要人类来建立联系并引导它朝着正确的方向发展。我们前面讨论的这些局限性也可能导致你的项目陷入僵局。

根据我多年的观察,较大的逻辑线性模型(LLM)可能比小的逻辑线性模型更能建立更深层次的上下文联系。它们拥有更多的参数(编码数据点),而且这些参数之间的联系更加多维,因此它们往往能构建更深层次的语义关系图谱。尽管如此,人脑似乎仍然对语义联系有着更深刻的理解,并且能够进行逻辑线性模型难以实现的语义跳跃。

从这个意义上讲,创造力可能体现在你从篮球运动跳跃到肥皂膜中气泡的形成,并建立起有用的联系,从而取得突破。然而,逻辑学习模型(LLM)往往遵循更为保守的传统语义路径,完全由训练数据中预先设定的关系所引导。这限制了它们的创造潜力,除非提示者引导LLM建立新的语义联系,从而释放其创造力。这需要操作者具备技巧和创造力,也再次表明LLM是人类使用的工具,而非独立思考的机器。

5. 功能蔓延变得难以抗拒

在使用人工智能编码工具开发软件时,体验新奇事物的乐趣会让你更倾向于添加有趣的新功能,而不是修复漏洞或完善现有系统。克劳德(或 Codex)也乐于满足这种需求,它不断地将新想法转化为易于快速演示的界面(这又回到了“90% 的问题”),而不是精雕细琢代码。

Flip-Lash 最初的想法是“如果俄罗斯方块可以翻转棋盘会怎样”,但功能越堆越多,最终失去了焦点。
Flip-Lash 最初的想法是“一款可以翻转棋盘的俄罗斯方块游戏”,但功能越堆越多,最终导致我把所有能想到的东西都塞了进去,失去了最初的目标。 图片来源: Benj Edwards

修复 bug 也可能在其他地方引入新的 bug。这对于编码智能体来说并不新鲜——这是软件开发中由来已久的问题。但智能体加剧了这种现象,因为它们可以快速遍历代码,为了实现狭隘的目标而进行大刀阔斧的修改,从而影响到许多正在运行的系统。我们之前已经讨论过,拥有一个由人主导的良好架构至关重要,而这一点在这里同样适用。

6. 通用人工智能(AGI)尚未到来

鉴于我上面描述的局限性,很明显,具备通用智能的人工智能模型——通常被称为人工智能通用智能(AGI)——尚未问世。理论上,AGI 能够绕过根深蒂固的刻板印象,而无需依赖显式训练或大量示例的微调就能做出正确的判断。人工智能公司未来可能需要一种不同的架构。

我只是猜测,但通用人工智能可能需要不断地进行动态学习——就像修改自己的神经网络权重一样——而不是依赖于所谓的“上下文学习”,后者只能持续到上下文被填满并被压缩或清除为止。

Grapheeti 是一款“绘画 MMO”,世界各地的人们可以共享一块画布。
Grapheeti是一款“绘画MMO”,世界各地的人们可以共享一块画布。 图片来源: Benj Edwards

换句话说,你可以通过讲解教会真正的通用人工智能(AGI)系统如何做某事,或者让它边做边学,记录成功经验,并让这些经验永久保留,无论上下文窗口显示什么。如今的编码代理做不到这一点——除非你手动记录所有内容,否则它们会在长时间的会话中或会话之间忘记之前的经验。我最喜欢的技巧是,让它们在修复错误时编写一份详细的报告。这样,下次健忘的AI模型犯同样的错误时,你就可以指出这个来之不易的解决方案了。

7. 即使很快,也还不够快

使用 Claude Code 一段时间后,很容易会觉得无需掌握特定编程语言就能创建软件是理所当然的。起初这令人惊叹,但很快你就会感到沮丧,因为原本快速的开发流程似乎还不够快。你会对这台代码机器产生不耐烦,并开始渴望更多。

即使你精通所使用的编程语言,也并不意味着可以高枕无忧。你仍然需要对项目的进展方式做出关键决策。当系统出现故障或出错时,你的编程知识就显得至关重要,它能帮助你诊断问题所在,并引导系统重回正轨。

8. 人们可能会比以往任何时候都更加忙碌

过去两个月里,我用 Claude Code 指导了太多业余项目,现在我开始觉得,人工智能不会导致大多数人失业——他们只会比以往任何时候都更忙。电动工具能让人们在更短的时间内完成更多的工作,而经济发展也需要更高的生产力来与之匹配。

事实上,开发新软件几乎太容易了,但也因此让人筋疲力尽。一个项目想法会引出另一个,很快,我在寒假期间每天要花八个小时同时维护大约 15 个 Claude Code 项目。这样分散精力很难取得好结果,但看着自己的想法变成现实的那种新鲜感却让人上瘾。除了我在这里提到的游戏创意之外,我还开发了一些工具来抓取和搜索我过去的文章,一个基于 ZZT 的图形化 MUD,一种使用 AI 生成房间的新型MUSH(文字游戏),一种新型的Telnet 显示代理,以及一个适用于 Apple II 的 Claude Code 客户端(稍后会详细介绍)。我还把两个支持 AI 的Apple IIAtari 800模拟器上传 到了 GitHub。呼,真是忙得不可开交。

想想蒸汽铲的出现,它使人们能够比用手铲的团队更快地挖洞。它加快了现有项目的进度,也使新项目成为可能。但想想操作蒸汽铲的人。突然间,我们拥有了一种不知疲倦的工具,只要燃料充足、维护得当,它就能24小时不间断地工作,而操作它的人却需要吃饭、睡觉和休息。

我使用 Claude Code 创建了一个可通过 Telnet 运行的 Mac 窗口 GUI 模拟器。
我使用 Claude Code 创建了一个可通过 Telnet 连接的 Mac 窗口式 GUI 模拟器。 鸣谢: Benj Edwards

事实上,我们最终可能需要为使用这些不知疲倦的信息引擎来实现其想法的人类知识工作者提供新的保护,就像100多年前工会为了应对工业生产线而兴起一样。即使机器不需要,人类也需要休息。

人工智能系统会取代人类的角色吗?即使人工智能编码代理最终能够完全自主工作,我认为它们也不会完全取代人类,因为仍然会有人想要完成工作,而且新的人工智能工具也会出现来帮助他们完成工作。

9. 速度对人们来说很可怕

人工智能编程工具可以将原本需要一年才能完成的个人项目缩短到五分钟。我把一张2008年我在笔记本上画的双人俄罗斯方块游戏草图发给Claude Code,它几分钟就生成了一个可运行的原型(提示:“根据这张草图创建一个带有音效的完整网页游戏”)。这太不可思议了,虽然结果并不完美,但想到这可能会给软件开发带来翻天覆地的变化,还是让人有些忐忑。

从12月初开始,我就在Bluesky上发布了一些我编写的比较有趣的实验性AI项目供大家试玩,但我发现我需要刻意放慢更新速度,因为更新太快,大家来不及消化(我自己也来不及全面测试)。我还收到了一些评论,比如“我担心你用AI开发游戏的速度太快了”等等。

Benj 于 2007 年手写的关于双人俄罗斯方块概念的游戏设计笔记。
这是本杰明·爱德华兹 (Benj Edwards)于 2007 年 手写的关于双人俄罗斯方块游戏概念的设计笔记 。图片来源: 本杰明·爱德华兹

无论我个人的习惯如何,新软件的涌现都不会放缓。人工智能增强的媒体(游戏、电影、图像、书籍)很快就会层出不穷,而这正是我们必须思考如何应对的问题。这些产品并非全是“人工智能垃圾”;其中一些会制作得非常精良,而且由于这些新型强大工具带来的生产速度提升,其数量将以前所未有的速度增长。

社交媒体往往会引导人们认为人工智能非黑即白,但这种非黑即白的思维方式或许过于简单。虽然这样可以避免认知失调,但却会错过更为丰富的第三种选择:将这些工具视为不完美且值得批判的存在,同时也要认识到它们在将你的想法变为现实时所具有的实用性和赋能作用。

人工智能代理应该被视为工具,而非实体或雇员,它们应该是人类思想的放大器。我正在开发的游戏《卡牌挖掘者》完全由我一手包办了高层次的创意设计,而底层代码则由人工智能模型编写。我仍然为它感到自豪,因为它体现了我个人的想法,而如果没有人工智能编码代理,它根本不可能存在。

10. 这些工具不会消失。

至少目前来看,编码代理仍然是人们用来创造事物的工具。问题在于,人类能否学会有效地运用这些新工具来增强自身能力。经过两个月的密集实验,我认为答案是肯定的,但前提条件有很多。

我们还面临着社会问题:专业开发人员已经在使用这些工具,而且由于一些在线社区普遍存在对人工智能工具的偏见,许多软件开发人员和托管他们作品的平台将面临艰难的抉择。

最终,我认为人工智能工具不会让人类软件设计师过时。相反,它们很可能会帮助这些设计师提升能力。当然,这并非什么新鲜事;早在有文字记载的历史之前,各种工具就一直在发挥着类似的作用。最好的工具能够增强人类的能力,同时又不失操控者的作用。3D打印机的例子很贴切:虽然可以快速获得惊人的成果,但要真正掌握它,仍然需要时间、技巧以及对机器的耐心。

已显示 25%,查看完整内容需登录

您已阅读了文章的 25%,剩余 75% 内容需要登录后查看。

立即登录 注册账号

收藏
打赏
《侠盗猎车手6》开发商Rockstar North遭遇爆炸,据报道系意外事故
上一篇
热门人工智能编程工具 Cursor 的四位联合创始人如今已成为亿万富翁
下一篇

发表评论

个人中心
xuanzhang
567 文章
0 评论
7 收藏

扫码分享

微信支付
支付宝