阿里云通义实验室自然语言处理方向负责人黄非:通义灵码2.0,迈入 Agentic AI

通义灵码是基于阿里巴巴通义大模型研发的AI 智能编码助手,在通义灵码 1.0 时代,我们针对代码的生成、补全和问答,通过高效果、低时延,研发出了国内最受欢迎的编码助手。

在通义灵码 2.0 发布会上,阿里云通义实验室自然语言处理方向负责人黄非分享了代码大模型的演进。过去一年来,随着大模型技术的发展,特别是智能体技术的深入应用,通义灵码也在智能体的基础上研发了针对于整个软件研发流程的不同任务的智能体,这里既包括单智能体,也包括多智能体合并框架,在这样的基础上我们研发了通义灵码2.0。

我们首先回顾软件工程的发展历史。1960年代中期,软件开发进入危机时代,因为那个时候软件开发并没有固定的方法可循,整个的软件设计是在开发人员头脑中完成了一个隐藏的过程,而且软件维护的成本居高不下,产品质量也比较低。

1968年以来通过 NATO 会议,正式提出了软件工程这样一个术语,人们提出了结构化的开发方法,也包括瀑布式的软件生命周期流程,软件测试和验证成为软件开发的重要环节。

1983年 C++ 正式发布以来,推动了面向对象的程序设计方法,面向对象程序设计方法意味着对象的编程、软件开发的工具都得到了改进,包括软件开发的环境 IDE 和版本控制的工具也得到了广泛的使用。同时也有一些 ISO9000、SPICE 等质量标准体系的形成,确保软件工程的开发满足标准化的流程。

在90 年代末,进入互联网时代,由于软件的快速发展催生了敏捷开发的革命,需要更紧密的团队协作,需要不同团队之间有效地应对不同需求的变化,需要软件的持续构建、持续集成、持续迭代和持续交付。

到2023 年以来,随着 GPT-4 的推出,大模型对于整个开发带来革命性地变化。比如说基于大模型的智能辅助开发系统逐渐成为主流,大模型驱动的软件智能开发助手已应用到软件开发流程的各个环节中来,也推动了软件工程以更为智能高效的方式去推动、去发展。

如果仔细来看一下智能软件工程的详细流程,我们会看到在2020 年生成式大模型发布之前,其实已经有了一些针对于软件开发的小模型的工作,包括 CodeBERT、GraphCodeBERT,这些是以 BERT 为框架,但还只主要针对于代码理解这样的任务。

到了2021 年,以 CodeX 为代表的生成式大模型为特色,针对于代码的生成,代码的补全,已经开始得到了应用。在此基础上的话,一个非常重要的衡量代码生成的榜单,HumanEval 也被提了出来。

到了2023 年我们看到包括 ChatGPT、GPT-4,包括 Qwen 这样的通用模型,以及在此基础上的 CodeQwen、CodeLlama 等代码专用模型更广泛地应用到了软件开发的过程中,包括代码的生成、补齐、注释的生成、单元测试的生成等等,都应用了这方面的能力。

我们也看到在2023 年底,SWE-bench 这样一个更真实的模拟软件开发流程的一个 benchmark 也被提了出来,在这个 benchmark 上提供的一些评估能力,也能更准确地评估大模型或者是 AI 编码助手在真实软件开发过程中的一个效果。

到了2024 年,我们可以看到更多的代码模型不断涌现出来,也更完整地融入到整个端到端的软件开发流程,从用户需求的理解,到软件的设计,到软件的开发、调试、生成、交付文档等等一系列流程,都能够用到智能大模型的技术。

总结来看的话,以大语言模型为基座带来了整个软件工程开发新的范式,从早期的智能助手的阶段,LLM+Copilot的结合,到中期的基于智能体,每个智能体成为一个单独的智能专家,能够自主地用工具完成一个特定的任务。

到第三个阶段即多智能体的阶段,以大模型为基础,能够更好地完成整个软件流程开发的不同任务,配合来完成更复杂的开发任务。

我们的通义灵码是在QwenCode2.0 的基础上建立的,Qwen2.5-Coder 是在 Qwen 的基础上研发而成,这里包括了适应多场景的全尺寸的代码大模型。

我们发布了包括7B、32B 等共六款 Qwen2.5-Coder 模型,这六款代码模型在同等尺寸下均取得了业界最佳的效果,包括代码生成、代码推理、代码修复等等核心场景,其中 32B 的旗舰代码模型在 10 余项基准评测中都取得了开源模型的最佳成果。同时,代码模型还在代码生成关键能力上对齐了闭源模型 GPT-4o。

