使用AlphaCodium进行代码生成,从提示工程到流程工程

AlphaCodium 的代码生成方法

论文地址:https://arxiv.org/pdf/2401.08500.pdf
源码地址:https://github.com/codium-ai/alphacodium

研究要点包括

  • **挑战:**现有的自然语言优化方法无法扩展 LLM 的代码生成能力
  • **解决方案:**使用 "测试驱动、多阶段代码生成流程 "AlphaCodium 进行优化。
  • **要点:**AlphaCodium 可以提高 GPT-4 生成代码的能力。

总之,AlphaCodium 这种独特的代码生成方法可以提高 LLM 在编程领域的性能。

顺便提一下,AlphaCodium 通过直接使用通用语言模型(如 GPT 和 DeepSeek)而无需额外训练,并应用专用流程,成功地大幅提高了代码生成性能。

这种方法可应用于各种语言模型,而无需额外的数据或计算成本高昂的训练阶段。

现有方法无法发挥 LLM 的代码生成潜力

最近的大规模语言模型(LLM)在为简单的编程任务生成代码方面表现出色。然而,现实世界中的编程要复杂得多,因此即使是最新的 LLM 也经常无法达到预期效果。

这是因为代码生成任务具有不同于自然语言处理的特殊挑战,自然语言的优化方法无法直接应用。

具体来说,他们面临以下挑战

  • 不同的编程语言有不同的语法规则。
  • 小错误造成语法错误。
  • 难以正确处理特殊情况,如输入错误。
  • 难以将自然语言描述的问题陈述转化为详细的代码。
  • 难以满足时间计算和内存使用等非功能性要求
  • 难以选择和实施适当的复杂数据结构和算法
  • 在设计时很难意识到需要结合和使用多种规范
  • 难以限制执行环境

迄今为止,代码生成一直采用 “自然语言任务优化方法”,随着任务变得越来越复杂,这种方法很容易导致错误。

因此,为了提高更复杂的编码任务的性能,人们研究了专门针对编码任务的优化方法。

现有研究

CodeContests 数据集的发布使我们能够对从竞技编程平台上收集到的解决更难编程问题的模型和方法进行评估。

在早先的 AlphaCode 研究中,大量的计算是通过微调进行的,这被认为是不切实际的。

CodeChain 还引入了一个新的推理框架。

阿尔法钠的具体流量。

AlphaCodium 代码生成过程分为两个主要阶段:"预处理阶段 "和 “迭代阶段”。

上图左侧为预处理阶段,右侧为迭代阶段。

预处理阶段

**在预处理阶段,对自然语言中指定的问题进行分析和推理。**具体来说,需要执行以下流程

  1. 从问题陈述中提取目标、输入、输出、规则和约束条件,并由人工智能逐项列出
  2. 根据对问题文本的理解,生成多个候选答案代码
  3. 对生成的答案代码进行排序并选出最佳代码
  4. 对选定的答案代码进行验证测试。
  5. 分析验证测试的结果并创建额外的测试用例

这意味着,预处理阶段使用自然语言处理来分析问题,生成和选择初始候选解决方案代码,并准备测试用例供迭代阶段使用。

下面是一个给定问题陈述的示例,其中包括任务目标、输入、输出、规则和限制等信息。

然后从上述问题陈述中提取信息,并由人工智能以要点形式总结如下

迭代阶段

**在迭代阶段,对预处理阶段生成的求解代码进行改进。**具体来说,要重复以下循环。

  1. 在预处理阶段选择的答案代码被用作初始代码。
  2. 在 "公共测试 "中测试初始代码。
  3. 分析测试结果,修改和改进代码
  4. 重新测试改进后的代码,如果结果有所改善,则予以采用
  5. 通过 "更多人工智能生成的测试 "进一步迭代改进
  6. 重新测试改进后的代码,如果结果有所改善,则予以采用

这意味着,在迭代阶段,代码会被实际执行,并利用测试结果作为反馈,逐步完善解决方案代码。除了现有的测试数据集,测试还利用了人工智能生成的额外测试集,从而实现了高度全面的验证。

代码生成任务的技术

在使用 AlphaCodium 生成代码时,以下描述的技术更为有效

  • 使用 YAML 格式的结构化输出。
  • 列表形式的语义推理
  • 模块化代码生成
  • 通过双重验证进行软决策。
  • 留有余地,避免直接提问
  • 测试锚

这些方法被认为不仅广泛适用于本研究,也适用于使用 LLM 的代码生成任务。

下面将依次介绍每种技术。

使用 YAML 格式的结构化输出

在设计提示时要求以 YAML 格式输出,可以系统地表示复杂的任务,大大减少提示工程的工作量。

作者认为,YAML 格式比 JSON 格式更合适,特别是在代码生成任务中。

生成的代码通常包含单引号、双引号和特殊字符,但在 JSON 中很难有效地放置这些字符。另一方面,在 YAML 中,只要遵守适当的缩进,块标量格式就可以正确地表示任意文本和代码。

