【导读】在当今软件开发和科学研究领域,项目的复杂性日益增加,提升研发效率已成为行业迫切需求。本文深入探讨了大模型技术在研发效率提升方面的应用与实践,以实战摸索的方式,真实揭示了大模型究竟能够如何助力企业实现数智化转型。
本文精选自《新程序员 007:大模型时代的开发者》,《新程序员 007》聚焦开发者成长,其间既有图灵奖得主 Joseph Sifakis、前 OpenAI 科学家 Joel Lehman 等高瞻远瞩,又有对于开发者们至关重要的成长路径、工程实践及趟坑经验等,欢迎大家点击订阅年卡。
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAuia33Y6V4QuwibvFt5trOqJuP6ib9wdXAqibeDtR1iapGFWMDBlaiapMnaJtwNX2j7wsKOyRWbxI7h3gF5g/640?wx_fmt=png&from=appmsg)
随着软件开发和科学研究的复杂性不断增加,人们对提高编程及研发效率的需求也越来越迫切。传统的编程工具和方法已经无法满足这一需求,因此人们开始探索新的技术手段来提升编程和研发效率。大模型作为一种新兴的人工智能技术,被广泛应用于辅助编程和研发效率提升领域。
例如,美国科技巨头谷歌利用大模型技术提升内部研发效率,通过在代码自增长工具中集成大模型,辅助完成部分重复性工作(如自动导入包、自动生成构造函数等),缩短了工程师的编码时间。同时它还开源了基于大模型的代码搜索引擎,可以自动匹配代码片段并提供相关文档,大幅提高了工程师的开发效率。微软研究院则开发了基于大模型的自动测试工具,它可以自动检测代码中的 Bug,并生成相应的测试用例。经过实测,该工具在发现错误率和测试覆盖率上都能超越人工编写的测试用例。目前它正在帮助微软各产品线提升测试质量。
中兴通讯以大模型为中心赋能企业数智化转型,坚持先自用再外溢。除自研大模型之外,我们还基于开源的大模型开发微调后在研发效能领域进行应用,并分析其优势和挑战。通过对相关研究和实践案例的综述,发现大模型在辅助编程和研发效率提升方面具有巨大潜力。在本文中,我将分享我们在研发类大模型的一些应用与实践,希望对开发者们有所裨益。
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAujX5kS5KQ6BaBUsy1RqR06QFVIXibMwPPd6fqj78HsRjJ5S4jPGWUnrbo52KPZ4jhib7y5e0bybRibQg/640?wx_fmt=png)
研发类 AI 场景分析
研发流程非常繁多,从项目立项到需求分析,再到产品设计、研发,再进行测试,进而投产和运维,贯穿了复杂的管理流程。
基于大模型的需求管理
大模型能对用户提出的需求进行语义理解,识别其内在结构与逻辑关系,自动将需求拆分成独立的子需求。比如从一个用户定义的需求,自动提取出多个具体的产品需求点。
(1)对需求进行自动介绍,指出需求背景、用户痛点以及实现该需求能为用户带来的价值。
(2)将用户用简单语言说明的需求,转化为标准的产品需求格式,详细描述功能点和约束条件。
(3)根据需求类型和项目阶段自动生成验收标准与测试用例。
具体包括:
(1)用户能通过日常话语式描述搜索到相关工作任务。例如搜索“如何实现单点登录”。
(2)用户通过在线对话的方式与系统交互,利用自然对话流程定义需求内容。
此外,大模型还可以为需求管理提供以下能力:
(1)识别需求之间的依赖关系,绘制需求关系图。
(2)利用主观概率算法为每个需求点评估重要程度与难易程度。
(3)通过对历史需求数据进行学习,提出可行性评估与风险识别。
分析设计
(1)根据需求内容自动提炼重点,生成不同层级的内容提纲供浏览。
(2)根据产品类型和功能,绘制系列设计原型图或流程图,标识主流程和交互点。
(3)通过创意思维自动编写故事情景,展现产品如何解决用户痛点。
(4)对文档内容进行翻译、注释或解释,协助设计人员更好地理解需求细节。
(1)将图片、表格等非文本内容引用至正文,生成文档框架。
(2)在设计文档中自动标注待完善部分,给出改进建议或待定事项。
(3)检测文档风格与格式是否统一,给出转换建议供修改。
(4)将结构化设计文档自动生成到各类格式文档中,如 Word、PDF 等。
此外,分析设计阶段还可以利用大模型:
(1)检测设计方案创新性及可行性,给出评价建议。
(2)将历史优秀案例自动归纳提取,运用到当前设计中。
开发流水线
(1)根据历史任务资源使用状况,针对不同类型任务动态设置资源上下限。
(2)根据任务并发情况实时调度任务到不同规模的资源池,聚焦于提高整体利用率。
(1)通过对比历史错误日志,识别重要提示词进行分类,快速定位错误原因。
(2)调用相关开源工具分析异常快照,给出反向跟踪步骤以帮助修复。
(1)根据用户自然语言自动创建符合用户需求的流水线。
(2)根据代码库结构,结合部门代码库和流水线规范,自动生成流水线。
(3)通过 API 调用底层工具,完成流水线的执行。
此外,开发流水线优化还可以:
(1)在不同阶段进行分支管理与合并。
(2)监控流水线状态并发送实时提醒,追踪任务进度。
(3)支持流水线模板管理和多项目重复应用。
CCA
(1)针对代码漏洞、引入组件、开源合规、安全漏洞等问题提供一站式解决方案。
(2)当前代码存在哪些漏洞/问题,推荐如何治理,无需人工搜索。
即当某个组件要升级,AI 推荐建议升级版本和依赖版本,减少人工版本探索时间。
测试管理
(1)自动创建测试计划。根据接口文档自动创建基准场景和边界条件测试计划。
(2)实例化测试记录。测试通过后自动更新通过率及接口文档,实时反馈测试进度。
版本管理
实现版本发布无人化,包括文档自动生成,和版本发布审批决策智能化。
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAujX5kS5KQ6BaBUsy1RqR06QRNnF4oqkNO3sG9icI4NRlsXZaMRDzf6ohtF4jBaKRqKkqAds9uiaC32A/640?wx_fmt=png)
研发大模型应用平台整体架构和思路
基础模型选择思路
对于基础模型的选择,在参数上有以下一些考虑:
这是目前综合性能与部署成本的平衡点。像 10B 左右的微型模型,在保留很强生成能力的同时,参数量相对较小,易于部署和精调。
如果有一定预算,可以选择略大一些的模型,像 GPT-J 25B,具有更全面强大的语言理解和应用能力。若重视研发投入且需要应对更复杂任务,选择 50B 以下大模型也未尝不可。
超过 100B 的天然语言处理大模型,由于其部署和使用成本还不可控,当前尚不宜直接应用于产品。
总体而言,当前 10B - 50B 之间的模型规模是一个比较适宜的选择窗口。它可以满足大多数日常需求,同时考虑到成本和易用性的因素,超过这个范围就需要根据实际应用场景具体权衡。
其次,还需要考虑模型的开源程度。半开源模型信息不对称度高,我们优先选择完全开源的模型,可以推进后续定制和社区研发。
综上所述,对基础模型选择的标准如下:
具备编程领域能力,在编程类模型评估中各类语言得分越高越好(HumanEval/Babelcode 指标)。
考虑模型参数量,参数量过大,会导致精调和部署成本的提升。
在编码能力基础上,最好具备一定中文能力,当然其选择的优先级低于编码能力。
当前主流的基础模型如表 1 所示,最终我们选择 Code LLaMA 作为基础模型。
表 1 主流模型对比
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAugmFoeic4N9GLJMVLN0WCtAjKJGJuOFPxyYVDicy8HwXciaFltsQYqoES6p9eboicq51hRgiafiaIzf6Jcg/640?wx_fmt=png&from=appmsg)
增强预训练
模型选好后,接下来就是对模型进行增强预训练。增强预训练的框架要解决两个问题:资源和速度。我们采用以下优化方式:
对于模型训练,我们可以采用 3D 并行训练的方式来实现。将模型参数和梯度张量划分为多个分区,分配到不同 GPU 卡上进行计算。每张卡负责自己分区的梯度和参数更新工作,间隔时同步到其他卡上。这样可以很好地利用更多计算资源,降低单卡资源需求。
同时,我们还可以采用 Distributed Data Parallel 的方式,将训练数据并行读取和样本处理工作分发到各节点,充分利用多卡资源进一步提升训练速度。对于节省 GPU 资源,我们使用 ZeRO 技术。这个技术通过对静态和动态参数/张量进行精细地分区存储,有效减少显存占用。同时它支持异步参数更新,计算和参数传输可以重叠进行,有效缩短迭代周期。