AI编程的机会和未来:从Copilot到CodeAgent

大模型的快速发展带来了AI应用的井喷。统计GPT使用情况,编程远超其他成为落地最快、使用率最高的场景。如今,大量程序员已经习惯了在AI辅助下进行编程。数据显示,GitHubCopilot将程序员工作效率提升了55%,一些实验中AI甚至展示出超越普通程序员的能力。目前AI在编程领域所扮演的角色,更多的还是一个「效率工具」——以Copilot的形式帮助提高编程效率。

那么AI编程的下一步是什么?我们认为,是理解并生成复杂代码集、从而实现真正的软件自动化开发。如果AI能够像人类程序员一样,在大型复杂软件项目的代码集上工作,并且能有效地与人类工程师分工协作,生成几十万上百万行代码,这意味着对软件行业的根本性颠覆。

如纳德拉在GithubUniverse2023上所说,"当你向一个组织引进GithubCopilot,工作流程将发生改变。当销售人员开始写代码,这个组织就变了,它会以代码的速度前进。现在有了Copilot和代码的速度,从根本上改变了数字经济。包括汽车、金融、制药...每家公司都是家数字公司,也是家软件公司。"

最受开发者欢迎的AI编程工具

目前主要使用场景

据不完全统计,过去一年,市场中涌现的AI编程工具多达几十种。在此我们先对市场上的主流产品做个简要总结,方便读者对发展现状有个直观的了解。

创业公司的产品分为两类,一类是通用AI编程,跟巨头的产品重合度高;另一类聚焦垂类,在某个领域/功能做得深入。

通用AI编程

聚焦垂类的AI编程

除了如上的通用AI编程项目外,还有一些聚焦垂直行业或聚焦编程中某个具体环节的初创公司。包括

产品切入点

通过概览AI编程领域的主要项目,可以看到目前主流的产品趋势还是做CodeCopilot——即作为工具,辅助人类提升编程效率,而其中最具主导地位的是GithubCopilot,同时其他巨头也纷纷入局。在这样一个巨头林立的领域,初创公司目前主打的切入点主要有如下几种:

面向未来,有两个关键问题:AI编程会朝什么方向发展AI会不会取代人类码农的工作,实现完全的」软件开发自动化"

我们目前正处于第一个阶段:在这个阶段,AI大幅加速人类程序员工作效率,就好像一个人长了多只手,能够以更少的人力完成更多的工作。展望未来,AI编程的下个10x阶段,是他称之为「AIProductEngineer"的阶段,AI可以完成大部分工作,人类只需要在几个关键环节参与协作及决策。而在更远的未来,AI编程的终极图景,便是「AIEngineerAgent」,届时,软件工程领域已经是AI主导的天下,AIAgent可以互相协同完全自主地完成一个复杂项目。

现代软件工程经历了从早期瀑布流到最近25年中的敏捷开发模式,其成功的原因之一是代码和功能的不断积累。正是这种不断地快速迭代和积累,让软件工程成为人类社会中发展最快、复杂度最高的产业之一。未来如果AI编程自动开发成为主体,这种通过迭代和积累实现增量开发的模式会有什么改变呢?

大型软件项目的代码集规模远远超出AI目前context长度,未来也很难期待AI能够把代码集完整地装入内存。即便context长度可以无限扩展,它的编程能力仍受限于模型的推理能力。基于目前Transformer架构,仍然很难想象AI可以一次性地重新生成上百万行的复杂代码集。即便推理能力支持,其性价比是否真的支撑落地应用,也是一个巨大的问题。

一次性生成大型代码集的方法不仅非常脆弱,而且很不经济,其背后深刻的悖谬之处在于:一旦有人创造出能以增量式开发的AI自动软件开发系统,它在可靠性和经济性上一定会显著优于一次性生成整个代码集的系统。从系统演化的角度,不断优化积累的系统是唯一最终能够存活下来的系统,就像自然界最终选择的基因演化机制一样。

基于这个假设,我们认为,AI要想在编程领域真正替代人,最需要解决的是如何能像人类一样在软件这个不断积累的」增量「系统中工作。这需要AI对现有大型复杂代码集的理解,并在此基础上进行修改、扩充、测试等工作。

上文提到,AI要想在编程领域替代人类,必须要能在复杂代码集上做增量工作。而如何能够实现AI对复杂代码集的理解、并在此之上让AI接手呢?我们从软件开发的基本结构出发,分析实现这一功能所面临的主要挑战与突破点。

