京东的AIGC革新之旅:通过JoyCoder实现研发提效 | 新程序员

news2024/11/13 10:14:27

【导读】从需求分析、设计编码到测试运维,AI已经逐步渗透到软件开发的各个环节,如何切实针对研发场景进行提效,是业内每个企业都在思考的问题。本文作者详细分析了AI在研发中的实际应用,并分享了JoyCoder与京东内部工具结合的实际案例,展示了AIGC在提升研发效能方面的巨大潜力。

本文出自 2024 全球软件研发技术大会中的演讲,同时收录于《新程序员 008》。《新程序员 008》聚焦于大模型对软件开发的全面支撑,囊括 Daniel Jackson 和 Daniel Povey 等研发专家的真知灼见与“AGI 技术 50 人”栏目的深度访谈内容,欢迎大家订阅年卡。

作者 | 刘兴东

责编 | 郑丽媛

出品丨新程序员编辑部

c6905158842b7be3528a8ba085671de8.png

近年来大模型特别火热,诸多公司在这一领域投入了大量的研究精力,各种基于大模型的应用场景也应运而生,涵盖了健康、金融、教育等多个领域,当然也包括软件行业。在这场由生成式AI技术引领的软件行业革命中,京东也正在进行一场前所未有的AIGC革新之旅。

在这场技术驱动的变革中,京东自主研发的智能编程助手JoyCoder,成为了推动研发效率飞跃的关键力量。接下来,我将深入解析京东如何通过JoyCoder实现研发提效的具体实践,以及这一过程中所展现出的技术创新。

317b7afcc13a0047faaef36a65291d73.png

AIGC对软件行业的影响

自从AIGC成为热点以来,它对整个软件行业都产生了深远的影响。无论是软件的开发、测试、部署、维护还是使用方式,都在不同程度上发生了变化。例如在代码层面,AI技术已经能够生成软件代码,包括代码审查在内的许多环节都与AIGC密切相关。同时,在软件质量和安全性方面也因AIGC的出现,发生了相应改进。例如,自动化的单元测试以及软件漏洞分析技术能够帮助开发者提高效率,尽早发现并修复相关漏洞。

总体而言,AIGC在开发成本、效率和用户体验上都带来了显著提升,有助于促进行业发展——但同时,这个过程中也伴随着一系列的风险和挑战:

  • 使用AIGC后,如何确保其生成的内容准确可靠,成为了我们必须面对的问题。这要求我们在技能上做出相应的迭代和提升,以更好地管理和使用AIGC的输出能力。与此同时,我们也需要提升工具的能力,以实现与内部工具的良好兼容。

  • 若过度依赖AIGC生成的内容,可能会忽视对其准确性和创造性的审查。因此,我们要不断完善并补充自身技能,以确保在使用AIGC时能提升生产力,而不是因过度依赖而导致生产力下降。

ce70982d0f08052c083d91c4da170e6f.png

如何借助AIGC进行研发场景提效

如上文所说,AIGC与我们最为相关的场景还是在研发领域中的应用。如图1所示,以DevOps为例,它涵盖了从需求开始直到产品上线和部署发布的全过程。那么,AIGC如何在DevOps工具中发挥生产力呢?这是整个行业都在思考和探索的问题。

ca156816806a074ab08236d70710e98d.png

图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。

afd988117dd6416a085772ddee12f020.png

JoyCoder的产品架构与能力介绍

如图2所示,从京东JoyCoder的产品架构图来看,其底层服务主要分成两个部分:大模型和行云DevOps平台。

e77f63b54961bfab7cf12539b7887923.png

图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%以上,大大提升了研发效率和标准化程度。

a5e7161cdba3cfec5e0e830d4e6b6b82.png

JoyCoder与京东内部工具结合的最佳实践

然而,无论是产品架构还是能力建设,均仍属于理论层面——AI本身如同一座孤岛,要想真正发挥其作用,需要与工具进行结合并实践。

纵观整个开发过程,例如需求理解、编译、构建和部署等方面,实际上都需要AI能力的下沉。于是在京东内部,我们借助JoyCoder在DevOps过程中进行了全新的能力建设。

首先在需求理解这个环节,我们做了一些有效改进。以前,我们只是简单地拉取需求列表,但发现这种方法并不受欢迎,因为它未能给研发团队带来实际效果,需求列表过长导致研发人员往往不会仔细查看。为此,我们与研发团队进行了深度调研和访谈,以了解他们的具体需求。现在,我们借助AI将需求与代码分支关联起来,以便研发人员确定其开发工作是基于哪个具体需求而展开的。

