当前位置: 首页 > news >正文

人工智能真的能编程吗?研究勾勒出自主软件工程的障碍

想象一下这样一个未来:人工智能悄然承担起软件开发的繁重工作:重构杂乱无章的代码、迁移遗留系统以及排查竞态条件,这样人类工程师就可以专注于架构、设计以及那些机器仍然无法解决的真正新颖的问题。最近的进展似乎让这个未来近在咫尺,但麻省理工学院计算机科学与人工智能实验室(CSAIL)以及其他几家合作机构的研究人员发表的一篇新论文指出,要实现这个潜在的未来,需要认真审视当前面临的挑战。

这篇题为《面向软件工程的人工智能:挑战与路径》的论文梳理了代码生成之外的诸多软件工程任务,找出了当前的瓶颈,并重点阐述了克服这些瓶颈的研究方向,旨在让人类专注于高层次设计,同时实现日常工作自动化。

麻省理工学院电气工程与计算机科学教授、计算机科学与人工智能实验室(CSAIL)首席研究员、该研究的资深作者阿曼多·索拉尔-莱萨马表示:“如今,人人都在谈论我们不再需要程序员了,因为现在有了各种自动化工具。一方面,这个领域确实取得了巨大进展。我们拥有的工具比以往任何时候都强大得多。但要真正实现我们所期望的自动化的全部潜力,还有很长的路要走。”

索拉尔-莱扎马认为,流行的说法常常将软件工程简化为 “本科编程的那部分内容:有人给你一个小函数的规格说明,然后你去实现它,或者是解决类似力扣风格的编程面试题”。而实际的实践范围要广泛得多。它包括日常的重构以优化设计,以及大规模的迁移,将数百万行代码从COBOL语言转换为Java语言,并重塑整个业务。它需要持续不断的测试和分析 —— 模糊测试、基于属性的测试以及其他方法 —— 来捕捉并发错误,或修复零时差漏洞。它还涉及维护工作的苦差事:为已有十年历史的代码编写文档,为新队友总结变更历史,以及从风格、性能和安全性等方面审查拉取请求。

行业规模的代码优化——想想重新调整GPU内核,或者Chrome的V8引擎背后持续不断、多层次的优化——仍然极难评估。如今的关键指标是为简短、独立的问题设计的,虽然多项选择题测试仍主导着自然语言研究,但在代码人工智能领域,它们从来都不是常态。该领域事实上的衡量标准SWE-Bench只是要求模型修复一个GitHub问题:这有一定用处,但仍类似于 “本科编程练习” 模式。它只涉及几百行代码,存在从公共代码库中泄露数据的风险,并且忽略了其他现实场景——人工智能辅助的重构、人机结对编程,或者涉及数百万行代码的性能关键型重写。在基准测试扩展到涵盖这些高风险场景之前,衡量进展(进而加速进展)仍将是一个有待解决的挑战。

如果说衡量标准是一个障碍,那么人机通信则是另一个障碍。第一作者亚历克斯·顾(Alex Gu)是麻省理工学院电气工程与计算机科学专业的研究生,他将如今的人机交互视为 “一条狭窄的通信渠道”。当他要求一个系统生成代码时,他常常收到一个庞大且无结构的文件,甚至还有一组单元测试,但这些测试往往流于表面。这种差距还体现在人工智能能否有效使用更广泛的软件工程工具上,从调试器到静态分析器,而人类依赖这些工具来实现精确控制和更深入的理解。“我对模型生成的内容并没有太多控制权,” 他说。“如果人工智能没有渠道来表明自己对内容的信心,比如‘这部分是正确的…… 这部分,也许需要复核一下’,开发人员就可能盲目相信那些虽能编译通过,但在实际应用中却会崩溃的虚假逻辑。另一个关键方面是,要让人工智能知道何时该向用户寻求澄清。”

规模加剧了这些困难。当前的人工智能模型在处理通常长达数百万行的大型代码库时困难重重。基础模型从公共的GitHub上学习,但顾说,“每家公司的代码库都有点不同且独特”,这使得专有编码规范和规格要求从根本上超出了其学习范围。结果就是生成的代码看似合理,却调用不存在的函数、违反内部风格规则,或者无法通过持续集成流程。这常常导致人工智能生成的代码出现 “幻觉”,即它生成的内容看似合理,但与特定公司的内部规范、辅助函数或架构模式并不相符。

