0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

风靡万千软件开发者:揭秘华为研发代码大模型是如何实现的?

华为DevCloud 来源:未知 2023-12-15 15:50 次阅读

作者 | 陈泰红

秉持“自己的降落伞,自己先跳”的原则,由公司装备部门牵头,携手华为云PaaS作为基础能力提供方,与公司各产品线共同研发面向产业的代码大模型。在研发过程中,我们已取得初步成果,为了巩固各产品线的代码生成探索经验,我们将产品线研发成果迅速投入业务应用。在此基础上,我们总结了前期的方法和经验,期待更多产业的加入与交流,共同推动产业代码大模型的演进与推广落地。

本文深入探讨了当前研发大模型在实际产品中代码生成能力所面临的挑战,阐述了探索的总体思路、数据标准与语料层次、演进策略以及模型训练方案设计。同时,还介绍了RAG方案设计以及某产品线Dopra在真实场景中的应用,并总结了一套可快速复制的方法论。最后,对未来发展趋势进行了讨论:研发大模型是否有可能取代程序员

一、产业研发大模型面临的挑战

华为拥有超过10万名代码开发者,每天新增代码行数达千万级别。在这种情况下,提高开发过程的效率变得至关重要。研发过程涵盖了需求理解、系统分析与设计、软件开发(包括手工编写代码、测试用例、代码检视)、系统集成与验证以及研发维护等环节。在整个研发过程中,编写代码的部分大约占据20%的比重。在人工智能大模型的时代,为了提升研发效率,利用大模型辅助生成代码的需求已经迫在眉睫。

在与产品线领域代码专家进行交流时,我们发现,由于产业数据未纳入训练过程,开源代码大模型在研发阶段基本上无法发挥作用。在产业领域,我们面临以下挑战:

首先,信息通信技术ICT)专业领域知识繁杂且多变,开源模型未系统学习过程领域知识和系统设计等方面,因此难以处理复杂任务。

其次,华为代码仓库中存在数十万自定义的数据类型、函数API和变量引用,这些代码的语义复杂性较高。由于公司部分产业导向代码自注释,结构类型和成员、函数、变量缺少足够的人工注释。

此外,代码具有单一性,不同产品之间的代码关联性较小,导致代码语料数据泛化性不足。同时,文本与代码关联的语料数据在质量和数量方面都存在不足。华为嵌入式系统主要基于C/C++开发,C/C++代码具有固有特征,如头文件机制使类型和函数逻辑实现分离,状态空间更为庞大。

最后,代码依赖链路较长,涉及Void *、指针、结构体、宏定义、头文件等多种元素。项目级的跨文件和多层嵌套导致上下文依赖链路较长,从而降低了代码生成的准确性。

根据实地考察的业务需求以及公司研发战略目标,我们将重点关注具有业务价值的场景。目前,研发大模型项目组正致力于攻克代码辅助生成(C/C++/Java/Python)的难题,以构建软件领域的代码大模型,从而推动软件开发领域的新范式。

二、研发大模型构建探索总体思路

为了提高研发迭代的反馈效率,华为云PaaS大模型团队制定了5项数据标注与清洗规范、以及5个脚本工程项目。

wKgZomV8Bl2AZNSTAAMpL8nsZfM172.png

图1 研发大模型探索的总体思路

在整个流程中,从原始训练语料的准备与清洗、SFT语料的提取,到训练、评估和部署的全自动化操作,华为云PaaS团队已经制定了5个数据标注和清洗规范。在训练流水线过程中,涉及到的5个脚本工具(包括清洗工具、SFT提取工具、训练脚本工程、部署脚本工程和IDE插件)也已经得到了产品线业务专家的认可和落实。这些措施显著提高了大模型研发的效率。

三、那些数据应该参与研发大模型的训练?

数据是大模型研发的基石,其质量直接影响到模型的最高性能。若大模型未经过专业领域数据的训练,就如同“文科生学理科”。针对产业特有的数据特征和挑战,我们首先对产业数据的训练配方表进行了梳理。明确了训练语料的范围、目标、场景、数据标准、处理规则、处理工具、试点产业以及质量评价等相关信息。