具体来说,Qwen2.5-Coder是基于 Qwen2.5 的基础大模型进行初始化,使用了包括源代码、文本代码混合数据以及代码合成数据等总共 5.5T tokens 的数据进行持续地训练,实现了代码相关下游任务的显著提升,特别是针对非常有挑战性的真实世界的软件工程任务,我们提出了两阶段的文件级别预训练及仓库级别的预训练,增强了 Qwen-Coder 对于仓库上下文的依赖和理解。

此外,为了适配开发者的多语言需求,Qwen-Coder在接近百种编程语言上进行了预训练和对齐。在实际评测中,Qwen2.5-Coder 32B 的模型在 40 余种编程语言中表现优异,在 MC-EVAL 基准上取得了所有开闭源模型的最高分,并斩获了考察多种编程语言代码修复能力的 MD-EVAL 基准的开源冠军。

在通义灵码产品化落地阶段,我们看到有两个步骤,第一阶段的话就是 Copilot 的阶段。代码模型作为一个编码助手能够帮助程序员在编码过程中,针对特定任务完成特定的工作。

第二阶段的话就是 AI 程序员,更深入地融合到软件开发的整个流程中来,能够起到更大的作用。

我们以Test Agent 测试智能体为例来解释一下,Test Agent 专注于单元测试的相关任务,用户只需要说出单测的需求,Test Agent 就会自动地帮助你完成单元测试生成的全部流程。

它具备多项能力,比如说用户需求的分析、计划的制定、完整分析被测函数中的代码依赖、使用工具与 code base 进行交互,比如说搜索的工具、编辑器工具等,结合编译器、执行器的环境反馈完成单元测试的生成和 bug 的修复。

通义灵码2.0 的 AI 程序员采用的是多智能体的框架,这个框架分为两个主要的部分,一个是环境的部分,一个是智能体的部分,环境的部分包括代码仓库、各种软件工程工具和 Reward Model 等等。

智能体的部分是系统的核心,这里由 5 个专门的 AI 智能体组成,包括规划智能体、搜索、生成、单测、调试智能体等等。这些智能体通过 Action 和环境进行交互执行各自的任务,同时它们也能够接受来自于环境的反馈进行不断地学习和改进。这种多智能体的架构使得通义灵码 AI 程序员能够处理复杂的软件开发任务,从方案设计到代码调试,全面覆盖了开发流程的各个环节。

此外,考虑到现实软件开发流程中的复杂性,现实软件开发流程也包括需求分析、系统设计、软件开发和软件测试,而且还涉及到开发者自己的思考以及开发者和外部工具的使用,以及不同职能的人之间的交流,这样一个流程也需要更复杂的一个软件开发大模型。

我们看现有的代码大模型,它是在预训练语言模型基础上增加了比如说Github 的静态代码和文档数据、网页代码问答数据等等,进行了持续地预训练,形成代码预训练模型,同时针对于代码生成的一些任务,比如说代码的指令生成数据、注释、单测等多任务指令、通用问答指令等等数据来进行有监督地微调,进一步地针对代码的相关任务偏好数据进行对齐,最后生成代码对齐模型。

这些代码对齐模型由于缺乏解决实际软件过程中需要的推理过程数据,所以难以应用到真实的端到端的软件工程的任务中来,比如说它缺乏解决问题所需要的一个过程数据,比如说针对用户需求的一个规划、反思,也缺乏和外部工具的交互的数据,比如说和编译器的交互和执行器的交互等等。

在此基础上,我们就提出了面向软件工程的数据合成的思路,来训练面向软件工程的代码模型,这个过程不仅能够学习问题和答案之间的映射,更关注学习如何解决问题的过程。

过程数据合成主要包括三个阶段,现实软件工程的理解、故障的定位,包括边界点的定位以及代码的生成这三个部分,每个部分通过React 的形式合成解决过程的数据来改进现有模型在实际软件开发中的应用。

具体来说,仓库理解阶段旨在分析和理解软件仓库的结构、文件和相关代码,形成相应的分析和规划,为后续步骤提供基础。而故障定位阶段,通过自主调动搜索工具、迭代细化搜索结果并定位引发Issue 的潜在代码位置,而基于这些故障的位置和数据合成链路,可以在补丁生成的阶段生成可以直接应用的代码补丁,交给用户审查和确认。

我们可以看到上述整个过程,在仓库环境下,通过React 的形式合成了解决过程的数据,这种方法能够改进现有模型在实际开发过程中的应用,使得 AI 系统不仅能够给出答案,还能够模拟软件工程师解决问题的思路。

基于这种软件工程的过程数据合成方法,我们训练了Lingma-SWEGPT 软件工程大模型,这个模型旨在解决需要复杂推理的软件工程任务。Lingma-SWEGPT 接收真实的 Github Issues 和 Reports 作为输入,通过仓库理解、故障定位和补丁生成这三个阶段,最终输出了提交的补丁。该模型采用迭代训练的方法,利用合成数据不断地优化,模型在每个阶段都用了 Chain-of-Thought 推理和观察行动循环,实现了从问题到解决方案的全流程智能化。

