代码补全模型在最近几年取得了显著进展,但是当前流行的评估数据集,如HumanEval和MBPP,主要集中在单个文件的代码补全任务上。这种过于简化的设置不能很好地代表现实世界的软件开发场景,其中存储库跨越多个文件,具有众多跨文件依赖关系,需要访问和理解跨文件上下文才能正确完成代码。
为了填补这一空白,我们提出了CrossCodeEval,这是一个多语言、多样化的代码补全基准,需要深入的跨文件上下文理解才能准确地完成代码。CrossCodeEval建立在四种流行编程语言(Python、Java、TypeScript和C#)的多样真实、开源、自由许可证存储库上。为了创建严格要求跨文件上下文以实现准确完成的示例,我们提出了一种简单而有效的基于静态分析的方法,用于确定当前文件中使用跨文件上下文的位置。
对于像CodeGen和StarCoder这样的最先进的代码语言模型的广泛实验表明,当相关的跨文件上下文缺失时,CrossCodeEval极具挑战性,在添加这些上下文到提示中时,我们看到了明显的改进。然而,尽管有这样的改进,即使使用最高性能的模型,性能的巅峰仍然明显未达到,这表明CrossCodeEval也能够评估模型利用广泛上下文以实现更好的代码补全的能力。最后,我们评估了各种检索跨文件上下文的方法,并展示了CrossCodeEval也可用于测量代码检索器的能力。
提问交流