wKgZomV8Bl6AU7bTAAHZ4zYFam8503.png

图2 研发大模型语料层次表

L0 开源阶段

对 GitHub、Stack Overflow 等高质量数据进行清洗。

L1 RawCode 阶段

清洗华为语料库中的 30 亿 tokens,涉及公司 10 余个产品线,以增强华为业务代码的基础能力。

L2 领域数据-SFT 阶段

包括代码地图、项目级的跨文件信息以及工程规范。通过 SFT 指令微调,利用跨文件上下文信息和领域专业知识,解决生成代码中的幻觉问题。

RAG阶段

RAG(Retrieval Augmented Generation)阶段,在 IDE 项目文件中检索跨文件信息;在向量数据库中检索 API 接口说明、工程规范信息。根据 prompt 模板,将用户的需求描述与上述检索信息拼接成完整的 prompt,输入给大模型。

由于 L1/L2 模型训练需要一定周期,业务实践中项目组先使用 RAG 语料验证效果,逐步探索 L2 SFT/L1 Raw Code 匹配任务,以提升模型的理解能力和研发效率。

单一的 Prompt 工程/RAG 在一定程度上可以让模型接触到专业领域知识,增强专业表达。然而,更为关键的是让专业领域知识参与到模型训练过程中。

四、研发大模型整体演进策略与方案设计

为了提高大模型研发的效率,我们将整个研发过程分为两个阶段进行迭代和优化:

数据准备阶段

首先,我们对各产品线的代码仓库进行评估,挑选出高质量的代码仓库。接着,根据华为云PaaS研发项目组制定的五项数据标注和清洗规范对代码进行清洗。在《训练&推理语料层次表》的基础上,构建代码地图,并通过人工抽查与脚本校验自动化执行。最后,对训练数据进行格式统一,生成训练集、客观评测集和主观评测集。

训练和评估阶段

在该阶段中,我们针对第一阶段所准备的训练数据,在ModelArts平台上启动训练任务。通过每隔x个epoch生成的检查点(checkpoint)来进行训练迭代。在此基础上,我们进行批量模型评估,并将模型部署在Alpha环境中,以便用户进行评估和使用。

在Alpha环境中,IDE插件的上下文提取和RAG检索两个过程被巧妙地隐藏起来。IDE需要在项目层面跨文件进行上下文分析,从而提取当前编辑区域用户关注的跨文件上下文信息,并在prompt工程中进行组装。同时,RAG会根据用户的输入和意图,检索业务知识向量库。在prompt工程中,上下文信息和业务知识将按照重要性进行排序,然后送入代码大模型进行推理。生成的代码经过后处理后,最终呈现在IDE用户界面上。

在研发过程中,数据准备以及模型的训练和评估并非一蹴而就,而是需要经过多次迭代和验证。训练和评估过程中出现的现象和问题可以为数据迭代过程提供反馈。两个阶段紧密衔接,共同推进以实现最终的优化目标。

wKgZomV8Bl6ABB6WAALJLUw4qv4271.png

图3 研发大模型整体演进策略与方案设计

五、RAG:研发大模型的最后“一公里”

模型训练在一定程度上缓解了领域知识匮乏的问题(例如,避免使用不存在的数据对象和API,从而减少编译错误和运行错误)。然而,由于模型更新迭代周期较长且领域范围广泛,在实际产业应用中,仍需结合领域相关的《xx使用手册》、《xx白皮书》和《xx使用指南》等资料,以进一步减轻代码生成中的幻觉问题,提高知识的可追溯性和解释性。

wKgZomV8Bl6ACZniAAFx-79tXN0867.png

图4 RAG整体框架图

RAG的设计方案和实现形式多样,我们的RAG方案主要关注自动化信息抽取和项目级上下文感知能力。

业务知识广泛分布于HTML、PDF、DOC、Word等多种形式,且范围广泛且接口不统一。为解决这一问题,项目组结合知识图谱和大模型技术,实现结构化、半结构化和非结构化信息的抽取,无需人工干预,即可生成低成本且高质量的知识。