YAML 格式所需的标记也比 JSON 少,因为它不需要像 JSON 那样的大括号、引号和转义字符。

这将降低成本,缩短推理时间,提高质量。

列表形式的语义推理

当要求人们对一个问题进行推理时,将输出结果以项目符号的形式呈现会取得更好的效果。这是因为项目要点能促使法律硕士更深入地理解问题,并改进输出结果。

模块化代码生成

指导他们生成代码时,不要只生成一个函数,而是将代码详细拆分成多个函数,这样生成的代码质量高,错误少。

通过双重验证进行软决策

通过提供一个额外步骤,要求学习者重新生成生成的输出结果并进行必要的修改,鼓励学习者进行 “批判性推理”。

他们认为,这比直接要求回答 "是或否 "的问题更有效。

留有余地,避免直接提问

就复杂问题直接提问往往会产生错误的答案。因此,采用的流程是从较简单的任务中逐步积累数据。该公司表示,重要的是要避免不可逆转的决定,并为探索和代码迭代留出空间。

测试锚

由于一些人工智能生成的测试可能是不正确的,因此它们被用作在公共测试集中验证过的测试的锚点,以防止对代码进行不正确的修改。

效果

实验细节

为了测试所提方法的有效性,我们在竞赛编程问题数据集 CodeContests 上进行了实验。

与直接提示输入法相比,本实验评估了 AlphaCodium 在多大程度上提高了 LLM 代码生成性能。

此外,还将 AlphaCodium 的性能与之前的研究 AlphaCode 和 CodeChain 进行了对比评估。

数据集

本研究使用竞赛编程问题数据集CodeContests来评估 AlphaCodium 的性能。

CodeContests 数据集的主要特点是

  • 由从竞赛编程平台收集的问题组成。
  • 冗长复杂的自然语言问题描述。
  • 每个问题可提供约 200 个私人输入/输出测试。
  • 它包含 10 000 个训练数据、107 个验证数据和 165 个测试数据(本研究不使用训练集,只使用验证集和测试集)。

如上所述,CodeContests 是一个很好的基准,它由现实而具有挑战性的问题组成,侧重于竞赛编程。

结果

如前所述,本研究进行了两项实验

  • 直接提示输入与 AlphaCodium
  • 以前对阿尔法钠的研究

让我们依次来看看它们。

直接提示输入与 AlphaCodium

每个问题生成五个代码,然后比较正确答案的百分比(pass@5)。

结果如下(METHOD 一栏中的 “直接”= 直接提示输入)。

结果表明,在使用 GPT-4 时,AlphaCodium 在验证集上的正确率从 19% 提高到 44%(提高了 2.3 倍)。

其他模型,如 GPT-3.5 和 DeepSeek,也显示出持续和显著的改进。

…先前的研究与 AlphaCodium 的对比

与之前一样,每个问题生成五个代码,然后比较正确答案的百分比(pass@5)。

结果如下

结果表明,在使用相同的 GPT-3.5 模型时,AlphaCodium 的性能比 CodeChain 更好。

顺便提一下,AlphaCode 涉及微调和大量计算,而 AlphaCodium 则使用 LLM,无需训练。不过,我们可以看到,AlphaCodium 仍能实现与 AlphaCode 相同甚至更好的性能,而计算复杂度却不到 AlphaCode 的万分之一。

AlphaCodium 大大提高了 LLM 代码生成的性能

本文介绍了对 AlphaCodium 的研究,这是一种专门针对竞赛编程问题的新代码生成方法

这是一项重要的研究,表明 LLM 的代码生成性能有了显著提高。

本研究的局限性包括以下三点。

  • 该方法专门针对竞赛编程问题,需要在实际开发中加以应用。
  • 不仅希望在 CodeContests 上进行验证,还希望在其他数据集上进行验证
  • 该方法专门用于代码生成,对其他任务的适用性尚不清楚。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二刷算法训练营Day29 | 回溯算法(5/6)

目录 详细布置: 1. 491. 非递减子序列 2. 46. 全排列 3. 47. 全排列 II 详细布置: 1. 491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序…

用教育邮箱在官网安装origin2024中文版教程

打开origin官网,点击learning Edition,教育版只能维持六个月,但是过期之后可以在官网更新,能够免费使用六次,也就是三年。 OriginLab - Origin and OriginPro - Data Analysis and Graphing Software 填写学校信息&…

一文讲清:生产报工系统的功能、报价以及如何选择

最近这几年,企业越来越注重生产的速度和成本,尤其是“性价比”,生产报工系统已经变成了制造业里不可或缺的一部分。不过,市场上生产报工系统的选择太多,价格也都不一样,这就给很多企业出了个难题&#xff1…

LVS+Keepalived高可用负载均衡群集

目录 一.高可用群集相关概述 1.高可用(HA)群集与普通群集的比较 普通群集 高可用群集(HA) 两者比较 2.Keepalived高可用方案 3.Keepalived的体系模块及其作用 4.Keepalived实现原理 二.LVSKeepAlived高可用负载均衡集群的…

