大模型编程实测:如何hold住复杂、跨语言代码需求?
AI 大模型正在深入千行百业,在 CSDN 举办的 2023 年 1024 程序员节上,CSDN 创始人蒋涛分享中提到,大模型将掀起一场生态革命,带来生产力的极大提升,重构所有软件和应用,数字经济将发生彻底改变。这是开发者的黄金时刻,也是全世界程序员的一次机会,大模型将技术的潜力推向了全新的高度,重新定义了开发者的角色以及数字经济的前景。其中,与程序员关系最紧密的,是AI大模型对开发范式的影响和改变,未来可能每一位程序员都要与AI一同完成开发任务。
最近,腾讯混元大模型(以下简称腾讯混元)发布了新版本升级,这次升级重点加强了文生图和代码生成两个方面的能力。本文就将以腾讯混元大模型为例,分享 AI 大模型在代码生成能力上的最新表现,分析其背后的技术探索,并展望未来的应用前景,希望为开发者提供参考与研发工作新思路。
语义理解,实现细节描述需求
相比此前版本,新版腾讯混元在代码生成任务上的最大进步,就是提升语义理解能力,根据更加细致的需求描述,生成出语义更加准确的代码。为了评测语义理解,我们给腾讯混元下达一些包含细节编程任务的描述,测试它返回的代码效果。
测试编程如下:
“请用Python语言编写一个函数,实现对一个整数数组进行排序。要求采用冒泡排序算法对数组从小到大排序,并返回排序后的数组。”
对此需求,腾讯混元的回答是:
在这个测试用例中,我们包含了如下细节:
使用 Python
输入输出均为整数数组
冒泡排序
从小到大
从腾讯混元回答中可以看到,它首先给出了编码风格良好的 bubble_sort() 函数,代码不仅正确,在解释器中也可以直接运行,而且同时代码的解析。完美实现了笔者的细节要求,展现出精准捕捉需求描述和转换实现编程语义的能力。
我们还可以进行更复杂的测试,加入更多的细节要求,比如要求引用内置函数,输出格式,代码风格等。
测试用例如下:
“请编写一个Python函数,输入一个字符串数组,然后按照数组元素的字母表顺序对数组进行排序后输出,并用 * 间隔每个字符串的输出。”
腾讯混元的输出如下:
这段代码实现了测试用例中的每个细节要求,如输入字符串,调用内置函数 sorted 进行排序,使用*间隔输出。同样的,这段代码可以在解释器中正确的被执行。
通过这些测试可以看出,新版腾讯混元在理解描述中的编程需求和生成对应代码的能力上,确实有了明显的进步。它可以识别出不同的数据类型,如整数数组和字符串数组,并根据所述需求选择合适的排序算法进行实现。同时对于语义细节,也有很好的理解和实现。
跨语言代码生成,hold 住不同语言编码风格
大模型需要能够理解不同编程语言的语法和语义,以便生成正确的代码。这需要模型具有强大的语言建模能力。在评测点一中,我们主要是让腾讯混元使用 Python 进行代码输出,那么其它编程语言的代码生成能力如何呢。
我们给出的测试用例如下:
“用golang来实现二叉树的前、中、后序遍历。”
这段测试用例虽然不长,但是仍然包含了很多细节。如二叉树的定义、前序、中序、后序遍历的函数,输入输出等。让我们来看一下腾讯混元的回答:
甚至还给出了测试代码和输出结果:
腾讯混元展现出了惊人的知识量,不仅理解了测试用例,正确定义了二叉树,还给出了三个排序函数,给出了测试结果,说明腾讯混元很强的语义理解能力,能够理解非常抽象的需求。Python 写的好,Golang 同样写的非常优秀,符合 Golang 的编码风格和习惯,对于 Golang 特有的结构也是输出的非常流畅和正确。这表明,腾讯混元也能调用恰当的 API 编写出符合要求的代码,支持不同的编程语言,生成的代码符合不同编程语言的习惯。
复杂抽象、专业业务理解与生成,合理简洁
在前面两点中,主要考察了腾讯混元对于语义细节以及代码生成的广度上,实际工作中,需求是非常抽象和专业的。
我们来测试一下腾讯混元对于专业领域的代码生成能力,给出测试用例如下:
“使用Rust编写一个内存管理接口模块,用于对错误内存页面的隔离和重新分配。”
在这个测试用例中,我们切换了新的编程语言,同时引入了操作系统底层的专业领域知识,腾讯混元的回答如下:
从思路到实现,腾讯混元的回答质量很高,从专业的角度看,设计的也是非常合理的。不仅给出了示例代码,还解释了关键逻辑,如分配、释放内存,检查内存页面是否有效,分配新页面。可以说是理解了这个业务需求的每个细节,同时还留下了业务需要额外关注的地方,如性能、碎片等。在这个场景中非常贴合专业领域的编码习惯了,即先给出大致的逻辑,然后不断进行细节优化。
让我们再用一个复杂且抽象的测试腾讯混元的生成能力。
“使用基本的html,js,css完成一个美观实用的Todolist页面”
在这个测试用例中,Todolist 是抽象的,隐含了用户的输入输出,任务的删减。任务的定义,样式的定义等。让我们来看一下腾讯混元的实现:
代码比较长,这里直接按它说的,将代码复制到一个 html 文件中,然后通过浏览器打开直接看效果:
包括了一个基本的 TodoList 页面,用户可以在输入框中输入任务,点击添加按钮将任务添加到任务列表中。任务列表中的每个任务都有一个删除按钮,点击删除按钮可以从列表中移除任务,整个页面使用了简洁的设计和易于使用的元素。
数据、prompt 和建模技术探索
大模型代码生成能力得到大幅提升的背后,需要依托多方面的技术探索与突破。以腾讯混元大模型为例,我们从腾讯混元大模型的更新日志中了解到,腾讯混元团队收集了大规模的编程语料,通过不同语言、不同应用领域代码的学习,不断完善模型对编程语义的理解。此外,设计高质量的代码生成 prompt 也是关键,指导模型准确捕捉语法、风格等方面的语言特征。具体来说:
第一是在提高编程语料数据质量。相比通用语言数据,高质量的代码语料对模型训练更为关键,腾讯混元团队持续积累各类编程语言的代码样本,扩充模型对编程语义的理解。
第二是持续进行 prompt 优化,不断优化代码生成的提示词表述,引导模型更好地捕捉编程语言的语法、风格和语义等方面特征。
第三是尝试多任务统一建模,在模型结构上,将代码生成任务与理解自然语言描述的任务统一建模,使模型在两个方向的表示能力得以相互促进。
除了这三方面技术探索,模型在程序语言理解上的大幅进步还有赖于持续的工程化积累。另外,腾讯混元大模型由腾讯自研的 Angel 机器学习平台提供支撑。AngelPTM 训练速度较主流开源框架提升 1 倍,可以缩短模型研发迭代周期,也是确保腾讯混元大模型快速迭代的重要的保证。
应用前景:代码提示、代码规范检测与代码生成,助力开发提效
通过实测,能看到腾讯混元大模型代码生成能力已经有效提升。而更好的生成能力,可以帮助大模型在软件开发辅助等领域开启更多应用场景。目前代码编程方面可以预见有三大应用方向:
1. 代码提示:基于自然语言描述自动提示代码段,可辅助开发者更快实现编程需求。
2. 代码规范检测:检查代码是否符合指定的代码规范要求,如命名规范等。
3. 代码生成根据复杂需求描述自动生成完整代码,辅助快速实现编程功能。
以腾讯混元大模型为例,在代码提示上,腾讯混元可用于各种编程语言的 IDE 中,根据开发者的注释或需求说明,提示可能的代码实现。针对一些重复性比较强的编码工作,如果能根据注释自动提示代码,将大大提升开发效率。开发者只需关注业务要求,无须反复键入重复的代码片段,就能高效实现功能。
在代码规范检测上,可基于公司或项目的代码规范要求,自动检查代码的命名、格式等是否符合规范。腾讯混元可以帮开发团队节省开发时间,避免手动 review 检查出的问题,自动化检测可一次性直观地反馈所有规范问题。
而代码生成更是直接辅助编程,根据需求描述快速输出代码雏形,腾讯混元可直接输出初始版本代码,开发者只需在此基础上进行适当优化与补充,辅助开发者快速实现所需功能。
从这次版本升级能看到,腾讯混元的代码生成能力正在持续快速进步。相信通过不断的实践与积累,其在程序语言理解方面的能力还将达到新的高度。而对于开发者来说,趁手的开发工具是高质高效完成开发任务的前提,从腾讯混元大模型评测能看出 AI 大模型的实力已经不容小觑,如何利用大模型加速抽象复杂、甚至跨语言的项目研发,提升研发效率,值得每位开发者重视。CSDN 将持续报道 AI 与大模型最新技术与落地实践,欢迎关注。