YABLoCo: Yet Another Benchmark for Long Context Code Generation

📄 arXiv: 2505.04406v1 📥 PDF

作者: Aidar Valeev, Roman Garaev, Vadim Lomshakov, Irina Piontkovskaya, Vladimir Ivanov, Israel Adewuyi

分类: cs.CL, cs.AI, cs.SE

发布日期: 2025-05-07

备注: Presented at LLM4Code 2025 Workshop co-located wtih ICSE 2025


💡 一句话要点

YABLoCo:面向长上下文代码生成的全新基准测试集

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码生成 长上下文 基准测试 大型语言模型 C++ C语言 软件开发 代码仓库

📋 核心要点

  1. 现有代码生成基准测试的上下文窗口较小,无法真实反映大型软件项目的代码规模。
  2. YABLoCo基准测试集专注于C和C++大型代码仓库中的函数体生成,并提供函数元数据和调用图。
  3. 该论文提供可扩展的评估管道和可视化工具,以高效评估和分析生成的代码。

📝 摘要(中文)

大型语言模型(LLM)展现了解决各种编程任务的能力,包括代码生成。通常,LLM的性能是在具有数千行代码的中小型上下文窗口的基准测试上衡量的。然而,在实际软件项目中,代码仓库可能跨越数百万行代码。本文通过贡献长上下文代码生成基准测试集(YABLoCo)来弥合这一差距。该基准测试集包含从四个大型代码仓库中选择的215个函数,这些仓库包含数千个函数。数据集包含函数的元数据、具有不同依赖级别的函数上下文、文档字符串、函数体以及每个仓库的调用图。本文提出了贡献的三个关键方面。首先,该基准测试旨在生成C和C++大型仓库中的函数体,这两种语言之前的基准测试未覆盖。其次,该基准测试包含从20万到200万行代码的大型仓库。第三,我们贡献了一个可扩展的评估管道,用于高效计算目标指标,以及一个用于生成代码的可视化分析工具。总而言之,这三个方面允许评估C和C++大型仓库中的代码生成。

🔬 方法详解

问题定义:现有代码生成基准测试主要集中在小规模代码片段或中等规模的项目上,无法有效评估LLM在处理大型、复杂的真实世界代码库时的性能。现有基准测试对C和C++的支持不足,而这两种语言在工业界应用广泛。因此,需要一个能够模拟真实软件开发场景的长上下文代码生成基准测试,以推动LLM在实际应用中的发展。

核心思路:YABLoCo的核心思路是构建一个包含大型C和C++代码仓库的基准测试集,并提供丰富的元数据和工具,以便全面评估LLM的代码生成能力。通过提供不同依赖级别的函数上下文,可以测试LLM对代码依赖关系的理解和利用能力。可扩展的评估管道和可视化工具则可以帮助研究人员高效地分析和改进LLM的生成结果。

技术框架:YABLoCo基准测试集包含以下几个主要组成部分:1) 从四个大型C和C++代码仓库中选择的215个函数作为测试用例;2) 每个函数的元数据,包括函数名、参数、返回值等;3) 不同级别的函数上下文,包括直接依赖和间接依赖的代码;4) 函数的文档字符串和函数体;5) 代码仓库的调用图,用于分析函数之间的依赖关系;6) 可扩展的评估管道,用于自动计算代码生成指标;7) 可视化工具,用于分析生成的代码。

关键创新:YABLoCo的主要创新在于:1) 它是首个专注于C和C++大型代码仓库的长上下文代码生成基准测试;2) 它提供了丰富的元数据和工具,以便全面评估LLM的代码生成能力;3) 它包含从20万到200万行代码的大型仓库,更贴近真实软件开发场景。

关键设计:YABLoCo的关键设计包括:1) 函数选择策略:选择具有代表性的函数,覆盖不同的代码模式和复杂程度;2) 上下文构建策略:根据依赖关系构建不同级别的函数上下文,以测试LLM对代码依赖关系的理解;3) 评估指标:采用多种代码生成指标,包括语法正确性、语义相似性、代码覆盖率等;4) 评估管道:设计可扩展的评估管道,支持大规模代码生成评估。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

YABLoCo基准测试集包含从20万到200万行代码的大型C和C++代码仓库,提供了215个测试用例。该基准测试集还提供可扩展的评估管道和可视化工具,方便研究人员进行代码生成评估和分析。该基准测试为C/C++长上下文代码生成提供了一个标准化的评估平台。

🎯 应用场景

YABLoCo基准测试集可用于评估和比较不同LLM在长上下文代码生成任务上的性能。它可以促进LLM在软件开发领域的应用,例如代码自动补全、代码生成、代码修复等。通过提高LLM的代码生成能力,可以提高软件开发的效率和质量,降低开发成本。

📄 摘要(原文)

Large Language Models demonstrate the ability to solve various programming tasks, including code generation. Typically, the performance of LLMs is measured on benchmarks with small or medium-sized context windows of thousands of lines of code. At the same time, in real-world software projects, repositories can span up to millions of LoC. This paper closes this gap by contributing to the long context code generation benchmark (YABLoCo). The benchmark featured a test set of 215 functions selected from four large repositories with thousands of functions. The dataset contained metadata of functions, contexts of the functions with different levels of dependencies, docstrings, functions bodies, and call graphs for each repository. This paper presents three key aspects of the contribution. First, the benchmark aims at function body generation in large repositories in C and C++, two languages not covered by previous benchmarks. Second, the benchmark contains large repositories from 200K to 2,000K LoC. Third, we contribute a scalable evaluation pipeline for efficient computing of the target metrics and a tool for visual analysis of generated code. Overall, these three aspects allow for evaluating code generation in large repositories in C and C++.