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

news2024/11/27 3:13:18

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.coloradmin.cn/o/1816449.html

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

相关文章

通过搭建 24 点小游戏应用实战,带你了解 AppBuilder 的技术原理

本文将通过一个 24 点小游戏的案例,详细介绍百度智能云千帆 AppBuilder 的基本技术原理和使用方法,帮助读者快速掌握 AI 原生应用的开发流程。 1 三步构建 AI 原生应用方法论 AI 原生应用与传统应用的最大区别是交互形态彻底的拟人化,通过…

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

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

地级市海拔标准差(可用作宽带中国工具变量)

地级市海拔标准差(可用作宽带中国工具变量) 1、来源:地理空间数据云 2、指标:行政区划代码、地区、所属省份、所属地域、经度、纬度、海拔标准差(m) 3、说明:地形起伏度会影响网络基础设施建…

Python第二语言(十、Python面向对象(上))

目录 1. 标记变量的基础类型 2. 初识对象 2.1 使用对象组织数据 3. 成员变量 3.1 类和类成员的定义 3.2 成员变量和成员方法使用 3.3 成员方法的定义语句 4. 类和对象class Clock: def ring(self): 4.1 创建类对象的语法:对象名 类名称() 4.2 用生活中的…

如何用Pycharm把python代码打包成exe文件

在terminal 里面输入pyinstaller --onefile --noconsole chuli_v2.py –noconsole 这个选项会生成一个不带控制台窗口的 .exe 文件

开发移动端常见的问题:VW适配问题,基于 postcss 插件 实现项目vw适配

当你开发移动端的时候有一个问题是避免不了的,那就是当屏幕大小无论怎么变化时,内部尺寸也要随之发生改变,也就是适配问题。这里我们讲的是最新的VW适配,也就是用vw作为单位,100vw是整个页面的大小。而在开发的设计图中…

Solr 日志系统7.4.0部署和迁移到本地,Core Admin 添加新的core报错

文章目录 Solr部署Docker部署二进制部署 Tips:Solr设置账号密码方法1:(不使用)方法2: Core Admin 添加新的core报错Solr数据迁移 Solr部署 Docker部署 docker run -d -p 8983:8983 --name solr solr:latest docker run -d -p 8983:8983 -v /opt/solr:/…

随便写写之——CSDN个人主页布局(二)

现在是中午11点30,还是有点迷糊,也不知道怎么了。 继续写写这个界面吧 代码太多了。吧上边的丢到组件里 加个图片好了,不然太丑了,看下main_haeader的布局 都是些比较简单的布局,头像这边就用了一个绝对定位定在了左…

java多线程临界区介绍

在Java多线程编程中,"临界区"是指一段必须互斥执行的代码区域。当多个线程访问共享资源时,为了防止数据不一致或逻辑错误,需要确保同一时刻只有一个线程可以进入临界区。Java提供了多种机制来实现这一点,例如synchroniz…

2024-6-12-IXI(mat)应用到SR的代码解读

数据集 Download and decompress data from the link 百度网盘 请输入提取码 Password: qrlt Transform .h5 format to .mat format "python convertH5tomat.py --data_dir XXX/T2Net/h5 论文:Task Transformer Network for Joint MRI Reconstruction and Super-Resoluti…

甲骨文新业绩发布!云业务同比增长42%,盘后股价上涨9%

KlipC报道:当地时间6月11日,甲骨文发布了2024财年年报以及2024第四季度的业绩报告。2024财年营收529.61亿美元,同比增长6.02%;净利润104.67亿美元,同比增长23.1%。 第四季度营收同比增长3.3%,达到143亿美元…

Mysql学习(九)——存储引擎

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 七、存储引擎7.1 MySQL体系结构7.2 存储引擎简介7.3 存储引擎特点7.4 存储引擎选择7.5 总结 七、存储引擎 7.1 MySQL体系结构 连接层:最上层是一些客户…

Font Creator使用方法,将第三方.ttf字符拷贝至自定义ttf字体

网上官网下载FontCreator,打开,使用免费版,直接拖拽.ttf进入工程 拷贝Google字库ttf到自定义Custom字库方法: 完成后导出 导出配置我保持默认的,路径选下就好了

前端加载 动画特效

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>加载动画</title><style type="text/css">/* 设置页面背景颜色 */body {background: #ECF0F1;}/* 定义加载动画容器的样式…

vue3第三十九节(TS中的高级类型,分类以及使用注意事项)

前言&#xff1a;为什么需要使用高级类型&#xff0c;正常的类型不能满足日常的业务需求&#xff0c;对于复杂的数据结构、函数签名、类型转换&#xff0c;我们需要使用高级类型来处理&#xff0c;常用的高级类型包含以下几种&#xff1a; 常用的类型定义&#xff1a; 基本类…

vs2015+win10编译LAStools

文章目录 下载LasTool安装包编译laslib测试 下载LasTool安装包 不要再GitHub上下载&#xff0c;在官网下载&#xff1a;link 编译laslib 将压缩包解压到对应路径下&#xff0c;注意路径下不要有空格和汉字。用vs打开目录下的 “lastools.dsw” 文件 下面注意几点&#xff1a…

Python解析Word文档的自动编号

关于自动编号的知识可以参考《在 Open XML WordprocessingML 中使用编号列表》 链接&#xff1a;https://learn.microsoft.com/zh-cn/previous-versions/office/ee922775(voffice.14) python-docx库并不能直接解析出Word文档的自动编号&#xff0c;因为原理较为复杂&#xff…

0502 构成分析设计MOS管放大电路与FET异同点

构成&分析&设计MOS管放大电路&与FET有何异同点 MOSFET需具备什么样的条件才能正常放大信号&#xff1f;如何构成MOSFET放大电路如何分析和设计MOSFET放大电路1.图解分析 2.直流偏置及静态工作点的计算![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fc…

6.7.31 使用端到端训练的基于 EfficientNet 的卷积网络在双视图乳房 X 线摄影中进行乳腺癌诊断

最好的技术之一进行了两次迁移学习:第一种是使用在自然图像上训练的模型来创建“块分类器”,对子图像进行分类;第二种是使用块分类器扫描整个乳房 X 光检查并创建“单视图全图像分类器”。建议进行第三次迁移学习,以获得一个“双视图分类器”,以使用两个乳房 X 光检查视图…

每日复盘-202406012

今日关注&#xff1a; 这几天市场打板情绪环境转好&#xff0c;轻仓试错 20240612 六日涨幅最大: ------1--------605258--------- 协和电子 五日涨幅最大: ------1--------605258--------- 协和电子 四日涨幅最大: ------1--------301036--------- 双乐股份 三日涨幅最大: --…