同时通过整合仓库的导航、精确的搜索这样的工具,以及使用的 Git 的相关命令和 Pylint 等代码质量检查工具,模型能够处理越来越复杂的软件工程问题,并且在每个阶段生成中间结果,也供进一步地分析和改进,最终模型生成的补丁由人工进行审查和确认,确保其正确性和实用性。

这种端到端的智能化的流程,使得Lingma-SWEGPT 在复杂软件工程任务中表现出色,能够模拟专业开发者解决问题的过程,为软件开发和维护提供强大的 AI 辅助能力。

我们举一个例子,比如说在单元测试的生成场景中,通义灵码Test Agent 会在识别到生成单元测试需求之后开始分析你的项目环境,逐一检查生成单元测试所必要的依赖项是否通过,在前置依赖项检查通过之后,Test Agent 会列出生成单测计划待用户确认,用户确认之后,Test Agent 会开始按照计划为每个测试函数开始生成单元测试的代码,并自动修复其中存在的错误,在生成和修复完成之后,Test Agent 会合并生成好的单元测试用例,将合并后的文件作为呈现给用户的最终结果。

基于用户的代码仓库对用户的问题进行分析之后,我们可以看到多文件生成也使用了类似的框架,首先,它需要定位需要修改的一个或多个文件代码或片段,再次,它会给出整体的修改说明,这样的目的是使得用户的交互更加友好。第三,生成每个文件的具体代码修改方案,主要是因为要缓解模型生成速度的慢的问题,不是生成全部的修改代码,而只是修改方案中仅包括被修改的部分。第四步是根据修改的方案能够快速生成完整的修改后的代码文件,这样的话工程根据修改前后的代码文件进行渲染,生成Diff 的可视化效果,给用户友好的交互体验。

我们下一步来展望一下未来的代码大模型的发展,首先根据SWE-bench 的这个结果我们来看,在过去一年多以来,这个结果的数据集的评分从 0.4 快速上升到 71.7,它的解决率的速度远远超过我们的想象,我们来看代码的数据其实储备非常丰富,从第一天开始就是数字化的数据,此外代码的流行的过程本身就是一个思维链的过程,它就是一个解决问题的方法、步骤和过程,这样的话我们的大模型的推理能力、思维链能力,在代码任务上能够得到很好地体现和应用。此外代码本身也有很好的环境交互,比如说编译器、执行器等等都可以用来判断代码的正确性。

所以综合来看的话,代码的智能开发很有可能是AGI 最先突破的方向,我们也在业界看到了在这个方向的广泛地应用和落地,以及大量的产品,如果我们看 Gartner 对于不同技术的发展趋势来看,我们可以看到,基于 AI 的智能代码目前正处在发展的顶峰阶段,我们可以预见现在和今后未来很近的时间内,基于 AI 的代码辅助和智能软件工程的模型和产品会得到巨大的爆发和发展,我们也要积极拥抱人机共生的软件工程的新的范式。

最后我们来总结,以智能体为核心的AI Agent 将成为用户和编程过程之间的智能中介,它不仅能够通过观察,学习到大模型处理和执行操作来完成更为复杂的编程任务,更重要的是,这个系统能够持续学习和进化,通过数据飞轮不断地改进自身的能力。

未来我们期待看到更加智能的、自主的编程助手,它不仅能够被动地解决现有的编程需求,还能够持续学习、主动发现并解决可能存在的问题,极大地提升编程的效率和代码质量。更进一步,以自然语言为交互,它可以让更多不具备代码开发能力的泛编程人员通过自然语言和多框架的编程模式,能够灵活地开发更多的、更个性化的代码或者是Task 引擎,在广泛的场景中得到应用。

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

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

相关文章

Open3D 最小二乘拟合平面(直接求解法)【2025最新版】

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 博客长期更新,本文最近更新时间为:2025年1月18日。 一、算法原理 平面方程的一般表达式为:

超标量处理器设计2-cache

1. cache 介绍 影响Cache缺失的情况有3种: Compulsory: 第一次被访问的指令或者数据肯定不会在cache中,需要通过预取来减少这种缺失Capcity: Cache容量越大,缺失就可以更少, 程序频繁使用的三个数据来源于3个set, 但是&#xff…

当PHP遇上区块链:一场奇妙的技术之旅

PHP 与区块链的邂逅 在技术的广袤宇宙中,区块链技术如同一颗耀眼的新星,以其去中心化、不可篡改、透明等特性,掀起了一场席卷全球的变革浪潮。众多开发者怀揣着对新技术的热忱与探索精神,纷纷投身于区块链开发的领域,试…

vscode的安装与使用

