【导读】从需求分析、设计编码到测试运维,AI已经逐步渗透到软件开发的各个环节,如何切实针对研发场景进行提效,是业内每个企业都在思考的问题。本文作者详细分析了AI在研发中的实际应用,并分享了JoyCoder与京东内部工具结合的实际案例,展示了AIGC在提升研发效能方面的巨大潜力。
本文出自 2024 全球软件研发技术大会中的演讲,同时收录于《新程序员 008》。《新程序员 008》聚焦于大模型对软件开发的全面支撑,囊括 Daniel Jackson 和 Daniel Povey 等研发专家的真知灼见与“AGI 技术 50 人”栏目的深度访谈内容,欢迎大家订阅年卡。
作者 | 刘兴东
责编 | 郑丽媛
出品丨新程序员编辑部
近年来大模型特别火热,诸多公司在这一领域投入了大量的研究精力,各种基于大模型的应用场景也应运而生,涵盖了健康、金融、教育等多个领域,当然也包括软件行业。在这场由生成式AI技术引领的软件行业革命中,京东也正在进行一场前所未有的AIGC革新之旅。
在这场技术驱动的变革中,京东自主研发的智能编程助手JoyCoder,成为了推动研发效率飞跃的关键力量。接下来,我将深入解析京东如何通过JoyCoder实现研发提效的具体实践,以及这一过程中所展现出的技术创新。
AIGC对软件行业的影响
自从AIGC成为热点以来,它对整个软件行业都产生了深远的影响。无论是软件的开发、测试、部署、维护还是使用方式,都在不同程度上发生了变化。例如在代码层面,AI技术已经能够生成软件代码,包括代码审查在内的许多环节都与AIGC密切相关。同时,在软件质量和安全性方面也因AIGC的出现,发生了相应改进。例如,自动化的单元测试以及软件漏洞分析技术能够帮助开发者提高效率,尽早发现并修复相关漏洞。
总体而言,AIGC在开发成本、效率和用户体验上都带来了显著提升,有助于促进行业发展——但同时,这个过程中也伴随着一系列的风险和挑战:
-
使用AIGC后,如何确保其生成的内容准确可靠,成为了我们必须面对的问题。这要求我们在技能上做出相应的迭代和提升,以更好地管理和使用AIGC的输出能力。与此同时,我们也需要提升工具的能力,以实现与内部工具的良好兼容。
-
若过度依赖AIGC生成的内容,可能会忽视对其准确性和创造性的审查。因此,我们要不断完善并补充自身技能,以确保在使用AIGC时能提升生产力,而不是因过度依赖而导致生产力下降。
如何借助AIGC进行研发场景提效
如上文所说,AIGC与我们最为相关的场景还是在研发领域中的应用。如图1所示,以DevOps为例,它涵盖了从需求开始直到产品上线和部署发布的全过程。那么,AIGC如何在DevOps工具中发挥生产力呢?这是整个行业都在思考和探索的问题。
图1 研发全流程AIGC提效
从需求分析开始,我们可以通过AIGC与大模型交互,使用自然语言生成需求文档,尝试让大模型理解文档内容,区分功能性需求、非功能性需求和安全性能需求。基于对需求的前期理解,大模型能够更准确地帮助用户定位需求,使需求文档更加清晰,从而在需求阶段和理解阶段做得更为细致。
到了系统开发阶段,这是一个从准备、开发到完成直至上线的迭代过程。基于对需求的理解,AIGC可生成相关代码文档和代码解释;在开发过程中,可利用AIGC生成代码片段,减少手动编写的工作量;此外,编写单元测试时常让研发人员感到头疼,这部分也可借助AIGC来完成,以节省大量时间和精力。在研发后期,AIGC还能帮助检测代码中的安全漏洞,快速定位和修复调试过程中的报错。哪怕是几年后的系统迭代更新,AIGC也能协助进行代码优化工作,例如从Vue 2升级到Vue 3,或者从Java转换到其他编程语言。
到了系统测试阶段,AIGC可以根据前期对需求和代码片段的理解,生成自动化单元测试、测试文档和测试用例,提高测试效率和准确性。在缺陷分析时,也能更快地找到并修复缺陷。
最后在系统上线后,我们还需要考虑如何在后期提供辅助。AI Office这一概念在行业里已提出多年,如何基于系统日志的产生来进行指标聚类,进而通过人工标注来快速识别指标是否异常,这也是AIGC可以发挥作用的地方。通过指标之间的关联性,比如发现502报错,不一定是前端网关问题,也可能是后端服务故障,AIGC可以帮助找到问题的具体根因。
若进一步聚焦到DevOps流程中的编程环节,AIGC也展现出了它强大的应用潜力。举例来说,在软件开发早期,我们常需编写大量重复的增删改查(CRUD)操作和工具类代码。面对这些重复性高的工作,如何提升效率并避免传统开发中的低效和错误,成为了亟待解决的问题。
在没有智能代码生成和代码标准的情况下,开发者可能因缺乏辅助工具而编写出错误代码,同时也不易了解公司内部的最佳实践或通用代码规范。这不仅造成了信息孤岛,也影响了新成员融入团队的速度和效率。
然而,AIGC的引入为这一困境带来了转机。利用自然语言生成技术,AIGC能够辅助生成相关的代码片段,从而加速开发过程。在代码重构、优化和合理性检查方面,AIGC同样能发挥重要作用。通过深度理解内部文档和代码库,AIGC能在开发者编写代码时,迅速定位并推荐公司内部或外部的相似通用能力,有效避免重复开发。
此外,AIGC还能根据代码库和上下文进行智能推理,为开发者提供代码辅助,使编写过程更加高效和合理。这一转变不仅有助于提升开发效率,也能推动从传统低效开发模式向基于AIGC的高效开发模式的转变——在这种思考下,京东推出了基于大模型的智能编码应用JoyCoder。
JoyCoder的产品架构与能力介绍
如图2所示,从京东JoyCoder的产品架构图来看,其底层服务主要分成两个部分:大模型和行云DevOps平台。
图2 JoyCoder的产品架构
在大模型层,主要包括JoyCoder Lite、JoyCoder Pro和JoyCoder-Base模型。其中JoyCoder Lite和JoyCoder Pro负责关于会话方面的大模型应用,JoyCoder Lite以7B的轻量级设计为用户提供快速高效的操作体验,JoyCoder Pro专注于提供更精准的服务。至于JoyCoder-Base,则是一个用于代码推理的模型。
尤为值得一提的是,JoyCoder支持配置接入其他模型,即不局限于自有模型,允许接入来自不同供应商的各种大模型,如百度文心、清华智谱以及GPT等。这种开放的态度不仅丰富了JoyCoder的应用场景,也使其能够为用户提供更加精准和多元化的服务。
引入更多模型后,如何有效管理这些模型成为了一个挑战。为此,我们创新性地为JoyCoder封装了一层模型网关:在模型对接层面直接与大模型进行交互,而无需关注上层应用,以此简化管理流程,同时确保用户信息的安全与合规。同时,模型网关还具备用户鉴权、涉黄涉暴信息拦截以及日志记录等功能,为未来的审计和内容规性检查提供了有力支持。最后如果有相关报警,也可以通过网关来进行处理。
在兼容性方面,JoyCoder同样表现出色,其插件已支持多系统平台(如Windows、Android、鸿蒙)以及多种编辑器和主流编程语言。此外,在代码智能生成、人机交互和DevOps平台上,我们也进行了详细的场景化划分。最终,通过管理后台的用户管理和数据统计,我们可得到用户活跃度、采纳率和调用次数,以此对大模型进行更有针对性的调整和优化,进一步提升其采纳率和优化效果。
基于以上的产品架构,JoyCoder在整套研发流程(从需求、设计、编码、测试到上线)中,几乎每个环节都能帮助开发者提高效能:
-
通过人机会话,能将需求描述更加标准化,帮助用户更好地整理和明确需求。
-
在设计阶段,能通过自然语言生成对应的代码模块。
-
在代码编辑区,可以用代码补全功能对编码过程进行辅助,减少重复劳动;代码注释功能能自动生成注释内容,减轻开发者负担;代码解释和代码评审能让研发人员快速理解代码,让新成员快速熟悉代码,提高工作效率。
-
在测试阶段,JoyCoder能快速生成单元测试和接口文档,减轻开发者写单测和文档的负担。它还能对问题代码提出修复建议,并将安全扫描和规约检测左移到编码阶段。
当然,对于AI编码应用来说,安全防控也是不可忽视的一环。在内容安全方面,JoyCoder能够识别并过滤敏感词和不良信息;在数据安全方面,它则通过大模型统一网关对上传的数据进行严格把关,防止身份信息、银行卡号等敏感信息的泄露;在安全审计方面,JoyCoder会生成安全日志记录,记录输入敏感信息的用户标识、用户IP、设备号和输入的敏感词,并提示管理员该用户的操作涉及数据安全。
基于以上AI能力,目前京东内部已有约12,000名研发人员在使用JoyCoder,占整体研发人员的70%。这些用户在代码续写、自然语言片段生成、单元测试和推理等方面的采纳率达到了30%以上。整体提效达到 20%以上,大大提升了研发效率和标准化程度。
JoyCoder与京东内部工具结合的最佳实践
然而,无论是产品架构还是能力建设,均仍属于理论层面——AI本身如同一座孤岛,要想真正发挥其作用,需要与工具进行结合并实践。
纵观整个开发过程,例如需求理解、编译、构建和部署等方面,实际上都需要AI能力的下沉。于是在京东内部,我们借助JoyCoder在DevOps过程中进行了全新的能力建设。
首先在需求理解这个环节,我们做了一些有效改进。以前,我们只是简单地拉取需求列表,但发现这种方法并不受欢迎,因为它未能给研发团队带来实际效果,需求列表过长导致研发人员往往不会仔细查看。为此,我们与研发团队进行了深度调研和访谈,以了解他们的具体需求。现在,我们借助AI将需求与代码分支关联起来,以便研发人员确定其开发工作是基于哪个具体需求而展开的。
其次在开发过程中,研发人员可能需要查看日志、部署自测环境、更新调试等,其中有一项重要能力是代码提交时的描述。通常情况下,人们在提交代码时可能会简单地写“bug fix”,但这种描述不仅没有实际意义,还会影响后续的代码审查和维护。通过大型语言模型的帮助,我们可以自动生成代码提交信息,不仅减轻了研发人员的负担,还能让内部信息更标准化。
一般情况下,AI主要帮助我们生成代码,但无法处理后续的事情,如一键部署和调试。例如去年,我们已将京东内部的构建速度提高到了平均2分钟以内。然而,在进行联调工作时,仍需要大量的调试时间。每次完成调试后,我们需要修改代码并提交至代码库,接着进行编译构建,然后再次发布。即使构建速度已经控制在2分钟之内,但发布过程仍需大约5分钟,并且这5分钟还会随着调试次数的增加而累积成更长的时间。
为了解决这个问题,我们开发了本地化插件的一键部署功能,提交代码后,AI工具会自动生成commit message,并直接构建为镜像。此外我们还增强了热部署能力,使得研发人员可直接将更改发布到需要调试的地方。这样一来,我们将每次调试所需的时间从5分钟缩短到了秒级,极大地提升了开发效率。
从以上这些优化和实践不难看出,JoyCoder的目标正如其名:希望能通过这些工具和平台,提高研发人员的幸福感和工作效率,更好地服务于他们,使其在开发过程中获得更多的满足感和快乐。
最后,对于生成式AI这个领域,还有很多值得探索的地方,包括基于需求的理解、对于AI与Office应用的整合,以及与内部工具的结合等方面,目前业界都仍在探索之中。等到这些难题被逐个攻破后,相信未来AI在软件开发中的应用和效率提升势必会达到一个新高。
大模型刷新一切,让我们有着诸多的迷茫,AI 这股热潮究竟会推着我们走向何方?面对时不时一夜变天,焦虑感油然而生,开发者怎么能够更快、更系统地拥抱大模型?《新程序员 007》以「大模型时代,开发者的成长指南」为核心,希望拨开层层迷雾,让开发者定下心地看到及拥抱未来。
读过本书的开发者这样感慨道:“让我惊喜的是,中国还有这种高质量、贴近开发者的杂志,我感到非常激动。最吸引我的是里面有很多人对 AI 的看法和经验和一些采访的内容,这些内容既真实又有价值。”
能学习到新知识、产生共鸣,解答久困于心的困惑,这是《新程序员》的核心价值。欢迎扫描下方二维码订阅纸书和电子书。