Apr, 2024

使用迭代、工具增强的知识库推理实现的自然语言到类级代码生成

TL;DRLLMs 在代码生成任务中展示了显著的潜力,在各种基准测试中在函数或语句级别取得了有希望的结果。然而,在创建类等代码构件方面的复杂性,特别是在实际软件库的背景下,尚未得到充分探索。现有的研究通常将类级生成视为一项孤立的任务,忽视了表征实际软件开发环境的错综复杂的依赖关系和交互作用。为了填补这一空白,我们介绍了 RepoClassBench,这是一个旨在严格评估 LLMs 在创建复杂的类级代码时在实际软件库中的能力的基准测试。RepoClassBench 包括 Java 和 Python 中的自然语言到类的生成任务,来自一组公共软件库。我们确保数据集中的每个类不仅在库内跨文件存在依赖关系,而且还包括相应的测试用例来验证其功能。我们发现目前的模型在我们的基准测试中面临着现实挑战,主要是由于它们对相关库上下文的有限了解。为了解决这个缺点,我们介绍了 Retrieve-Repotools-Reflect (RRR),这是一种新颖的方法,为 LLMs 提供静态分析工具,以迭代地导航和推理库级上下文,并在基于代理的框架中进行。我们的实验表明,RRR 在 RepoClassBench 上明显优于现有基准线,展示了它在不同编程语言和各种设置中的有效性。我们的发现强调了需要结合库级依赖关系以更准确地反映软件开发的复杂性的基准测试的必要性。我们的工作说明了利用专门的工具增强 LLMs 对库上下文的理解的益处。我们计划公开我们的数据集和评估工具。