下载 地址:https://code.visualstudio.com/ 安装 修改安装路径(不要有中文) 点击下一步,创建桌面快捷方式,等待安装 安装中文插件 可以根据自己的需要安装python和Jupyter插件

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块(上) 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…

彩色图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中,经常需要获取感兴趣区域的面积属性,下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…

分布式理解

分布式 如何理解分布式 狭义的分布是指,指多台PC在地理位置上分布在不同的地方。 分布式系统 分布式系**统:**多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任…

Red Hat8:搭建FTP服务器

目录 一、匿名FTP访问 1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 5、安装VSFTPD 6、 打开配置文件 7、设置配置文件如下几个参数 8、重启vsftpd服务 9、进入图形化界面配置网络 10、查看IP地址 11、安装ftp服务 12、遇到拒绝连接 13、测试 二、本地…

Re78 读论文:GPT-4 Technical Report

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:GPT-4 Technical Report 官方博客:GPT-4 | OpenAI appendix懒得看了。 文章目录 1. 模型训练过程心得2. scaling law3. 实验结果减少风险 1. 模型训练过程心得 模型结构还…

推荐单通道有刷直流电机驱动芯片AT8236

单通道直流有刷电机驱动芯片AT8236 描述应用特点型号选择典型应用原理图管脚列表推荐工作条件 atT A 25C电气特性 atT A 25C,V M 24VH桥控制电流控制死区时间休眠模式过流保护 (OCP)过温保护 (TSD)欠压锁定保护(UVLO) PCB 版图建议典型应用示例 描述 AT8236是一款直流有刷电机…

聚铭网络6款产品入选CCIA《网络安全专用产品指南》

近日,中国网络安全产业联盟CCIA正式发布《网络安全专用产品指南》(第二版)(以下简称《指南》)。聚铭网络凭借突出技术优势、创新能力以及市场积累,旗下安全产品成功入选防火墙、网络安全审计、日志分析、网…

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1)

问题 项目里使用了 AzureBlob 存储了用户上传的各种资源文件,近期 AzureBlob 的流量费用增长很快,想通过分析Blob的日志,获取一些可用的信息,所以有了这个需求:将存储账户的日志(读写,审计&…

ESP32S3基于espidf接入网络获取NTP时间

ESP32S3基于espidf接入网络获取NTP时间 📌 相关篇《ESP32S3基于espidf接入网络配置介绍》📍官方相关SNTP 时间同步介绍文档:https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/system/system_time.html?highli…

【蓝桥杯选拔赛真题63】C++奇数 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

目录 C++奇数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 七、推荐资料 C++奇数 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 给定两个正整数N和M(10≤N<M≤10000),请找出N到M…

(学习总结20)C++11 可变参数模版、lambda表达式、包装器与部分新内容添加

C11 可变参数模版、lambda表达式、包装器与部分新内容添加 一、可变参数模版基本语法及原理包扩展emplace系列接口 二、lambda表达式lambda表达式语法捕捉列表lambda的原理lambda的应用 三、包装器bindfunction 四、部分新内容添加新的类功能1.默认的移动构造和移动赋值2.声明时…

东芝e-STUDIO2829A复印机提示“维护”该如何操作

东芝e-STUDIO2829A复印机基本参数: 产品类型 数码复合机 颜色类型 黑白 涵盖功能 复印/打印/扫描 最大原稿尺寸 A3 处 理 器 500MHz 内存容量 标配:512MB,选配:1GB 供纸容量 标配纸盒:350页(A4),最大容…

春秋杯-WEB

SSTI 可以看到主页那里有个登录测试之后为ssti {{4*4}} fenjing梭哈即可得到payload {{((g.pop.__globals__.__builtins__.__import__(os)).popen(cat flag)).read()}}file_copy 看到题目名字为file_copy&#xff0c; 当输入路径时会返回目标文件的大小&#xff0c; 通…

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好&#xff0c;因为工具代表着一定的先进性&#xff1b;但是IDEA 2024好好的给我上了一课&#xff0c;比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…

GPT-5 传言:一场正在幕后发生的 AI 变革

新的一年&#xff0c;让我们从一个引人入胜的话题开始&#xff1a;如果我告诉你&#xff0c;GPT-5 并非虚构&#xff0c;而是真实存在呢&#xff1f;它不仅真实存在&#xff0c;而且正在你看不见的地方悄然塑造着世界。我的基本假设是&#xff1a;OpenAI 已经秘密开发出 GPT-5&…

【Unity3D】利用Hinge Joint 2D组件制作绳索效果

目录 一、动态绳索 &#xff08;可移动根节点&#xff09; 二、静态绳索 三、利用Skinning Editor(Unity2022.3.15f1正常使用) 四、注意事项 一、动态绳索 &#xff08;可移动根节点&#xff09; 动态绳索 DynamicRope空物体 Anchor和whitecircle是相同位置的物体&#xff…