点击蓝字 关注我们
SUBSCRIBE to US
ANDRIY ONUFRIYENKO/GETTY IMAGES
一系列由人工智能驱动的全新编码工具(https://spectrum.ieee.org/ai-programming)正在崭露头角——它们宣称自己相比起GitHub Copilot、Amazon CodeWhisperer 和 Tabnine 这些早期AI助手要更加具有自主性。
人工智能应用实验室Cognition称其中一款新产品Devin AI(https://devinai.ai/)为 "AI软件工程师"。据 Cognition 所说(https://www.cognition-labs.com/),Devin可以无人协助的完成以下所有任务(https://www.cognition-labs.com/introducing-devin):从头开始建立一个网站并进行部署,查找并修复代码库中的错误,甚至训练和微调自己的大型语言模型(https://spectrum.ieee.org/tag/llms)。
在Devin推出后,Devika(https://github.com/stitionai/devika)和OpenDevin(https://github.com/OpenDevin/OpenDevin)等一系列开源替代品应运而生。与此同时,那些现有AI助手的制造者们也没有停滞不前。GitHub Copilot的开发商——微软的研究人员最近向arXiv上传了一篇论文(https://arxiv.org/abs/2403.08299),介绍了AutoDev。它使用自主AI生成代码以及测试用例,随后自行运行测试并检查结果,修复测试用例中的错误。
“能看到更多具有全新功能的AI编程助手真是令人兴奋”,软件公司Sonar的程序员兼开发者Ben Dechrai说到:“他们验证了开发者的工作流程中对生成式人工智能工具的需求(https://spectrum.ieee.org/what-is-generative-ai)。”
Dechrai补充说,这些编码助手可以帮助软件工程师更快地编写代码,使他们能够专注于更具战略性和创造性的任务。普渡大学电气与计算机工程系教授Saurabh Bagchi同时指出,这些编程工具的另一个优势是能够创建代码模板。他提到,开发人员必须像AI提示工程师(https://spectrum.ieee.org/prompt-engineering-is-dead)一样向这些助手提供 "正确的软件需求以生成模板,然后软件工程师就可以填补这些模版中的空白"。
"想要开发直观的系统,你就需要一个由人类参与、提供反馈的软件迭代过程"。
—SAURABH BAGCHI, PURDUE UNIVERSITY
这些模版中的空白包含了安全性以及可靠性方面的考虑。软件工程师必须时刻注意AI生成代码中存在的安全漏洞,以及可能导致代码崩溃的极端情况。
"开发人员在分析和审查使用生成式AI编写的代码时,仍然需要像对待人类开发的代码一样确保严格的质量标准," Dechrai说,"人工智能编码助手擅长为代码提供建议、反馈并推理代码的有效性,但即便如此,它也并非百分之百准确。"
Dechrai告诫说,自主编码器 "仍是一个新生事物,开发人员才刚刚开始学习哪些用例可能最有益"。Bagchi说,它们还需要 "在现实世界中得到验证,以了解它们能在多大程度上完成其预想的工作"。
人工智能编码器与人类
随着这些 "AI软件工程师 "的出现,他们取代人类软件工程师的末日预言也必将随之而来,但这不会很快发生。例如,Devin仅仅解决了GitHub上真实世界代码库中14%的问题(https://www.cognition-labs.com/post/swe-bench-technical-report)。Bagchi说:"想让它们成为我可以闭着眼睛信任的工具,还有很长一段路要走。”

他同时指出了这些自主编程工具的另一个盲区:软件开发(https://spectrum.ieee.org/tag/software-development)事实上是在协作中进行的。这些编码辅助什么都想试试,而且确实可能做得还不错。但一般来讲,不同的软件工程师都有自己的专长,如前端、后端、全栈或数据等,他们往往会通力合作,共同打造出一个具有凝聚力的产品。
Bagchi 说:"要想开发直观的系统,你就需要一个迭代的过程,让人类参与其中,提供反馈。"人类最基本的直觉、深度和想象力必须得到发挥。
这就是为什么Bagchi认为这些缺少人类辅助的版本至少在目前不会占据编码助手的主导地位。"这些模型在底层架构上大相径庭,随着技术的不断发展,它们都会变得更好,"他说,"但Copilot或 CodeWhisperer模型似乎最有前途,更适合人类在人工智能协助下进行复杂软件开发。"
然而,程序员们 "如果还没有开始使用这些工具,就应该开始尝试了,以免他们有可能落后,"Dechrai表示,"如果你想知道人工智能编码助手是否真的有益,你就必须亲自使用它,了解它,也该看看它失败在哪。"
Bagchi对此感同身受:"人们应该在用例中尝试他们,并在你正创造的软件类型中着重使用它们"。但是,由于无辅助编码助手是一项新兴技术,它们很可能会飞速的进化。"因此你必须时刻跟踪它们的发展,"他补充道。
不仅如此,软件工程师还必须 "始终如一地确保代码在其整个生命周期内都是安全、可靠和可维护的",Dechrai 说,"开发人员始终要正确理解代码的输出结果及其生成方式"。
供稿:胡乐
微信号|IEEE电气电子工程师学会
新浪微博|IEEE中国
 · IEEE电气电子工程师学会 · 
继续阅读
阅读原文