AI编码无需人类介入: Claude工程师右手骨折后,一周内独自编写了3000行代码。
编辑日期:2024年08月07日
原来,摔断胳膊也是一件幸运的事......
当事人表示:“我再也不想回到过去了。”这是为什么呢?
事情是这样的:几个月前,克劳德工程师艾瑞克·斯伦茨在骑车上班的路上不慎摔倒,导致右手骨折,因此打了石膏。
为了生计,他不得不使用左手打字。即便如此,Schluntz 仍在位于旧金山的Anthropic办公室里,一周内拼命地编写了 3000 行代码。
谁也没有想到,这背后竟是AI发挥了重要作用。
他结合了语音转文字技术,并与Claude AI协作,连续编写了两个月的代码。但必须承认,这其中包含了很多“样板代码”。
为此,Schluntz 还撰写了一篇长文,题目是——AI 替代了我的右手。
在文章中,他表示“通过这次经历,我感受到了未来的趋势:人类几乎不再需要自己编写代码。”
另一位Anthropic工程师表示,通过这次事件,我们得以窥见未来几年软件工程发展的关键趋势。
即使你的右手无法使用,AI完全可以让你成为一位效率十倍的程序员。
那么,埃里克·斯伦茨在受伤期间是如何让人工智能为他高效编程的呢?
首先,他在文章开头介绍了自己是如何设置AI的,并最终决定使用Claude AI。
在摔伤手之前,Schluntz也使用过像Copilot这样的AI代码生成工具,但主要是手动编写。
于2015年毕业于哈佛大学,获得硕士学位。他是Cobalt机器人的创始人以及Anthropic AI的技术研究员。
此外,他也曾使用过「语音转文字」功能,但主要是在手机上发送短信,在电脑上并未尝试过这个功能。
幸好,Mac 的内置语音控制在自然语言处理(NLP)方面表现出色。
唯一的缺点是,当涉及到任何与代码相关的内容时,Siri 的表现相当不尽如人意。毕竟,有许多符号和术语都超出了它的识别能力。
就像这样:
Siri:你是想说“Evil”吗?
当然,目前存在一些专为代码设计的优秀的语音转文字系统,比如 Talon。
但由于Schluntz对AI代码生成非常感兴趣,他决定尝试使用他自己家的AI来完成这个艰巨的任务。
这里没有采用 Copilot,是因为其自动补全功能对作者而言反应非常慢,需要开发者先输入半行代码才能生效。
毕竟他摔伤了一只手,所以「动嘴」还是比「动手」来得更快。
这时,只需要一键将大型代码库的内容复制粘贴到Claude AI中,然后通过语音命令来进行转换。
比如,Schluntz 会这样说:“重构 ABC 函数以便接收 XYZ 输入”或者“为这些新的 ABC 函数编写单元测试,并参考 XYZ 的示例测试。”
虽然Claude并不总能在第一次尝试时就成功,但它能很好地接受后续指令和调整——
我觉得这就像与AI进行「结对编程」,只是由另一个人操作键盘!
在被迫用这种方式编写代码后,Schluntz 很快就明白了什么样的提示能生成有效的代码,以及什么样的提示是无效的。
有时候,它非常神奇,但有时候,就连作者本人也恨不得把电脑砸出窗外。
他不得不在IDE和Claude之间不断地复制粘贴,并手动拼接那些因Claude输出长度限制而被截断的代码片段。
甚至,有几次他对着Claude「大声吼叫」,只因为AI「忘了」Schluntz之前下的指令。
接下来,我们就来看看Schluntz是如何训练Claude的。
如果你仅提供一个基本请求,大型语言模型可能会给出一个一般性的标准答案,这个答案可能并不完全适用于你的特定代码库。
这时,需要提供“非常清晰明确的指示”,以获取更佳的结果。例如,详细说明您期望的输入与输出形式,以及使用哪些库等信息。
Schluntz发现,将指令放在输入的开头和结尾能取得最佳效果,这样可以确保AI不会“遗忘”重要的上下文信息。
最好能提供代码库的示例供AI参考。特别是在编写单元测试和处理样板代码时,AI的表现尤为突出。
通过示例,人工智能还可以学会如何使用代码库中的内部工具函数。在这个过程中,迁移和重构成为了最理想的应用场景。
Schluntz 会手动迁移一个实例,然后用它作为例子让 Claude 转换其余的输入。
通过这种方式,他可以快速重构大约 3,000 行的代码。
大多数人将LLM视为StackOverflow的替代方案:他们虽然在寻求指导,但仍自行掌控方向。Schluntz的做法则与此相反。
「如果你能给克劳德提供正确的基础构建模块,它通常就能一次性完成整个任务」。
在周末的机器人项目中,Schluntz 和朋友 Survy 向 Claude 提供了一段用于控制单个电机和读取蓝牙游戏控制器的代码。
通过这些构建模块,克劳德能够一口气编写完成所有远程控制机器人的代码,这大大节省了时间和减少了繁琐的数据处理工作!
令人惊讶的是,这与通常的建议完全相反,即每次只向LLM提出一个单独的问题。
特别是在 Schluntz 不熟悉的领域,Claude 在任务分解方面往往表现出色。
过于具体的请求也可能有效,但有时可能会导致失去对整体视角的把握,这类似于在缺乏整体背景的情况下提供狭隘的建议。
电机控制器附带一份长达100页的说明书,内容既繁琐又复杂。但是Schluntz和Survy将其上传到了Claude,接着他们提出问题,很快就解决了其中一个难题。
在过去,这可能需要一个小时的仔细阅读以及查找相关术语和教程。
「你不必非得成为工程师才能当赛车手,但你必须具备对机械的同理心。」
—— 三届F1世界冠军杰基·斯图尔特
渐渐地,Schluntz 开始建立了一种非常出色的直觉,即 Claude 能够正确处理哪些事务,以及哪些事务仍然需要人类介入。了解这种区别,让他在两个方面都避免了许多挫败感。
Schluntz 学会了在哪些地方可以进行简化处理:
他甚至学会了,对大段代码进行转换或重构可以产生显著的效果,比如在每行代码之间添加定时仪器(timing instrumentation)。
另一方面,Schluntz 发现如果一个大型语言模型在两次尝试后仍无法修正一个错误,那么它可能永远无法自行修正。这时候就需要亲自上手处理了。
他对于Claude可能犯下的错误也有着很准确的直觉预感。
有一次,克劳德给出了一段代码,这段代码循环遍历了motor1, motor2, motor2, motor4,但是遗漏了motor3。
作者的朋友注意到了这一点,说这肯定是幻觉!但是Schluntz能感觉出来,“Claude绝对不可能犯这样的错误”。
果然,当他们检查输入时,发现这个错误确实存在于最初给Claude输入的原始代码中。
当Schluntz带着机器人在后院转了一圈后,它生成了一份包含GPS坐标和其他数据的CSV文件。
他想要验证这些数据与实际情形的准确性,但却没有一个特别有效的方法。要搞清楚如何查看及分析这些GPS坐标可能就需要耗时一小时。更甚的是,他可能还需手动在他的手机上检视每一个GPS坐标,目不转睛地盯着那些数字,生怕漏看了任何一行。
这次,Schluntz 向 Claude 提供了 CSV 文件的前两行数据。Claude 立即生成了一个网页应用,能够在一个卫星图像上显示上传的 GPS 坐标 CSV 文件的内容!
人工智能让软件开发成本如此之低,以至于它能够为特定任务创建一次性的工具!
总的来说,这些经验和教训使得 Schluntz 在使用人工智能编写代码时变得更加高效!
如果没有AI工具,这就好比放弃了编译器而去手工编写汇编语言一样。
在文章的结尾部分,Schluntz 将人工智能编程分为三个阶段:
在过去的几年中,人工智能在软件工程领域最主要的应用是在集成开发环境(IDE)中利用Copilot自动完成代码编写,以及通过ChatGPT查询代码相关知识(这些知识过去通常需要在StackOverflow上查找)。
此外,有一些智能体可以在没有人类监督的情况下辅助编程并执行多步骤任务,但这些目前尚不实用。
2024年,这三个领域都在经历变革。
像Zed、Cursor和各种VSCode扩展这样的集成开发环境(IDE)深度集成了大型模型,具备更完善的上下文处理能力,并能处理更大规模的代码生成任务。
Claude Artifacts和ChatGPT的数据分析师角色已取代了Jupyter Notebook的地位。它们现在已经成为了作者进行原型开发的工具以及一次性代码的首选解决方案。
最后,一批像Cognition、Factory、CodeGen等的初创公司正在对某些工作流程进行端到端的自动化处理。
Schluntz 认为,在未来的1-3年内,将会出现真正的“AI工程师”。
也就是说,这三个领域可能融合为一个产品——“AI工程师”,这是一个能够在自主模式和同步模式下连续运作的系统:
自主模式适用于具有明确范围的任务。
AI 将会完全独立运作,拥有编写及执行代码、运用外部工具、搜寻网络信息、查阅内部文件以及从过往错误中学习的能力。它将持续迭代任务直至完成或是遇到无法解决的问题为止。这将会占据大约80%的工作量。
- 结对编程模式适用于最困难的任务。
人类将在高级别上指导人工智能,而人工智能则负责处理较低级别的实施细节。交互方式将高度多模态,人类与人工智能之间可以无缝切换于文本描述、视觉图表、口头讨论及直接操作对方的代码之间。你们可能共享屏幕,让人工智能跟随并提出建议和意见,或者由人工智能共享其屏幕,当你在其操作过程中提供指导时。
除了以上的内容之外:
AI将接入公司的知识库,以便访问您的设计文件和客户访谈记录。无论是在独立操作还是与人类协作的情况下,AI都能在需要时无缝提取这些信息以进行决策。
如果你提出一个设计建议,AI会提供相关的用户访谈记录,并基于这些信息提出更优的建议。
AI工程师会为其工作中简单且可预测的部分指派更经济的子智能体,以此来降低计算成本和延迟。这就如同你浏览日志文件时,并不需要逐字逐句地阅读一样。
在Schluntz看来,AI工程师在某些方面将比大多数人类工程师更聪明,但有时可能会缺乏常识,或者需要重新集中注意力并接受指导。
实际上,这与当今经理及产品经理与工程师合作的方式并没有太大的差别。
正如计算器的发明并没有使得会计失业,反而提高了他们的工作效率,使他们能在更高的抽象层次上进行思考。
会计师仍然需要掌握数学运算及计算的理解,但诸如计算器和电子表格等工具使他们能创造比以往更多的价值。
同样地,人工智能也将降低软件开发的门槛,就如同现在任何人都可以使用Excel来进行个人财务管理一样。
学生们可以在宿舍里启动完整的应用和业务,小型工作室也可以为自己开发量身定制的软件工具。
此时,创造力将成为唯一的限制因素。人类工程师并不会被淘汰。
我们仍然需要在高级别上对任务进行优先级排序,理解问题的整体架构和范围,并审查AI的工作,特别是在系统规模变大时。
不同的是,我们将花费更多时间思考要构建什么,而不是反复考虑如何构建。
如今,Schluntz 已经摆脱了石膏的束缚,但他仍然习惯于将大部分的代码交由 Claude 来编写。
巧合的是,Cognition AI 的总裁 Russell Kaplan 在昨天也发布了一篇长推文,预测在人工智能越来越擅长编写代码的时代,软件工程行业将会如何演变。
Cognition AI 是首个开发出人工智能软件工程师 Devin 的公司。
根据Kaplan的看法,研究实验室将会对下一代模型的编码和推理能力进行更多的提升。不久之后,这些模型在编程方面将变得极为优秀。为什么会有这样的看法呢?
除了通用人工智能的发展之外,编程还有一个独特的优势:通过“自我对弈”来实现超越人类的数据扩展潜力。
模型能够编写并运行代码;或者编写代码、编写测试用例并检查其一致性。
这种类型的自动监督在大多数领域中难以实现,因为在接近人类专业水平的极限时,我们会遇到后训练数据的限制。但对于代码而言,情况则不同——它能够通过经验积累和自动化方式进行测试。
因此,软件工程在未来几年内将会发生根本性的变革。
真正的编码智能体将能够实现从头到尾的任务执行,并且能与今日的AI副驾功能互补。在这个全新的环境中,每位工程师都将扮演工程管理的角色,并且拥有一支由多个智能体组成的实习团队。
工程师只需要将基本任务委托给编码智能体,之后就能有更多时间专注于解决更高级别的问题,如理解需求、架构系统及决定构建的内容。
这将引领我们进入一个前所未有的软件繁盛时代。
很快,曾经难以开发且成本昂贵的软件将变得更易获得(可获取性提高10倍),同时还会出现大量的“一次性软件”。
未来的软件工程师数量将远超现在,不过他们的工作方式将大相径庭:更多采用自然语言,而较少使用固定的代码模板。
当然,对于这样的转变,工程师们能够很快适应,就像他们从前从汇编语言过渡到Python时一样。
除了直接提高生产力之外,这还会对初创公司产生实质性的“二次效应”。
首先,面向开发者的公司也会开始对编码智能体进行“营销”。毕竟,你的智能体将决定使用哪个云服务以及选择哪个数据库。
曾经作为优先考虑的用户友好命令行界面(CLI),将转型为智能体友好的用户界面(UI)/ 使用体验(UX)。
产品质素的标准也将提升。在一个开发人员能更快交付的环境中,半成品或是功能不全的MVP将不再被接受。
随着编码智能体的兴起,测试基础设施将变得越来越重要和普及。这是因为编码智能体不仅会编写更多的测试,还会依赖这些测试来验证它们的工作。
随着智能代理令代码迁移变得更加容易,转换成本将不再构成科技公司的护城河。企业甚至会将智能迁移助手与产品捆绑销售,以简化使用流程。
不论具体情境如何,总体的趋势是明确的:这是成为一个开发者最好的且最有效率的时代。
参考资料:
(注:您提供的文本内容非常短,若需重写具体文本内容请提供更多信息。)
本文转载自微信公众号:微信公众号(ID:null),作者为新智元。原文标题为《AI编程无需人类介入! Claude的工程师右手受伤后,竟然在一周内完成了3000行代码》。