模型也常常会检索出错,因为它检索到的代码名称(语法)相似,但功能和逻辑却不同,而功能和逻辑才是模型编写函数可能需要了解的内容。索拉尔 - 莱萨马表示:“标准检索技术很容易被那些功能相同但写法不同的代码片段误导。”

作者们提到,由于这些问题没有万全之策,因此他们呼吁开展社区层面的工作:获取更丰富的数据,捕捉开发者编写代码的过程(例如,开发者保留哪些代码、舍弃哪些代码,代码如何随时间推移而重构等);建立共享评估套件,衡量重构质量、修复漏洞的持久性和迁移正确性方面的进展;开发透明的工具,让模型能够揭示不确定性,并邀请人类进行引导,而非被动接受。顾险峰将这一议程描述为“行动呼吁”,以推动更大规模的开源合作,这是任何单个实验室都无法独自完成的。索拉尔 - 莱萨马设想通过渐进式进展——“分别针对这些挑战逐个取得研究成果”——反哺商业工具,逐步将人工智能从自动补全助手转变为真正的工程合作伙伴。

“这一切为什么重要呢?软件已经支撑起金融、交通、医疗保健以及日常生活的方方面面,而安全构建和维护软件所需的人力正成为一个瓶颈。谷说道:“一个能够承担繁重工作——并且在承担工作时不会引入潜在故障的人工智能,将使开发者能够把精力集中在创造性、策略性和道德性的工作上。但实现这一前景取决于认识到代码补全只是简单的部分,困难的部分在于其他所有方面。我们的目标不是取代程序员,而是增强他们的能力。当人工智能能够处理那些乏味和棘手的任务时,人类工程师最终就能将时间花在只有人类才能做的事情上。”

米斯特拉尔人工智能公司(Mistral AI)的人工智能科学家巴普蒂斯特·罗齐埃(Baptiste Rozière)没有参与撰写这篇论文,他表示:“人工智能辅助编码领域不断有新成果涌现,研究界又常常追逐最新潮流,因此很难静下心来思考哪些问题才是最需要解决的。我很喜欢读这篇论文,因为它清晰地概述了人工智能在软件工程中的关键任务和挑战,还勾勒出了该领域未来研究的有前景的方向。”

http://www.dtcms.com/a/290619.html

相关文章:

  • Next.js 知识点
  • 【c++】leetcode438 找到字符串中所有字母异位词
  • GC9112低压单通道全桥驱动器芯片解析:小封装大能量
  • uniapp扫描二维码反色处理
  • 苍穹外卖DAY10
  • 阿里云监控及运维常见问题
  • MetaGPT源码剖析(一):MetaGPT框架下的多智能体协作项目——software_company.py
  • 安科瑞:能源微电网助力工业园区“绿色”发展
  • 数字孪生赋能智慧能源电力传输管理新模式
  • 光伏电站气象监测系统:为清洁能源高效发电保驾护航
  • Android 单编 framework 相关产物输出介绍
  • 如何在FastAPI中整合GraphQL的复杂度与限流?
  • jps用法整理
  • CSS的content属性妙用指南
  • 深度解析 HTML `loading` 属性:优化网页性能的秘密武器
  • 复习前端html,css,javascript
  • 一个适合MCU的分级菜单框架
  • 广播(Broadcast)和组播(Multicast)对比
  • docker磁盘空间不足解决办法
  • 【Qt Designer使用快捷键】
  • 【iOS】锁[特殊字符]
  • 18 零基础学webUI | Controlnet精讲(04)-图像风格转换类条件控图详解
  • 3、Spring AI_DeepSeek模型-多轮对话
  • Java在POJO中标记字段不需要被持久化到数据库,以及标记字段在对象序列化时忽略
  • 2025最新版IntelliJ IDEA Ultimate for Mac专业版安装使用指南
  • websocket和https的区别
  • 多尺度卷积模型:Inception块
  • 基于单片机儿童滞留车内防滞留系统
  • Go中的UDP编程:实战指南与使用场景
  • C语言重难点小复习(结构体/联合体/枚举)