13 天前

CodeChain:通过具有代表性子模块的自修正链实现模块化代码生成

Hung Le, Hailin Chen, Amrita Saha, Akash Gokul, Doyen Sahoo, Shafiq Joty
CodeChain:通过具有代表性子模块的自修正链实现模块化代码生成
摘要

大型语言模型(LLMs)在解决诸如HumanEval或MBPP基准测试中的简单编程任务方面已表现出相当高的能力。然而,对于更复杂且具有竞争性的编程任务,这些模型仍然面临显著挑战——这可能源于其倾向于生成整体式(monolithic)代码块,而非将问题分解为逻辑清晰的子任务与子模块。相比之下,经验丰富的程序员在应对复杂任务时,通常会本能地采用模块化编程方式,并通过抽象来组织代码,同时复用此前已开发的通用模块。为弥合这一差距,我们提出了CodeChain,一种新颖的推理框架,通过一系列自我迭代的修订过程,引导模型生成模块化的代码。每一阶段的修订均受到前序迭代中生成的代表性子模块的指导。具体而言,CodeChain首先通过思维链(chain-of-thought)提示引导LLM生成模块化代码;随后,通过循环执行两个步骤实现链式自我修订:(1)从生成的子模块中提取并聚类,选取聚类中心作为更具通用性与可复用性的实现方案;(2)将所选的模块实现融入原始的思维链提示中,并再次指令LLM基于此生成新的模块化解决方案。实验表明,通过自然地鼓励模型复用先前开发并验证过的子模块,CodeChain显著提升了生成代码的模块化程度与正确性,在APPS基准上实现了35%的相对pass@1提升,在CodeContests上更是达到76%的显著提升。该方法在OpenAI的LLM以及开源模型如WizardCoder上均展现出良好的有效性。此外,我们还进行了全面的消融实验,系统考察了不同提示策略、聚类数量、模型规模、程序质量等因素的影响,为CodeChain的成功提供了深入的洞察与理论支持。