导语
本研究提出了一个名为Self-evolve的框架,它旨在通过大型语言模型(LLMs)实现代码生成的进化。这一框架在Text-to-Code任务中引入了一种全新的处理流程,以提高LLMs在代码生成方面的效率和准确性。在之前,尽管LLMs在代码生成方面已取得显著成效,但它们仍然面临着一次性准确生成代码的挑战。Self-evolve通过其独特的双阶段流程,有效地解决了这一问题。在第一阶段,该框架利用LLMs从输入的提示中提取知识,生成中间代码。进入第二阶段,Self-evolve转变LLMs的角色,使其成为专家级程序员,对这些生成的代码进行调试和优化,而且这个过程不需要专门设计的测试用例,仅通过解释器的错误消息即可完成。
- 链接:https://arxiv.org/abs/2306.02907
1 引言
在现代应用程序开发中,代码生成是一个关键且具有挑战性的组成部分。随着预训练语料库的扩展,大型语言模型(LLMs)在多种任务和领域的表现显著提升,使得LLMs成为代码生成的首选模型。事实上,LLMs的表现远超过之前专门用于代码生成的深度神经网络模型。同时,LLMs已经被用于增强以前的方法,它们能够消化各种提示内容,并进行文本生成。尽管以往的研究中,人们通过添加各种辅助信号到提示中以获取更准确的代码,但这些方法大多通过外部检索器和大型知识库来获取这些信号。然而,这些方法存在一个问题:检索器在适应不同任务时可能会遇到领域不匹配的问题,这限制了它们的通用性。此外,当前的检索器并不适合处理半结构化的知识项,如库文档,这可能导致检索结果不佳。
为了避免领域不匹配和不准确的检索结果,本研究提出Self-evolve框架,旨在通过大型语言模型(LLMs)推动代码生成的进步。与以往依赖于外部检索器和大型知识库的方法不同,Self-evolve采用两阶段范式,将LLM本身视为知识来源。作者指出,LLM已编码了各种领域知识,可作为一个大型知识库。因此,Self-evolve通过提示LLM自行生成所需知识,避免了传统检索方法的领域不匹配和检索不准确的问题。
Self-evolve的创新之处在于它的自动优化(self-refinement)机制,该机制模仿人类程序员依赖调试器来确保代码实现的正确性。通过构建可运行的程序并执行测试用例,该框架能够自动纠正初步代码,提高代码的准确性和可靠性。
在实验方面,作者使用gpt-3.5-turbo(ChatGPT)来构建Self-evolve,并在多项任务上评估其性能,包括数据科学代码生成、通用代码生成和代码翻译任务。实验结果显示,Self-evolve在各项任务中均实现了显著的性能提升。此外,该框架能够提供比传统检索方法更准确的知识,并且能轻松扩展到更强大的模型,如GPT-4。
2 相关工作
增强型代码生成(Augmented code generation):在LLM时代之前,研究人员已经尝试通过编程环境和功能文档来生成代码。最近,基于各种语料库预训练的LLMs支持了零次或少次学习的上下文学习流程。例如,一些研究利用检索类似代码片段或API文档来增强代码生成模型。然而,这些方法的性能受限于当前检索器模型的能力,且难以适应目标领域。
自动代码优化(Automatic code refinement):由于语言模型常常以高置信度输出不可靠信息,一些研究致力于专门修复错误代码的模型。近期的工作中,LLMs被用作“教师”角色,修复代码中的隐藏错误。不过,这些方法在代码生成中的应用有其局限性,例如格式化问题或暴露测试用例,与真实编程场景不符。
相较于现有方法,Self-evolve不需要特定领域的微调,提供了更高的可访问性和通用性,其自动代码精炼方法也更贴近实际编码场景。
3 self-evolve: Code Evolution via Large Language Models
3.1 背景
代码生成形式化:在自然语言 d d d和代码上下文 c