增强集成上下文信息的代码生成库
IDECoder 利用 IDE 提供的跨文件信息,改进了 Large Language Models 在大型软件项目的仓库级别代码补全任务中的性能。
Feb, 2024
RepoCoder 是一个简单,通用且有效的框架,它通过结合基于相似度的检索器和预训练的代码语言模型来简化存储库级代码完成流程,并允许在不同的粒度级别生成代码。同时,它还利用一种新的迭代检索 - 生成范式来弥合检索上下文和完成目标之间的差距。此外,我们通过对 RepoEval 的测试表明,在各种设置中,RepoCoder 显著提高了零样本代码完成基线,始终优于普通的增强检索式代码完成方法。
Mar, 2023
该研究提出了一种名为 ProCoder 的新方法,通过迭代修复项目级代码上下文中的错误,引导编译器反馈,从而使生成的代码精确无误。实验结果表明,ProCoder 显著改进了基本的大语言模型在生成项目相关代码方面的性能,并持续优于现有的基于检索的代码生成基准。
Mar, 2024
这篇综述研究了大型语言模型在编码生成任务中的有效提示方法,探讨了从个别编码问题到仓库规模解决方案的转变,旨在推进开发者生产力,为商业应用场景提供有用且适用的黑盒语言模型方法,并介绍了基于仓库级提示生成技术与 RepoCoder 的迭代检索与生成方法之间的权衡,以确立最佳实践,为尖端编码基准提供改进路径。
Dec, 2023
LLMs 在代码生成任务中展示了显著的潜力,在各种基准测试中在函数或语句级别取得了有希望的结果。然而,在创建类等代码构件方面的复杂性,特别是在实际软件库的背景下,尚未得到充分探索。现有的研究通常将类级生成视为一项孤立的任务,忽视了表征实际软件开发环境的错综复杂的依赖关系和交互作用。为了填补这一空白,我们介绍了 RepoClassBench,这是一个旨在严格评估 LLMs 在创建复杂的类级代码时在实际软件库中的能力的基准测试。RepoClassBench 包括 Java 和 Python 中的自然语言到类的生成任务,来自一组公共软件库。我们确保数据集中的每个类不仅在库内跨文件存在依赖关系,而且还包括相应的测试用例来验证其功能。我们发现目前的模型在我们的基准测试中面临着现实挑战,主要是由于它们对相关库上下文的有限了解。为了解决这个缺点,我们介绍了 Retrieve-Repotools-Reflect (RRR),这是一种新颖的方法,为 LLMs 提供静态分析工具,以迭代地导航和推理库级上下文,并在基于代理的框架中进行。我们的实验表明,RRR 在 RepoClassBench 上明显优于现有基准线,展示了它在不同编程语言和各种设置中的有效性。我们的发现强调了需要结合库级依赖关系以更准确地反映软件开发的复杂性的基准测试的必要性。我们的工作说明了利用专门的工具增强 LLMs 对库上下文的理解的益处。我们计划公开我们的数据集和评估工具。
Apr, 2024
基于大型语言模型的 R2C2-Coder 方法增强和评估了真实世界的代码仓库级代码补全能力,其中 R2C2-Coder 包括 R2C2-Enhance 方法和 R2C2-Bench 基准测试。
Jun, 2024
RepoGenix 提出了一种独特的解决方案,融合了代码类比的类比环境和包含深度语义关系的理由环境,通过有效压缩这些上下文成为限制大小的提示,从而提高仓库级代码补全的准确性和推断效率。
Feb, 2024
本文介绍了一个名为 RepoFusion 的新型框架,其可以训练模型根据相关的代码库上下文以提供更加准确的代码自动补全建议,并且在单行代码完成任务中展示出比训练数据规模大 70 倍的模型表现 F1 分数更加优秀。我们还发布了一个 Java 代码库数据集 Stack-Repo 和模型检查点及源代码,以便进一步的研究。
Jun, 2023
当今大型语言模型 (LLMs) 具备高度的代码生成和理解能力,特别是在解释用户指导任务时,它们对于解释陌生库中的代码模块显得尤为有希望。最近的研究表明,大型专有 LLMs 可以通过演示学习上下文中的新型库使用。这些结果引发了几个问题,即演示是否需要、是否较小的(更加开放的)模型也具备这种能力等等。本研究以更广泛的方法系统评估不同类型的 LLMs,在三个反映不同领域专业化程度的场景中,了解它们在基于上下文定义的库生成代码时的能力和限制。我们的研究结果表明,即使是开源的较小型 LLMs,如 Llama-2 和 StarCoder,也展现出了对新型代码库的熟练理解能力。我们的发现进一步揭示,LLMs 在学习新的库模块时表现出惊人的高度熟练度,即使只提供自然语言描述或函数的原始代码实现,这比演示要便宜得多。总体而言,我们的研究结果为在更具适应性和动态性的编码环境中利用 LLMs 铺平了道路。
Nov, 2023