为什么人工智能还不能成为真正的程序员?

文章来源:IEEE电气电子工程师学会
作者:Rina Caballar


人工智能(AI)已经改变了编码领域,AI编码工具可以完成源代码编写、纠正语法错误、创建内联文档,以及理解和回答关于代码库的问题。随着这项技术超越了对编程任务的自动化,完全自主编程的概念日益凸显。AI准备好成为真正的程序员了吗?

一篇新论文给出了否定的答案,并详细阐述了原因(https://arxiv.org/pdf/2503.22625)。来自康奈尔大学、麻省理工学院计算机科学与人工智能实验室(MIT CSAIL)、斯坦福大学和加州大学伯克利分校的研究人员强调了当今AI模型所面临的关键挑战,并概述了解决这些挑战的有前景的研究方向。他们在2025年国际机器学习会议上展示了他们的研究成果:https://icml.cc/Conferences/2025

在一片hype(炒作)声中,这项研究给出了冷静的现实审视。该论文合著者、麻省理工学院计算机科学与人工智能实验室(MIT CSAIL)副主任Armando Solar-Lezama表示:“从某种程度上来说,这项技术已经具备强大能力且颇具实用性,如今不用这些工具进行编程,会让人感觉十分原始。” Solar-Lezama同时在MIT CSAIL领导计算机辅助编程团队。不过他认为,人工智能驱动的软件开发尚未达到“能像与人类程序员协作那样,真正与这些工具开展协作的阶段”。


人工智能编码工具面临的挑战

该研究指出,人工智能在编码的多个关键方面仍存在困难:涉及大型代码库的广泛开发范围、包含数百万行代码的超长上下文长度、更高层级的逻辑复杂性,以及为维护代码质量而对代码结构与设计进行的长期规划(即“长周期规划”)。

加州大学伯克利分校计算机科学教授、该论文合著者Koushik Sen以修复内存安全漏洞为例进行说明。(此类漏洞可能导致程序崩溃、数据损坏,并引发安全隐患。)Sen解释道,软件工程师调试时,首先可能需要定位错误的根源,“而在大型代码库中,错误根源可能与崩溃发生的位置相去甚远”。此外,工程师还需理解代码的语义及其运行机制,并基于这种理解进行修改。他补充道:“你可能不仅要修复这个漏洞,还得调整整个内存管理体系。”

这类复杂任务对人工智能开发工具而言难以应对,往往会导致工具对漏洞位置或根本原因产生“幻觉”(即错误判断),还可能给出无关建议,或提供存在隐性问题的代码修复方案。Sen表示:“这类任务存在诸多失败风险点,而我认为当前的大型语言模型(LLMs)并不擅长处理这类情况。”

研究人员针对解决人工智能编码挑战提出了多种方向 —— 例如训练代码领域的大型语言模型(code LLMs),使其能更好地与人类协作,同时确保人类对机器生成的代码进行监督 —— 在这些方向中,“人的参与”始终是核心要素。

Solar-Lezama指出:“软件开发的很大一部分工作,在于建立一套通用术语体系,以及对‘问题是什么’,‘我们希望如何描述这些功能’形成共识。这需要为系统架构找到恰当的隐喻来达成理解。而这种能力很难通过机器复制。相较于与真实同事协作时能完成的所有事,我们与这些(AI)工具的交互范围仍然十分有限。”


加强编码领域的人机协作

从长远来看,打造更优的交互界面(当前这类界面主要依靠提示词工程驱动)对提升开发者效率至关重要。Solar-Lezama表示:“如果要花更多时间向系统解释你想做的所有事、以及所有细节,那这种方式本质上只是换了个名头的编程而已。”

圣母大学计算机科学系副教授、软件工程师Shreya Kumar(未参与该研究)也认同这一观点。她说:“我们之所以需要编程语言,是因为它能确保表述的准确性(无歧义)。但现在,我们却要想方设法调整提示词,只为让工具能理解我们的需求。我们在主动适应工具,结果本该是工具为我们服务,现在反倒成了我们为工具服务。有时候,这比直接写代码还要费力。”

正如该研究指出的,解决人机交互困境的方法之一,是让人工智能系统学会量化不确定性并主动沟通 —— 当遇到模糊的指令或不明确的场景时,主动请求澄清或索取更多信息。Sen补充道,人工智能模型还可能“缺失我作为开发者脑海中已有的背景信息 —— 那些隐含在代码中、却难以从代码本身解读出来的隐性概念。而如果我能给大型语言模型(LLM)提供任何关于当前情况的提示,它或许就能取得更好的进展。”

新加坡国立大学计算机科学教授Abhik Roychoudhury(同样未参与该研究)认为,这篇论文以及大多数人工智能辅助软件开发工具都存在一个关键缺陷:未能捕捉用户意图。

他表示:“软件工程师在工作中会花费大量精力思考,以理解代码的意图。这种‘意图推断’—— 即判断程序‘实际在做什么’、‘应该做什么’,以及两者之间的偏差 —— 正是许多软件工程任务得以推进的核心。如果未来面向软件工程领域的人工智能工具能融入这种‘意图视角’,那么它们就能更接近软件工程师的工作方式。”


人工智能编码的未来方向何在?

Roychoudhury还认为,鉴于软件工程领域人工智能技术的快速发展,论文中指出的诸多挑战要么目前已在攻关,要么“将相对较快得到解决”。此外,他相信“智能体化人工智能”(agentic AI)方法会有所帮助 —— 他认为人工智能智能体(AI agents)在处理需求规格说明书、确保这些需求能在代码层面落地执行方面,具有巨大潜力。

Roychoudhury表示:“我认为,通过智能体实现软件工程自动化的趋势或许是不可逆转的。我甚至可以大胆地说,这种趋势必然会成为现实。”

Sen也持相同观点,但他的视野不止于智能体化人工智能方案。他特别指出了一些思路,例如利用进化算法(evolutionary algorithms)提升人工智能的编码能力,以及像AlphaEvolve这样的项目 —— 这类项目采用遗传算法(genetic algorithms),“对解决方案进行筛选、选出最优方案,然后在此基础上持续优化”。Sen认为:“我们需要为编码智能体(coding agents)采用类似技术,让代码在后台实现持续优化。”

不过,Roychoudhury也提醒,更核心的问题在于“你是否能信任这些智能体;而且随着编码自动化程度越来越高,这种信任问题还会进一步加剧”。

这正是人类监督仍不可或缺的原因。圣母大学的Kumar表示:“必须建立一套检查与验证流程。若想打造一个可靠的系统,就确实需要让人类参与到(人机协作的)流程中(即‘人类在环’)。”

Solar-Lezama也认同这一观点。他说:“我认为,我们最终始终是要为人类开发软件的,这就意味着我们必须明确自己想编写什么样的代码。从某种角度来说,实现完全自动化的真正意义,其实是让我们得以在一个更高的抽象层面开展工作。”

因此,尽管人工智能或许在不久的将来能成为一名“真正的程序员”,但Roychoudhury认为,它很可能无法赢得软件开发人员作为“团队成员”的完全信任,进而可能无法被允许完全自主地执行任务。他表示:“这种团队互动机制 —— 即当人工智能智能体成为团队一员时,它将承担何种任务、团队其他成员又将如何与它互动 —— 本质上正是人机协作边界的核心所在。”


本文转自:IEEE电气电子工程师学会,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。

最新文章