软件开发的三个阶段

对于一个独立的开发任务,无论新功能开发、现有功能改进、代码部分或全局重构、bugfix等等,几乎所有开发任务都包含三个阶段:

1)定义任务:Spec

这个阶段的交付是需求文档(Spec)。Spec具体描述任务的结果,即从软件的用户或维护者的视角看来,任务完成后软件系统有什么具体的改变,包括交互界面、系统行为和性能等。Spec的核心是把Why转化成What。

2)设计实现方案:DesignDoc

这个阶段的交付是开发设计文档(Designdoc)。DesignDoc描述需要对功能的哪些节点进行何种修改,并把一个任务分解为多个不同的步骤。DesignDoc把PM看到的产品的What转变成架构的What,同时讲清楚架构要如何实现(How)。DesignDoc最后一般会包含开发计划(Devplan)。

3)实现:代码及测试

这个阶段的交付是代码集的最终完成和测试。根据开发设计文档的规划,逐步完成代码,去跟外部API和底层操作系统对接,从而驱动软硬件完成任务。

AI在各阶段的作用

每个阶段的特点不同,AI起的作用相应的不一样。

1)Spec。Spec是把用户的需求转化成软件任务的过程。这个环节涉及到大量与人的交互,包括市场调研、反复沟通理解确认用户需求,目前这个环节靠人来做效率是最高的。

用一个简单的例子类比,让AI在现有的系统上增加个新功能,就好比要给一个城市增加地铁系统。其中涉及大量对现有城市交通状态的理解与规划,需要考虑全局的交通效率、做路线规划和资源分配,每个节点的变化都牵扯到其他一些节点的,不是单独增加一个地铁站就可以的。对应到代码集,系统级代码非常复杂,有很多相互关联的复杂函数调用、全局变量等约束及边界条件。

AI要解决这个问题,需要的是一个「全局地图」——一个能够让AI可以快速定位每个变动对于全局影响的「地图」。一旦有了这个全局地图,AI就能快速地理解代码、确定变化范围开始工作了。

3)Coding。实现阶段是对各模块的代码和测试。AI核心需要解决两个问题:

其一是对于开发环境的理解。任何代码最终都要落在具体的平台上,在哪个操作系统上、用什么编程语言、如何编译、代码管理、部署等等……这些都要求AI要对平台有深入的了解,就像人类工程师一样。人类工程师所掌握的,远远不止对编程语言的理解,而是对这一整套适配环境的理解。

其二是自动测试和Debug的能力。代码生成后,需要测试它是否正确地工作,有问题要能够找到问题所在。这是一个完整的CodeAgent必需的能力之一。

对于AI来说,构建理解复杂代码集所需的「全局地图」,关键是把针对代码集的RAG(retrieval-augmentedgeneration)做好。目前Transformer架构的大模型,没有RAG很难做好增量开发场景下的代码生成。RAG主要解决以下几个问题:

定位受影响代码,并做修改。

当大模型生成了新的代码后,因为它推理能力不足,生成的代码可能没有考虑到对整个代码集的影响,这样生成的代码一般是不完全或错误的。这个时候需要RAG去找到整个代码集中所有被当前修改影响的区域,然后再对那些代码区域进行修改。

代码的可维护性是AI编程的一个有趣的问题。

考虑自动软件开发系统的工作方式,AI是否会像人类个体一样参与大型软件项目?是否需要和人类协作共同开发一个代码集?AI写的代码未来由谁来维护?从机器人和自动驾驶的发展历史来看,开发人机协作的系统远比开发一个全自动的系统困难很多。如果AI生成的代码需要由人类工程师来维护,这个模式对自动软件开发系统提出了更严峻的挑战。

AI编程可能存在一种比较极端的新的可能性:如果代码都是AI生成的,而AI修改自己生成的代码或者重新生成代码都比人类要高效得多,那么是否可以放松复用的要求,同时也降低测试的复杂度?只要不需要人类维护AI生成的代码,也许更低的复用性未必会降低代码集的可维护性,甚至可能产生bug更少的代码。

AI编程整个赛道还在非常早期。虽然巨头已经纷纷杀入,但这个领域很难完全垄断。