自动化信息抽取同时解决了知识增量刷新机制的问题:通过工程化方法,克服了LLM知识更新的难题。将业务领域知识、华为编程框架、工程规范等模型所不具备的能力与模型相协同。在项目级上下文感知方面,基于项目静态结构、仓库演化历史以及开发者实时行为,精确检索与代码生成任务最相关的项目上下文。

以某产品线Dopra开发场景为例,我们整理了开发手册、线下文档、社区平台以及开发者经验等数据,汇总成Dopra开发的领域知识,并将这些知识向量化,存储到向量数据库中。当用户输入需求任务后,通过RAG能力,我们可以获取与该任务相关的开发经验信息。将这些信息通过“领域经验”提示模板输入给大模型,从而显著提高大模型输出代码的正确性。

wKgZomV8Bl6ASfDdAAIewUJcrL8670.png

图5 RAG方案中使用的Prompt版本示例

六、研发大模型:是否会取代程序员?

许多程序员都关心一个问题:研发大模型是否会最终取代程序员?经过调查,我们发现了一些有趣的观点。

1. 程序员的需求各异。在对产品线专家进行调研时,我们发现他们对业务非常熟悉,主要关注行级续写或代码块续写,目的是减少敲击键盘的时间。他们期望模型能顺应开发思路给出提示,辅助编码,而非完全替代开发。

2. AI编程具有很高的特殊性。

精确敏感性:一个字符的错误可能导致代码不可用,需要人工干预。 远程敏感性:全局变量、父类信息、项目级跨文件信息等大量远程(非IDE插件打开的当前文件信息)对语义影响很大。

库敏感性:调用API库的语句对函数的语义影响非常大。

3. AI目前的定位是助手,即开发人员的智能助手。AI助手并不会替代程序员的思考;它们擅长处理重复性高、机械性的任务,帮助程序员聚焦高价值点,提升专业方向的能力。然而,程序员仍需要掌握辅助驾驶的方向盘。

大模型的使用对程序员提出了更高的要求。简单重复的工作可以交给大模型,但更高维度的工作,如代码调试、通信链路联调、项目级别的功能实现等,可能需要经验丰富的架构师和资深程序员来把控。

总而言之,研发大模型将有效提升研发效率,使程序员能够更加专注于深入思考,从而减少重复性和高频率的工作负担。

文章来自 PaaS技术创新Lab,PaaS技术创新Lab隶属于华为云,致力于综合利用软件分析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!

详情欢迎联系:

mayuchi1@huawei.com;bianpan@huawei.com


原文标题:风靡万千软件开发者:揭秘华为研发代码大模型是如何实现的?

文章出处:【微信公众号:华为DevCloud】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 华为
    +关注

    关注

    216

    文章

    34476

    浏览量

    252067

原文标题:风靡万千软件开发者:揭秘华为研发代码大模型是如何实现的?