其次在开发过程中,研发人员可能需要查看日志、部署自测环境、更新调试等,其中有一项重要能力是代码提交时的描述。通常情况下,人们在提交代码时可能会简单地写“bug fix”,但这种描述不仅没有实际意义,还会影响后续的代码审查和维护。通过大型语言模型的帮助,我们可以自动生成代码提交信息,不仅减轻了研发人员的负担,还能让内部信息更标准化。

一般情况下,AI主要帮助我们生成代码,但无法处理后续的事情,如一键部署和调试。例如去年,我们已将京东内部的构建速度提高到了平均2分钟以内。然而,在进行联调工作时,仍需要大量的调试时间。每次完成调试后,我们需要修改代码并提交至代码库,接着进行编译构建,然后再次发布。即使构建速度已经控制在2分钟之内,但发布过程仍需大约5分钟,并且这5分钟还会随着调试次数的增加而累积成更长的时间。

为了解决这个问题,我们开发了本地化插件的一键部署功能,提交代码后,AI工具会自动生成commit message,并直接构建为镜像。此外我们还增强了热部署能力,使得研发人员可直接将更改发布到需要调试的地方。这样一来,我们将每次调试所需的时间从5分钟缩短到了秒级,极大地提升了开发效率。

从以上这些优化和实践不难看出,JoyCoder的目标正如其名:希望能通过这些工具和平台,提高研发人员的幸福感和工作效率,更好地服务于他们,使其在开发过程中获得更多的满足感和快乐。

最后,对于生成式AI这个领域,还有很多值得探索的地方,包括基于需求的理解、对于AI与Office应用的整合,以及与内部工具的结合等方面,目前业界都仍在探索之中。等到这些难题被逐个攻破后,相信未来AI在软件开发中的应用和效率提升势必会达到一个新高。

0b8e88b98eafd136e607dfdb5e71fe94.gif

大模型刷新一切,让我们有着诸多的迷茫,AI 这股热潮究竟会推着我们走向何方?面对时不时一夜变天,焦虑感油然而生,开发者怎么能够更快、更系统地拥抱大模型?《新程序员 007》以「大模型时代,开发者的成长指南」为核心,希望拨开层层迷雾,让开发者定下心地看到及拥抱未来。

读过本书的开发者这样感慨道:“让我惊喜的是,中国还有这种高质量、贴近开发者的杂志,我感到非常激动。最吸引我的是里面有很多人对 AI 的看法和经验和一些采访的内容,这些内容既真实又有价值。”

能学习到新知识、产生共鸣,解答久困于心的困惑,这是《新程序员》的核心价值。欢迎扫描下方二维码订阅纸书和电子书。

40f2de21a9de2ad1c91417a0a9f9311d.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款可以替代Notepad++的免费高级文本编辑器

