AI软件工程与编程
要解决的问题是什么
几个月前,我与某机构的一位董事会高管和一名开发人员进行了一次有趣的对话。我们对话的主题是生成式人工智能的应用场景。
高管:“我觉得这全是炒作。我认为生成式人工智能目前还没有任何真正可行的应用场景,更没有能在企业层面大规模落地的案例。”
开发人员:“嗯……这就有意思了。我在工作中每小时都在用生成式人工智能。我写代码离不开它,因为它与GitHub集成在了一起,想不用都难。它让我的工作变得轻松了。我们(开发人员)都这么用。”
数据也印证了这一点,编程常被列为人工智能最常见的应用场景;根据Stack Overflow的数据,超过56%的开发人员会使用GitHub Copilot来获得支持。
人工智能可以提供哪些帮助
编程涵盖各种各样的任务。在2023年的一篇论文中,微软、GitHub和麻省理工学院的研究人员指出,当“要求软件开发人员使用JavaScript尽快实现一个HTTP服务器时,使用GitHub Copilot的实验组完成任务的速度比不使用任何人工智能的对照组快55.8%”。
GitHub在2024年又发布了一项进一步的研究,该研究覆盖了2000名使用人工智能的开发人员。研究结果显示,人工智能在更广泛的领域也有益处:
• 开发人员的满意度提升了60%~75%。
• 节省了开发人员的脑力,73%的人表示人工智能可以帮助自己“保持心流”,87%的人认为人工智能有助于自己“在重复性任务中节省脑力”。
• 生产力提升了88%。
当然,你应该始终问问自己,这是否适用于你的组织。而且要注意,并非所有的编程任务都很简单。SWE-bench测评可以衡量人工智能在高难度编程任务中的能力,这些任务要求“协调系统中多个函数的变更、与各种执行环境交互并进行复杂推理”。该测评发现,即便是表现最佳的人工智能工具,也远非完美。在数据集里近3000个问题中,Claude 2 仅正确解决了4.8%的问题。
波士顿咨询集团于2024年发布的研究表明,生成式人工智能在数据科学相关任务中也能带来生产力的提升,比如在数据清洗方面提升49%、预测分析方面提升13%,以及统计理解方面提升20%。此外,还有很多例子显示,开发人员在老旧技术迁移过程中使用生成式人工智能,有助于加快从一种编程语言或领域转向另一种编程语言或领域的过程。
简而言之,人工智能在处理简单、结构化的编程任务方面表现极为出色,并且正迅速将其优势扩展到更广泛的软件和数据科学应用场景中。
技巧与方法
利用人工智能进行编程主要有以下两种基本方式。
•使用独立的前沿模型:最简单的方式是直接让Claude或ChatGPT“帮我编写Python代码完成X任务”,或者“看看这个网站,为我编写能生成类似设计效果的HTML和CSS代码”。和往常一样,提示词的细节决定成败。但我相信,即便只给模型有限的指导,你也会对其生成的代码质量感到惊讶。当然,请务必先运行并测试代码。
•在开发工作流程中使用集成的人工智能工具:这是目前开发人员的首选方式。鉴于微软公司的GitHub的广泛普及,其旗下的GitHub Copilot (该工具由OpenAI技术提供支持)已成为目前使用最广泛的人工智能工具之一,但也存在许多其他工具。这些工具都配有明确的使用指南和提示,以帮助用户快速上手并有效运用。
当然,编程只是计算机工程学科的一小部分,而更传统的机器学习技术早已被用于数据清洗和标准化。英国首相府人工智能孵化器甚至推出了一个由机器学习驱动的数据共享环境rAPId,以解决数据基础设施问题。
许多评论人士开始质疑对人工智能的炒作是否言过其实。编程领域的情况给出了颇具启发性的答案。正如软件工程师尼古拉斯·卡利尼(Nicholas Carlini)所说:
“我认为近期的技术进步并非只是炒作……因为人工智能解决复杂任务的能力越来越让我印象深刻。我可以说,在为研究项目编写代码时,我的效率提高了50%。如果要我对人工智能擅长的任务进行分类,那就是‘帮助我学习’和‘把枯燥的任务自动化’。”
谁不希望在学习时得到更好的支持呢?谁不希望摆脱那些枯燥的工作呢?
实用建议与指导
• 复杂的问题依然复杂。在这方面,人类的密切监督尤为重要。
• 人工智能在编程领域带来的生产力提升是实实在在的。组织层面需要思考的问题是:如何实现这些益处?是增加人工智能的工作负载、改善人类员工的工作状态并减少工作时间,还是削减人员数量,抑或采取别的什么方式?
• 团队合作的开发人员总是比单打独斗的开发人员表现更好。在使用人工智能时,这一准则同样适用。组织应鼓励团队分享所用工具的相关知识,并总结、分享经验教训。

夜雨聆风