文章出处:【微信号:华为DevCloud,微信公众号:华为DevCloud】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    《HarmonyOS第一课》焕新升级,赋能开发者快速掌握鸿蒙应用开发

    《HarmonyOS第一课》焕新升级,赋能开发者快速掌握鸿蒙应用开发 随着HarmonyOS NEXT发布,鸿蒙生态日益壮大,广大开发者对于系统化学习平台和课程的需求愈发强烈。近日,华为
    发表于 01-02 14:24

    我国软件开发者数量突破940万

    2024开放原子开发者大会20到21日在武汉举办。工业和信息化部负责人透露,我国软件开发者数量突破940万。 开源就是开放软件的源代码,在遵守许可协议的前提下,任何人都可以使用、修改甚
    的头像 发表于 12-24 13:52 140次阅读

    我国软件开发者数量超过940万

    在近日举办的开放原子开发者大会上,工业和信息化部负责人传来了一则令人振奋的消息:我国软件开发者数量已经突破940万大关。这一数据不仅彰显了我国在软件开发领域的雄厚实力,也预示着我国在全球软件开
    的头像 发表于 12-23 11:08 230次阅读

    华为软件开发生产线(CodeArts)11 月新功能特性

    华为软件开发生产线 CodeArts 是一站式、全流程、安全可信的云原生 DevSecOps 平台,覆盖需求、开发、测试、部署、运维等软件交付全生命周期环节,为
    的头像 发表于 12-18 09:23 271次阅读

    云端AI开发者工具怎么用

    云端AI开发者工具通常包括代码编辑器、模型训练平台、自动化测试工具、代码管理工具等。这些工具不仅降低了AI开发的门槛,还极大地提高了
    的头像 发表于 12-05 13:31 145次阅读

    华为软件开发生产线(CodeArts)10 月新功能特性

    、测试、部署、运维等软件交付全生命周期环节,为开发者打造全云化研发体验。 华为云 CodeArts 目前已上线 28 款研发工具,服务于 3
    的头像 发表于 12-01 16:16 420次阅读

    HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)事件推荐开发者测试

    意图框架向开发者提供真机测试能力,即开发者可连接设备进行调测。开发者完成代码开发之后,功能正式上架应用市场前,可以在HarmonyOS NE
    发表于 11-18 17:39

    华为软件开发生产线(CodeArts)9 月新功能特性

    【摘要】 华为软件开发生产线 CodeArts 是一站式、全流程、安全可信的云原生 DevSecOps 平台,覆盖需求、开发、测试、部署、运维等软件交付全生命周期环节,为
    的头像 发表于 11-07 18:15 262次阅读

    鸿蒙元服务,软件开发者驶向蓝海的一叶飞舟

    鸿蒙元服务作舟,AI分发为帆:软件开发者驶向流量蓝海
    的头像 发表于 06-26 09:39 1551次阅读
    鸿蒙元服务,<b class='flag-5'>软件开发者</b>驶向蓝海的一叶飞舟

    中软国际亮相华为开发者大会2024

    2024年6月23日,华为开发者大会(HDC2024)圆满落幕。本次盛会上,中软国际作为大会最高级(钻石级)赞助合作伙伴,受邀参加联合发布、高峰论坛、专题演讲、星光直播间、展区展示等多个环节,并自主举办分论坛,和万千专家、
    的头像 发表于 06-25 09:28 765次阅读

    华为开发者桌面全新发布 CodeArts IDE for Python,极致优雅云原生开发体验

    Python 编码体验。 Python 是一种编程语言,广泛用于 Web 应用程序、软件开发、数据科学和机器学习 (ML)。Python 以其优雅的语法、动态解释性、丰富的标准库、极高的开发效率深受全球开发者
    的头像 发表于 05-10 00:27 1250次阅读
    <b class='flag-5'>华为</b>云<b class='flag-5'>开发者</b>桌面全新发布 CodeArts IDE for Python,极致优雅云原生<b class='flag-5'>开发</b>体验

    华为云 CodeArts Snap,揭开智能研发新篇章

    AIGC 浪潮席卷全球,大模型技术应用到软件开发领域,正在颠覆传统的软件工程。华为云 CodeArts Snap 是一款基于大模型技术打造的
    的头像 发表于 04-07 17:11 932次阅读

    鸿蒙开发者预览版如何?

    在24年的华为鸿蒙发布会中表示。预览版已经向开发者开放申请,首批支持的机型有三款分别为华为 Mate 60、华为Mate 60 Pro、华为
    发表于 02-17 21:54

    华为宣布HarmonyOS NEXT鸿蒙星河版开发者预览面向开发者开放申请

    华为宣布HarmonyOS NEXT鸿蒙星河版开发者预览面向开发者开放申请,这意味着鸿蒙生态进入第二阶段,将加速千行百业的应用鸿蒙化。
    的头像 发表于 01-29 16:42 1439次阅读
    <b class='flag-5'>华为</b>宣布HarmonyOS NEXT鸿蒙星河版<b class='flag-5'>开发者</b>预览面向<b class='flag-5'>开发者</b>开放申请

    苹果新App Store支付政策惹怒软件开发者

    近日,苹果公司的一项新政策引发了软件开发者们的不满和抗议。根据这项新政策,如果开发者在App Store上使用其他支付方式,就必须向苹果公司支付高达27%的佣金。这一举措被视为苹果在回避此前法院裁决的意图。
    的头像 发表于 01-19 16:13 779次阅读