Kate 文本编辑器是一款跨平台的免费高级文本编辑器,具有丰富的功能和特性。它支持标签页、代码高亮、多文件查找、垂直/水平视图、侧边栏、颜色主题等特性,类似于Notepad。它以其多功能性和易用性广受好评。Kate 支持多文档界面(MDI&#xff…

加密技术.

基本保密通信模型 密码学发展 古典密码学 主要特点:数据的安全基于算法的保密 经典的加密⽅法包括凯撒密码(Caesar Cipher)(替代密码)、维吉尼亚密码(Vigenre Cipher) 主要分类 替代密码&…

OCR技术视角:智能文档管理中的票据自动化识别与处理

在数字化转型的浪潮中,企业对于高效、自动化的文档管理需求日益增长。票据作为企业运营中不可或缺的部分,其识别与管理的智能化成为了提升工作效率的关键。本文将深入探讨智能文档系统中票据识别功能的原理、技术优势以及在不同行业中的应用实践&#xf…

【报错已解决】`Solving environment: failed`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言:一、问题描述:1.1 报错示例:1.2 报错分析:1.3 解决思路&#xff…

智能指针,QT,C++语言的关键字总结

八、C中关键字总结 1> C中一共有63个关键字,如上图所示,其中标红的为c语言中的关键字,有32个 2> 数据类型相关的关键字 bool、true、false:对于bool类型数据的相关处理,值为true和false char、wchar_t:char是…

《Exemplar Free Class Agnostic Counting》CVPR2022

概述 摘要: 这篇论文提出了一种新颖的“无范例类别无关计数”(Exemplar Free Class Agnostic Counting)方法,旨在测试时对新类别的对象进行计数,而无需访问该类别的标记训练数据。以往的类别无关计数方法无法在完全自…

【刷题笔记】打家劫舍问题

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 题目一 题目链接:打家劫舍I 思路 小偷每到一初,都可以选择对这个位置偷还是不偷,所以,这次我们需要定义两个表 小Tips:针对这种情况,一般…

OpenGL/GLUT实践:水面模拟——从单振源到 Gerstner Wave(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果1 简单水面模拟——单振源1.1 水面高度函数1.2 水面建模1.3 openGL 渲染(1) renderSense(2) 其他 1.4 实现效果 2 添加鼠标控制3 添加纹理4 多个振源组合5 Gerstner Wave 模型5.1 原理5.2 具体实现5.2.1 全局变量…

pytest 常用的辅助函数和工具函数

pytest 常用的辅助函数和工具函数示例 # File: my_module.pydef fetch_data():return process datadef process_data():data fetch_data()return data.upper() import logging import sys import pytest#01-------------------------------pytest.fixture,sample_data 在测试…

Android 下的 XML 文件(概念理解、存储位置理解)

一、XML 1、XML 概述 XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言 类似于 HTML,但旨在传输和存储数据,而不是显示数据,且基本语法都是标签 2、XML 的特点 &am…

【2024数模国赛赛题思路公开】国赛B题思路丨附可运行代码丨无偿自提

2024年国赛B题解题思路 问题 1: 抽样检测方案设计 【题目分析】 分析: 目标是设计一个高效的抽样检测方案,在尽量少的样本数量下,确保在高信度水平下做出正确的接受或拒收决策。需要处理两个不同的信度要求,这对样本量的计算提…

解决matplotlib中文乱码最简单方案

解决matplotlib中文乱码问题方案众多,我认为如下方案是最简单的一个。 1、从电脑中搜索simhei字体,如下示意图是mac检索结果,或者直接搜索simhei.ttf下载字体 拷贝到指定路径:/path/to/mex/simhei.ttf 2、matplotlib 加载字体 …

【Git】本地仓库操作

Part1 基础概念 git作用:管理代码版本,记录,切换,合并代码 git仓库:记录文件状态内容和历史记录的地方(.git文件夹) git的三个区域:1)工作区:实际开发时的文…

针对STM32串口输出乱码错误问题

STM32在通过printf打印到串口时出现的文字乱码问题 使用printf文件中main.c文件,检查文件的编码方式是否正确,如下图所示,选择Chinese GD2编码方式:Edit--》Configuration 检查串口输出还是乱码错误 可以检测所建文件夹中main.c…

大道至简,大厂官网基本都走简洁化设计路线。

「大道至简」是一种设计理念,强调设计应该追求简洁、直观、易用,而不是过多的修饰和繁琐的细节。 对于大厂的官网来说,简洁化设计路线的选择可能有以下几个原因: 1. 更好的用户体验: 简洁的设计可以让用户更容易地理…

【Python报错已解决】`EOFError: Ran out of input`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言:一、问题描述:1.1 报错示例:1.2 报错分析:1.3 解决思路&#xff…

LM Studio 本地部署大模型Qwen

本人运行环境win11 、11th Gen Intel Core™ i7-11800H 2.30GHZ、NVIDIA GeForce RTX 3060 Laptop GPU LMStudio 运行环境要求 What are the minimum hardware / software requirements? Apple Silicon Mac (M1/M2/M3) with macOS 13.6 or newerWindows / Linux PC with a…

【区块链 + 人才服务】链节区块链教学管理平台 | FISCO BCOS应用案例

当前,政策支持和行业需求为“区块链 教育”的发展提供了机遇。政策方面,教育部于 2020 年发布了《高等学 校区块链技术创新行动计划》,提出到 2025 年,在高校布局建设一批区块链技术创新基地,培养汇聚一批区块 链技术…

打卡第五十七天:prim与kruskal算法

题目 一、prim 本题是最小生成树的模板题。最小生成树 可以使用 prim算法 也可以使用 kruskal算法计算出来。 最小生成树是所有节点的最小连通子图, 即:以最小的成本(边的权值)将图中所有节点链接到一起。 图中有n个节点&…

从零到精通:用C++ STL string优化代码

目录 1:为什么要学习string类 2:标准库中的string类 2.1:string类(了解) 2.2:总结 3:string类的常用接口 3.1:string类对象的常见构造 3.1.1:代码1 3.1.2:代码2 3.2:string类对象的遍历操作 3.2.1:代码1(begin end) 3.2.2:代码2(rbegin rend) 3.3:string类对象的…