举两个例子:上文所说的增量开发场景下理解整个代码集的问题,在目前就没有被很好地解决(SWE-Bench的研究也一部分验证了这个现实)。另一个例子是针对Legacy系统的维护,许多企业内部存在着大量legacycode,这些code不开源,经过常年积累,已经沉淀了许多商业机密,推倒重来需要耗费极其昂贵的成本,日常维护又消耗很多人力,是AI非常适合发挥作用的场景。

我们认为,AI编程的未来是CodeAgent,让AI越来越多地介入软件工程的各个环节,自动开发。跟所有AIAgent一样,做好CodeAgent的关键,在于构建世界模型以及Agent的经验积累和学习能力。

构建世界模型

多模态的发展让人与Agent沟通的方式更加丰富。GPT-5对多模态的支持,可以用架构图和设计图帮助AI建立对复杂系统的理解,应该比文本和代码的沟通带宽高很多。在许多场景中,综合运用多模态的方式相比单纯的文本会大大提升沟通效率。未来Agent对于多模态的应用能力,是竞争中很关键的一环。能够根据不同场景灵活运用多模态的Agent将更具竞争力。

CodeAgent的经验积累和学习能力

一旦被提供了复杂系统的信息,AI需要记住它。如何让AI记住世界是什么样子的,需要为AI建立好一套记忆体系——做好大模型记忆的存储、管理、调用等。

