芯片资讯
- 发布日期:2024-01-09 07:24 点击次数:62
20 世纪 60 年代末出现的“软件危机”揭示了软件开发中的诸多问题,也是在此时,软件工程概念正式诞生。此后,软件工程的发展经历了多个阶段。自去年 ChatGPT 带火大语言模型热潮后,软件工程的发展迎来了里程碑式的新跨越:大模型增强了自然语言处理能力,使得人机交互更直观,并以协同者的形式参与到软件开发的整个周期中,推动了编码任务的自动化,加快了开发周期和提升软件产品的质量。
如今,大模型已经可以在软件开发的多个环节(如功能设计、代码开发、测试)中发挥作用,未来,大模型的能力边界还将继续扩大。越来越多的开发者担心自己在某一天会被 AI 所取代,甚至有人用“OpenAI 杀死了开发者”来形容当下的困局。一些技术专家也给出了悲观的预测:
Fixie 联合创始人兼 CEO、前谷歌 Chrome 移动团队工程总监 Matt Welsh:“程序员这个工作或许在三五年内不复存在,甚至编程这个学科都会被终结。”
Stability AI 创始人兼 CEO Emad Mostaque:“五年内,人类程序员将彻底消失。”
马斯克:“有一天,人们将告别艰苦的工作,人工智能将接管大部分任务。”
……
以大模型为代表的 AI 技术在过去一年以超乎想象的速度进化,不断重塑我们的生活和工作方式。回溯大模型技术在软件开发领域落地应用这一年,究竟带来了哪些改变?开发者如何应对大模型带来的冲击?在大模型的驱动下,软件开发又将走向怎样的未来?
大模型已经成为 软件工程变革的最大推动力 大模型浪潮下,编码助手走向自动化
早在 2020 年,大模型就已经在技术领域得到应用,但在当时,大模型还局限在自然语言中。随着 2022 年 11 月底 ChatGPT 的发布,以及 GPT-4、LLaMA 等大模型相继亮相,大模型早已超越了自然语言范畴,发展到了编程语言。
汇量科技 Mobvista 技术 VP 兼首席架构师蔡超认为,2023 年 AI 领域的大事件除了包括 GPT-4、LLaMA、Falcon 等大模型的发布,以 Copilot 形式为代表的大模型技术在不同领域的应用同样值得关注,如 Microsoft 365 Copilot、GitHub Copilot 等等,这些 Copilot 让 AI 真正成为了一个人类的虚拟助手或员工,并深刻地改变很多行业的工作模式。
与传统的机器学习方案相比,这波大模型浪潮在编码助手领域的明显趋势是性能获得显著提升、且构建门槛大幅降低:基于大模型的自动编码能力可以遵循设计指令,通过简单的自然语言交互生成高质量代码和程序。同时,项目研发过程中形成的数据、经验和业务需求也可以被大模型掌握并转化为通用的软件工程能力,进而取代更多的流程和工具,解决复杂的开发难点和团队协作问题。
腾讯机器学习平台技术总监、算法负责人康战辉认为,大模型浪潮的兴起推动了 AI 编码助手迈向自动化,并存在以下三大发展趋势:
第一,过去的 AI 编码助手主要应用于软件工程领域。但如今,所有通用的大模型都具备编码功能,这是该领域的一项明显变革。
第二,尽管过去存在诸如启发式规则和深度学习等方法,但现今的 AI 编码助手展现出了更高的智能化水平。它们不仅处理代码辅助输入和续写,还能通过自然语言与人类交互,这一特点尤为强大。
第三,大家过去常谈及低代码或无代码的趋势,主要通过拖拽和积木式工具实现。而今,借助 AI 编码助手,开发人员和技术人员只需用自然语言清晰地描述想法,便能轻松实现低代码、无代码开发。这意味着低代码、无代码的概念已发生变化。
2023 年,大模型正加速进化。最新发布的 GPT-4 显著提升了代码能力,也让大家看到了其在多个公开代码测试集上的出色表现。同时,LLaMA 等开源大模型也加速了 AI 编码助手在业界的应用,不少企业基于开源大模型进行领域增训,代码版本表现卓越。
“现如今,许多公司可以基于开源的代码模型构建自己的 Copilot,进一步加速 AI 代码助手的实际应用。这不仅在闭源和开源领域产生了积极影响,还促使更多公司开发自己的代码助手。随着 Copilot 概念的普及,各公司正采取多种方式提升效能,深入整个研发链路。这可能标志着 AI 编码助手领域的一个重要趋势变化。”康战辉提到,更加值得思考的是,代码在从大模型中获取大量世界知识和逻辑知识的同时,也在反哺大模型。
通用大语言模型其逻辑能力的提升在很大程度上得益于代码续写。代码作为一种类似于自然语言的表达方式,为模型提供了丰富的逻辑训练数据。由于很多代码是用英语编写的,其中的保留词与英语非常相似,这种以自然语言为基础的代码符号实际上表达了一种人类的逻辑。因此,代码续写和大语言模型之间存在着相辅相成的关系。通过代码续写,大语言模型能够更好地理解和表达人类的逻辑,从而提升其逻辑推理能力。同时,大语言模型的发展也为代码续写提供了更强大的工具和平台,使得代码续写更加高效和准确。
这种相辅相成的关系不仅有助于提升大语言模型的逻辑能力,还能够促进代码续写的进一步发展。未来,随着技术的不断进步和应用场景的不断扩大,代码续写和大语言模型将会在更多领域发挥其巨大的潜力。
思码逸创始人兼 CEO 任晶磊认为,从长期来看,大模型已经成为软件工程变革的最大推动力,并有望为软件开发团队提供新的人工智力资源和更高效的协作方式。但短期内,大模型的基础能力未必能够达到人们想象中的美好愿望。“所以我们在 2023 年也看到了 GPT 编程的‘冷热’交替。人们对大模型的认知被推上‘愚昧之巅’,又走向‘绝望之谷’——亲历种种跌宕起伏,我们的心态也受到很多冲击。”
大模型时代下的编码工具及背后技术
不少受访专家提到,在大模型技术的加持下,编码工具能力边界得到了进一步拓展。
过去的编码工具主要依赖于语法树和部分统计机器学习技术,应用场景主要是针对函数级的续写,例如在编写代码时,可以快速地利用某个代码库中的公共功能,但通常只能理解某个函数或 API 上下文,然后生成相关代码片段,存在一定的局限性。
据网易杭州研究院人工智能专家、AI 算法团队负责人刘东介绍,目前 IT 行业主要存在两大类经过大模型改造过的工具:面向专业程序员,主要是专注于编程开发环节的编码助手工具产品,包括代码补全、函数生成、代码纠错、Chat 咨询开发相关问题,以及简单的测试用例生成,典型工具如在 JetBrains、VSCode 等主流 IDE 中提供智能编程助手插件等。面向数据消费人员,尤其是业务、产品、运营等非技术人员,过去主要是 GUI 形式的 BI 工具,涉及维度、指标等概念的理解,门槛比较高、操作复杂。目前已有基于大模型的对话式 BI 产品,如有数 ChatBI 等,能够降低非技术人员取数门槛、提升数据分析效率。
虽然当前主流的 AI 编码工具与传统编码工具存在相似性——都是在主流 IDE 中作为插件产品提供给开发者,但其背后的技术方案却存在显著的差异:在 AIGC 时代,主要的算法技术方案是大模型和检索增强。背后具体又涉及到几个关键技术,如以自然语言为代表的深度学习技术、强化学习技术等。此外,代码模型需要处理大量的代码数据,同时还需要通用数据来学习背后的逻辑和知识,因此大模型技术还包括大数据处理能力,特别是处理代码的能力。
“目前在 AIGC 编程工具中,代码领域大模型、项目代码等检索增强技术必不可少,对实际编程体验都有显著影响。代码大模型是让编程工具更聚焦到编程领域,检索增强技术更能有效利用企业项目代码或个人代码仓库、以实现个性化实时信息增强。”网易数帆人工智能产品线总经理胡光龙总结道。
代码模型开发有哪些关键点?
随着大模型热潮持续升温,越来越多的国内外科技公司参与其中,押注 AI 大模型及相关 AI 应用。其中,国内的 AI 大模型包括百度“文心一言”、阿里云“通义千问”、腾讯“混元”、华为“盘古”、网易“玉言”、抖音“云雀”、智谱 AI“ChatGLM”、中科院“紫东太初”、百川智能“百川”、浪潮信息“源”、商汤“日日新”、科大讯飞“星火”等等。值得一提的是,不少大模型都具备编程能力,大模型通过学习大量的代码样本,可以理解和生成代码,甚至可以完成代码修复和自动编程等任务。
浪潮信息人工智能软件研发总监吴韶华认为,大模型通常在语言相关任务上表现出色,在逻辑和计算方面相对较弱。但从 GPT-4 开始,编程能力逐渐受到开发者的重视,并成为评估大模型能力的重要标准。尽管编程能力不一定是大模型的“基本”能力,但当前许多大模型确实具备了一定的编程能力。对于大模型来说,提升编程能力的关键在于建立代码更改与人类指令之间的联系。通过层次化的自然语言将算法任务分解,逐步引导模型完成代码生成。 这种方法对训练数据的质量要求极高。为了实现这一目标,开发者需要精心选择和准备高质量的训练数据,以确保模型能够从中学习到有用的知识和技能。此外,还要不断优化模型的架构和训练过程,以提高模型的编程能力和泛化能力。
据康战辉介绍,在代码模型的开发中,有几个关键点不容忽视:
首先,高质量的代码数据是基础。这不仅涉及到数据的收集,更重要的是数据的清洗。由于编程语言的多样性,人工干预在代码清洗过程中是必要的,团队需要理解什么是高质量的代码,这涉及到代码的格式和实现质量。这就需要领域代码的专业人员来进行高质量的代码识别和清洗,他们能够识别出优秀的代码并进行整理。
其次,如果代码存在缺陷或错误,如何进行修正也是关键。这相当于为代码模型提供一些“老师”,以确保模型不仅能学习到数据,还能纠正错误。因此,高质量的数据标注对于模型的表现至关重要。这需要团队投入大量的时间和精力在数据清洗和修正上。
此外,安全性是另一个重要考虑因素。虽然底层代码可能是安全的,但如果涉及到与用户界面的交互,如 SQL 查询等,就可能存在 SQL 注入等安全风险,前端代码也可能存在漏洞。这需要团队对领域代码语言有深入理解,并关注安全性问题。因此,具备综合能力的人才在解决这些问题上将发挥关键作用。
“总的来说,代码模型的开发是一个多目标的过程,既要求对代码本身有深刻理解,又要求对安全性等方面有专业知识。这意味着需要各领域的专家,并且需要具备多方面技能的人来处理这些问题。”康战辉总结道。
除了基础大模型,2023 年也涌现出了很多软件开发垂直领域的专业模型,以及各种协助型 AI 编程工具。比如在低代码平台领域,网易数帆自研玉言 NL2NASL 领域大模型,将低代码平台升级为 CodeWave 智能开发平台,聚焦在以全栈低代码、智能大模型为基座打造的软件开发工具平台;思码逸基于 ChatGPT 开发了一款可以辅助研发效能提升的插件 DevChat,支持 VS Code 和 IntelliJ 多种主流 IDE,将大模型能力送到开发者手边。
刘东认为,大模型在落地应用方面有着巨大的想象空间,WeEn(瑞能半导体)功率半导体/二极管/TVS/ESD/IGBT模块 其中最重要的一个方向是利用自然语言进行人机交互(LUI),LUI 相比传统的命令行和 GUI 方式更为便捷和自然。在软件工程领域,大模型的应用目前仍处于探索阶段,“大模型在软件研发工作流中最大的价值是辅助人工提效。业界期望能够在软件工程全链路中使用大模型,包括项目管理、需求分析、编程开发、智能测试、部署运维等环节,期望能提升全链路效率,加速软件开发。”
AI 大模型在研发效能提升方面 具有独特的优势和潜力
那么,在软件开发的过程中应用大模型或其他 AI 技术,实际体验如何?真的可以提效吗?
分析公司 O'Reilly 日前发布的《2023 Generative AI in the Enterprise》报告指出,越来越多的开发者正积极在工作中应用 AI 技术:77% 受访者使用 AI 来辅助编程;54% 受访者预计,AI 的最大好处是提高生产力;66% 受访者预计,利用 AI 编程是未来开发人员“最需要的技能”;16% 从事 AI 工作的受访者表示正在使用开源模型。
不少受访专家在接受 InfoQ 采访时也提到,个人及团队会在内部研发中广泛应用大模型,确实提升了研发效率。“我们在 2023 年初,GPT3.5-Turbo 发布之后就开始着手将大语言模型应用到我们软件开发过程中,并且与公司的 DevOps 平台 MaxCloud 结合,构建了 DevOps Copilot,还开发了我们自己的 VS Code 插件。”蔡超提到,随着时间的推移,大模型的应用范围已经从最初的运维和部署环节扩展到了软件开发的全过程,包括设计、编码、测试、部署以及线上维护。从实际效果来看,大语言模型在软件开发中的应用取得了显著成果。“根据我们的统计数据,现在的使用频率和代码生成量都比最初翻了近 10 倍,线上系统的发布效率及稳定性都有很大提升。”
对于企业而言,研发效能的提升至关重要,甚至有观点认为,研发效能高已经成为一家科技公司的核心竞争力。AI 大模型通过自动学习和生成代码,加快开发速度,减少开发时间和人力成本,并通过自动化的测试和优化来进一步提高开发效率,提高代码质量和稳定性,其在研发效能提升方面具有独特的优势和潜力,能够降低人们落实最佳工程实践的阻碍和成本。
任晶磊提到,实际上,许多开发者并不是不知道什么是最佳工程实践,而是由于时间和精力的限制,或者是因为惰性,不愿意去做。仅仅依靠管理者的口头要求往往很难推动实施。例如,按照规范编写提交信息、编写单元测试等,需要开发者付出额外的精力。如果 AI 大模型能够显著减少人们在这些方面所需的精力消耗,降低成本和阻碍,那么它就能够有效地推动开发者和团队采取实际行动。因此,AI 大模型的应用有望提高开发者的生产力和效率,推动软件开发行业的持续发展。
但一个事实是,当前大模型的产出还是需要人来把握和负责,类似于 L1/L2 级别的自动驾驶,人在其中扮演的角色至关重要。这也代表着,研发效能度量本身并没有发生根本性变化,依然可以通过统计项目或团队的需求吞吐、代码当量、缺陷密度等指标度量研发效能。
“从务实的角度出发,我们建议企业首先将大模型应用于效果更加可见的场景中,否则这部分投入很快也会被管理层挑战。例如,辅助写好单元测试,可以提升单元测试覆盖率(可见的结果),特别是覆盖复杂度高、被依赖多的高危函数(也是可见的结果);辅助写好提交消息,项目获得可读性更高的提交历史,效果直接可见,还能方便数据分析(比如可以呈现投入在新功能、bug 修复、重构等不同类型工作中的代码当量占比);辅助重构代码,可以直接估算 AI 替代人重复劳动的工作量。行胜于言,这三个场景正是我们打造 DevChat 过程中优先选择的重点。”任晶磊说道。
OpenAI 杀死了开发者?
新技术的出现往往会对传统的工作方式和职业产生冲击,大模型技术也是如此。大模型在为开发者带来生产力提高等机遇的同时,也引发了大家对其“是否会取代开发者”的担忧,甚至有一种更加极端的声音认为“OpenAI 杀死了开发者”。
表面上看,OpenAI 确实具备加速杀死大大小小 AI 开发者的能力:从企业层面来看,OpenAI 的每次重磅发布、开发者大会都会颠覆原有的市场竞争格局,有开发者感叹“OpenAI 每发布一个功能,就消灭了一家初创公司”“OpenAI 杀死了 YC 2023 年整个 batch 的项目”;从个人层面来看,自 ChatGPT 发布以来,关于 AI 取代开发者的讨论甚嚣尘上,更有声音认为“程序员这个工作或许在三五年内不复存在,甚至编程这个学科都会被终结”。
不少专家在接受采访时表示,“AI 取代开发者”这个观点过于偏激。吴韶华认为,AI 在编程领域的能力还没有达到完全取代开发者的水平,虽然 AI 编程助手可以提高程序员的效率,让程序员的产出更高质更大量,但目前主要还是体现在效率方面。“软件开发行业是拼效率的行业,同样的产品,谁更高效更快速的推向市场,谁就能赢得市场的先机,而没有大模型外挂加持的开发者和有大模型加持的开发者,其效率的差距会越来越大。因此,对于软件开发行业来说,现在就应该毫不犹豫地引入大模型技术,以提高开发效率。同时也要考虑将大模型引入到目前的软件中,给用户带来更高效流畅的体验。”
胡光龙对此也有相同的观点,当前,基于大模型的智能编程工具在实际业务中的应用,并没有像外界所想象的那样彻底颠覆现有的软件开发流程,而是作为一种辅助工具,增强了开发者的能力。在软件开发流程中,开发者需要承担许多职责,包括需求沟通、评审、分析建模、架构与模块设计、测试等。实际上,编码只占整个开发流程的约 30%,即使 AI 生成的代码占比达到 20%,全链路的效率提升也只有 6% 左右,效果并不显著。
对于开发者来说,这些智能编程工具是一种新的工具,掌握和使用这些工具可以提升项目开发效率,这是这些工具的最大价值。在 AI 时代,开发者需要掌握这些新式编程工具,并利用它们提升自身技能,更好地支持企业项目并创造价值。因此,开发者需要积极拥抱这些新技术,不断学习和适应新的开发方式,以保持自身的竞争力和适应未来的发展。
从另一方面来看,大家对“OpenAI 杀死了开发者”的担忧实际上也在提醒我们:在 AIGC 时代,“开发者”角色正在被重新定义。AI 技术正在软件开发领域扮演越来越重要的角色,它通过自动化重复性任务和提供深入见解来改变软件开发流程,并赋予了开发者新的涵义。蔡超认为,在 AI 时代,开发者不再只是编写代码的人,而是需要具备利用 AI 工具来提高生产效率和创造力的能力。这个时代的开发者应该是一个能够与 AI 合作,利用 AI 的能力来解决更复杂问题的创新者。“所以说,OpenAI 并没有杀死开发者,而是在推动开发者向更高层次的角色转变。”
与其担心被 AI 取代,开发者真正的挑战是如何更好地与 AI 合作,积极探索与 AI 的协作方式。在 AI 大模型的驱动下,软件开发过程将变得更加自动化,因此在开发过程中,开发人员的角色也可能会发生变化。比如,测试人员将更加侧重于验证模型生成的代码是否满足需求和质量标准,研发人员还需要额外关注模型的持续学习和优化,以确保软件能够适应不断变化的需求。“总的来说,由大语言模型驱动的软件开发可能会使一些角色变得不那么重要,而另一些角色变得更加关键。特别是,编码工作可能会减少,而对于理解和指导模型的能力的需求可能会增加。”蔡超总结道。
未来,大模型将如何 改变软件研发工作流?
尽管当前各式大模型及 AI 编码工具百花齐放,但我们还需清晰地认知到,目前大模型还不能生成复杂项目级别的代码。不少受访专家提到,当前 GPT-4 依然是天花板,国内大模型仍在追赶中。预计 2024 年,基于大模型的编程能力的工具软件将逐渐落地,越来越多的开发者将开始使用大模型进行辅助编程。随着用户基数的增加,大模型的编程能力将进一步提升,最终达到易用好用的目标。
展望未来,下一代生产力工具应该是什么样子的?不少专家表示,下一代生产力工具不仅仅是一个知识库,更是一个具备强大推理能力和多模态理解能力的伙伴。它能够根据不同的外界输入进行推理,并提供精准的答案和建议。这种伙伴关系可以帮助我们更好地应对各种挑战,提高工作效率和创造力,并肩作战,取长补短。
“理想中的编程工具应该是用户只需描述需求,软件就能自动完成开发。这种工具需要具备自动完成需求分析、接口定义、编码开发、自动测试和发布部署等功能。然而,根据目前的 AIGC 技术原理,实现这一目标可能还有一定难度。未来,我们可以关注低代码 +AIGC、多模态和 Agent 等方向的发展。”胡光龙提到。
从短期和长期视角来看,康战辉认为短期内需要探索如何利用大模型来快速生成原型。例如,根据用户的需求和设计,快速生成出相应的模块框架图和原型。这需要开发者克服一些技术挑战,比如如何将设计转化为模型可理解的形式,如何保证生成的原型的质量和功能等。从长期来看,我们有望实现更为远大的目标。例如,给定一个原型图,模型能够自动构建出一个完整的原型,包括前端和后端的实现。这需要我们解决一些关键的技术问题,如如何将图形信息转化为代码,如何处理底层逻辑和复杂的模块组织等。
“总之,要让大模型在软件开发领域发挥更大的作用,我们需要不断提升其多模态的能力、推理能力和复杂模块组织能力。这将有助于提高开发者的效率和软件的质量,进一步推动软件开发行业的发展。”康战辉总结道。
审核编辑:刘清