RERCS系统开发实战案例-Part03 创建Web Dynpro对应的FPM Application

1、通过事务码SE80 资源浏览器创建 2、通过事务码FPM_WB在WEB端创建 3、创建FPM Application步骤 1)选择:在业务实体上创建FPM应用程序的向导; 2)配置:输入平面布置对象; 3)单击 下一个&#…

朴素贝叶斯分类器 #数据挖掘 #Python

朴素贝叶斯分类器是一种基于概率统计的简单但强大的机器学习算法。它假设特征之间是相互独立的(“朴素”),尽管在现实世界中这通常不成立,但在许多情况下这种简化假设仍能提供良好的性能。 基本原理:朴素贝叶斯分类器…

[CUDA 学习笔记] 稀疏矩阵向量乘法(SpMV) CUDA 实现与优化

稀疏矩阵向量乘法(SpMV) CUDA 实现与优化 本文主要围绕基于 CUDA 的 SpMV 实现进行介绍, 包括几种典型稀疏矩阵存储格式下 SpMV 的朴素实现, 以及 CSR 格式下的几种优化实现. 稀疏矩阵存储格式 稀疏矩阵即含有大量零元的矩阵. 对于稀疏矩阵, 像稠密矩阵一样使用二维数组来存…

Python学习打卡:day04

day4 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day428、while 循环的嵌套应用29、while 循环案例 — 九九乘法表补充知识示例:九九乘法表 30、for 循环基本语法while 和 for 循环对比f…

Java SE LTS版本商用收费,有那些开源的替代方案?

🚀 Java SE LTS版本商用收费,有那些开源的替代方案? 摘要 Java 对于云服务、大数据、电子商务、支付、欺诈和身份、交易等许多应用程序来说都是至关重要的语言。然而,Oracle 对 Java SE LTS 版本的商用收费政策引发了广泛关注和…

免费学习通刷课(免费高分)Pro版

文章目录 概要整体架构流程小结 概要 关于上一版的免费高分的学习通刷课,有很多人觉得还得登录太复杂了,然后我又发现了个神脚本,操作简单,可以后台挂着,但是还是建议调整速度到2倍速,然后找到你该刷的课&…

⌈ 传知代码 ⌋ ERA-CoT: 实体关系推理

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

LLVM Cpu0 新后端8 尾调用优化 Stack Overflow Exception异常

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

推荐这两款AI工具,真的很好用

巨日禄 巨日禄是一款由杭州巨日禄科技有限公司开发的AI工具,主要功能是将文本内容转换为视频。该工具通过分析大量的剧本数据和影视作品,为用户提供各种类型的故事情节和角色设置,帮助用户快速找到灵感,减少构思剧本的困难和犹豫。…

服务器通的远程桌面连接不上,服务器通的远程桌面连接不上解决方法

当面临服务器远程桌面连接不上的问题时,专业的处理方式需要遵循一系列步骤来确保问题得到准确且高效的解决。以下是一些建议的解决方法: 一、初步排查与诊断 1. 检查网络连接: - 确保本地计算机与服务器之间的网络连接是稳定的。 - 尝…

鸿蒙开发:【线程模型】

线程模型 线程类型 Stage模型下的线程主要有如下三类: 主线程 执行UI绘制。管理主线程的ArkTS引擎实例,使多个UIAbility组件能够运行在其之上。管理其他线程的ArkTS引擎实例,例如使用TaskPool(任务池)创建任务或取消…

ESP RainMaker®为企业提供AIoT云解决方案,启明云端乐鑫代理商

在AIoT的浪潮中,企业面临着前所未有的机遇与挑战。如何快速响应市场变化,开发出具有竞争力的智能产品?如何确保数据安全,同时实现高效的设备管理?这些问题,ESP RainMaker给出了答案。 ESP RainMaker是一个…

数据价值管理-数据验收标准

前情提要:数据价值管理是指通过一系列管理策略和技术手段,帮助企业把庞大的、无序的、低价值的数据资源转变为高价值密度的数据资产的过程,即数据治理和价值变现。第一讲介绍了业务架构设计的基本逻辑和思路。前面我们讲完了数据资产建设标准…

0604 集成电路运算放大器

6.4.1 集成电路运算放大器CMOS MC14573 6.4.2 集成运算放大器741

Day 19:419. 甲板上的战舰

Leetcode 419. 甲板上的战舰 给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ ,返回在甲板 board 上放置的 战舰 的数量。 战舰 只能水平或者垂直放置在 board 上。换句话说&#xff…

UV胶开裂主要因素有哪些?如何避免?

UV胶开裂主要因素有哪些?如何避免? UV胶开裂的原因可能包括多个方面: 固化不足:UV胶的固化需要足够的紫外线照射。如果照射时间不够,或者紫外线光源的强度不足,胶水可能没有完全固化,从而导致开…