THE END
1.软件测试工程师,现在入行怎么样?而软件测试作为确保软件质量的重要环节,软件测试人员需求持续增长,尤其是那些具备扎实技能和丰富项目经验的人才。这对于那些还没有就业或者低薪想改变的年轻人来说,现在正是一个入行的绝佳机会。他们年轻、有活力、学习能力强,能够快速适应新的技术和环境。通过专业的培训,他们可以在软件测试领域崭露头角,获得高薪https://baijiahao.baidu.com/s?id=1816778427056543582&wfr=spider&for=pc
2.软件测试岗位,职业前景到底怎样?软件测试怎么样最近经常被问到软件测试这个行业的前景,网上也有大量唱衰测试这个行业的声音,很多选择职业方向的同学对是否要进入这个职业也非常迷茫。 所以开一贴来聊一聊秋草对软件测试这个岗位的要求以及对其前景的看法。 软件测试到底是个什么样的岗位? 选择一个行业,首先要了解这个行业存在的目的,到底是提供什么价值的? https://blog.csdn.net/danmyw/article/details/143270866
3.软件测试有前途吗软件测试有前途吗 不甘堕落 2024-10-29 11:49:42 推荐回答 不甘堕落 2024-10-30 10:15:02 软件测试有前途。软件测试在整个软件开发中占据了一半或一半以上的工作量。而且具有很高的组织管理和技术难度。搞好软件测试,是保证软件质量的关键步骤,是分析软件可靠性的重要依据。https://m.yyk.iask.sina.com.cn/q/OnkYQaQrrvF.html
4.软件测试工程师大学生就业前景如何?软件测试工程师的职业发展路径清晰且稳定。对于初入行业的大学生来说,可以从初级软件测试工程师做起。在这个阶段,主要工作是执行基本的测试用例,熟悉测试流程和软件功能。随着经验的积累和技能的提升,可以晋升为中级软件测试工程师,开始参与测试计划的制定、测试用例的设计,并对初级工程师进行指导。 https://www.bwie.com/jsgh/748.html
5.软件测试之困:测试工程化实践之路本书以软件测试工程化思维为基础,立足项目,采用描述、对话和独白等方式讲述测试工作中发生的故事,内容丰富、实用性强,是一本能帮助测试人员快速成长的图书。 本书首先介绍了测试工程化的认识和测试人员的商业意识;接着介绍了测试流程设计,以及如何通过流程拉齐各成员之间的目标,达到成员之间的合作有序和软件产品的质量https://labs.epubit.com/bookDetails?id=UB7da3e1c3b3dfd
6.X299主板怎么样/值得买吗?新一代酷睿i9和发烧级X299主板全面深度评测软件平台 使用的硬件都很标准了,四通道8GB内存(X299使用2666MHz、X99使用2400MHz),显卡则使用顶级的GTX1080Ti,更重要的是测试出CPU运算性能之间的区别。 基准性能测试 性能测试中,可以看到搭配i7-7820X的X299主板性能表现比上代的产品要强不少,CPU&内存综合性能提升了12%左右,但是CPU-Z的多核性能还稍有下降,但https://www.jb51.net/hardware/MotherBoard/561204_all.html
7.软件测试职业规划书(通用11篇)软件测试职业发展方向,大体上可以分为管理路线、技术路线、管理+技术路线。 测试初级阶段: 测试工程师,属于软件测试职业生涯的初级域,其适用范围是入行软件测试3年内的常规测试从业者,其主要工作内容是按照测试主管(即直接上司)分配的任务计划,编写测试用例、执行测试用例、提交软件缺陷,包括提交阶段性测试报告、参与阶https://www.gdyjs.com/jiuye/zhiyeguihua/191170.html
8.软件测试,发展前景有那么好吗?技能要求提升 随着行业发展,软件测试人员需要具备更高的技能水平,不仅要掌握基本的测试方法和工具,还需https://www.zhihu.com/question/627105539/answer/49418525987
9.101种最热门的EdTech工具Revision Buddies 为GCSE复习应用程序提供了一个现代化的学习方法,它是交互式的和引人入胜的。Revision Buddies 有成千上万的问题和详细的解释,这些问题和解释都是老师们写的,引导你找到考试需要了解的最相关的事实。 通过1000道选择题,分成相关大纲的每个主题,Revision Buddies 测试学生的知识,帮助他们找出学习中的差https://36kr.com/p/829435155242882
10.《帝国时代2》曾火遍全球却一度陷入陷入失败边缘凭借这一软件,团队能迅速浏览和分析图像数据上的内容,并为游戏生成许多自定义的数据文件。这一简单易学的GUI-based程序替代了不少早已过时的DOS指令行的功能。此外,它还能够自运行许多任务。长远来看为整个游戏开发过程省下了不少时间。 值得一提的是,Herb Marselas也付出了许多努力,编写了诸如Lint,BoundsChecker, 和https://www.gameres.com/756004.html
11.《软件测试经验与教训》.pdf文档全文免费阅读在线看《软件测试经验与教训》.pdf,软件测试 经验与教训 Lessons Learned in Software Testing Cem Kaner (美) James Bach 著 Bret Pettichord 译者序 应该承认,这是一本很吸引人的书。它的精彩之处在于它使各类软件测试人员,甚至是与测试人 员打交道的人,都能得到很好的启发https://max.book118.com/html/2015/1109/28959104.shtm
12.交流会发言稿(精选20篇)20XX年8月份我行从全辖抽调了一线业务技术骨干协助总行进行软件测试工作,参加测评人员不畏艰难,不怕辛苦,加班加点,连续奋战,经过多次反复测试,圆满完成了总行赋予的测评软件测试任务,得到了总行带队领导的好评。 (二)确立工作目标,突出训练重点 1、营造氛围,充分动员https://m.ruiwen.com/word/jiaoliuhuifayangao.html
13.软件测试年度工作总结(通用7篇)刚开始入行的时候,总是思考如何做好软件测试。认为公司的测试流程混乱总是很郁闷,认为自己学不到东西,如何才能测试好产品,常说心动不如行动,以前看到古龙小说中经常出现的场景无名小子不断挑战高手,总结积累。我总结了有些经验是实战中得到的,所以不断尝试引入新的测试流程然后评估,这个过程虽然很痛苦,但是从中积累了https://www.jy135.com/nianzhongzongjie/1471080.html
14.35岁失业,(软件测试)转行做啥:入职外包,已裸辞6.不转行,继续找软件测试—— 第一个面试 要求性能测试,10分钟挂掉; 第二个面试 瞎编自己会接口自动化,10分种挂掉; 第三个面试 要求熟练使用Linux,考了Linux命令,mysql命令,比较简单,但我回答的一塌糊涂,30分钟挂掉; 第四个面试 要求银行存款,支付经验,无此方面经验,10分钟挂掉;生活是个玄学,接到了这个offerhttps://m.douban.com/group/topic/294890027/
15.计算机职业规划范文(通用10篇)我的优势在于:较强的英语听说读写力量;丰富的需求分析和软件测试阅历;肯定的软件开发阅历;较强的学习力量;较强的沟通力量;良好的团队合作精神;综合力量比拟强(有些不虚心啊!但是实事求是!)我的劣势在于:专科毕业考的讨论生(有的企业会介意);没有足够的专项工作阅历。对于我的劣势我认为,虽然我是专科毕业考的讨论https://www.yjbys.com/jiuyezhidao/news/2009/1124/89435.html