Enhancing Project-Specific Code Completion by Inferring Internal API Information

📄 arXiv: 2507.20888v1 📥 PDF

作者: Le Deng, Xiaoxue Ren, Chao Ni, Ming Liang, David Lo, Zhongxin Liu

分类: cs.SE, cs.CL

发布日期: 2025-07-28


💡 一句话要点

提出一种推断内部API信息的方法,增强项目特定代码补全能力

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

关键词: 代码补全 大型语言模型 检索增强生成 内部API 项目特定

📋 核心要点

  1. 现有项目特定代码补全方法难以有效利用内部API信息,尤其是在API未显式导入时,影响补全准确性。
  2. 该论文提出了一种无需显式导入即可推断内部API信息的方法,通过构建API的用法示例和语义描述来增强LLM的知识。
  3. 实验结果表明,该方法在代码和标识符精确匹配方面显著优于现有方法,并且可以有效提升现有基线的性能。

📝 摘要(中文)

项目特定的代码补全是一项关键任务,它利用项目上下文来生成准确的代码。目前最先进的方法使用检索增强生成(RAG)与大型语言模型(LLM)和项目信息来进行代码补全。然而,它们通常难以整合内部API信息,这对于准确性至关重要,尤其是在API没有在文件中显式导入时。为了解决这个问题,我们提出了一种无需依赖导入来推断内部API信息的方法。我们的方法通过构建用法示例和语义描述来扩展API的表示,从而为LLM构建知识库以生成相关的补全。我们还引入了ProjBench,这是一个避免泄露导入并包含大规模真实世界项目的基准。在ProjBench和CrossCodeEval上的实验表明,我们的方法显著优于现有方法,代码精确匹配提高了22.72%,标识符精确匹配提高了18.31%。此外,将我们的方法与现有基线集成,代码匹配提高了47.80%,标识符匹配提高了35.55%。

🔬 方法详解

问题定义:现有项目特定代码补全方法,如基于RAG的LLM,在处理未显式导入的内部API时表现不佳。这些方法依赖于显式导入信息,无法充分利用项目内部隐含的API知识,导致代码补全的准确性和相关性降低。因此,如何有效利用项目内部API信息,提升代码补全质量,是一个亟待解决的问题。

核心思路:论文的核心思路是通过推断和表示项目内部API信息,构建一个更全面的知识库,供LLM在代码补全时使用。具体来说,该方法不依赖于显式导入语句,而是通过分析项目代码,提取API的用法示例和语义描述,从而扩展API的表示,使得LLM能够更好地理解和利用这些API。

技术框架:该方法主要包含以下几个阶段:1) API信息提取:从项目代码中提取API的名称、用法示例和语义描述。2) 知识库构建:将提取的API信息构建成一个知识库,用于LLM的检索和利用。3) 代码补全:利用LLM和构建的知识库,生成项目特定的代码补全建议。在代码补全过程中,LLM首先根据上下文检索相关的API信息,然后结合项目上下文生成代码补全建议。

关键创新:该方法最重要的技术创新点在于无需显式导入即可推断和表示内部API信息。与现有方法相比,该方法能够更全面地利用项目内部的API知识,从而提高代码补全的准确性和相关性。此外,该方法还提出了ProjBench基准,用于评估项目特定代码补全方法在真实世界项目上的性能。

关键设计:API用法示例的构建方式未知,语义描述的提取方法未知,知识库的组织形式未知,LLM的选择和训练方式未知,代码补全过程中如何有效利用检索到的API信息也未知。这些细节将直接影响方法的性能。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,该方法在ProjBench和CrossCodeEval基准上显著优于现有方法,代码精确匹配提高了22.72%,标识符精确匹配提高了18.31%。此外,将该方法与现有基线集成,代码匹配提高了47.80%,标识符匹配提高了35.55%。这些结果表明,该方法能够有效利用项目内部API信息,显著提升代码补全的性能。

🎯 应用场景

该研究成果可应用于智能IDE、代码自动生成工具等领域,提升开发效率和代码质量。通过更准确的代码补全,开发者可以更快地编写代码,减少错误,并更好地利用项目内部的API。未来,该方法可以扩展到支持更多编程语言和更复杂的API结构,进一步提升代码补全的智能化水平。

📄 摘要(原文)

Project-specific code completion is a critical task that leverages context from a project to generate accurate code. State-of-the-art methods use retrieval-augmented generation (RAG) with large language models (LLMs) and project information for code completion. However, they often struggle to incorporate internal API information, which is crucial for accuracy, especially when APIs are not explicitly imported in the file. To address this, we propose a method to infer internal API information without relying on imports. Our method extends the representation of APIs by constructing usage examples and semantic descriptions, building a knowledge base for LLMs to generate relevant completions. We also introduce ProjBench, a benchmark that avoids leaked imports and consists of large-scale real-world projects. Experiments on ProjBench and CrossCodeEval show that our approach significantly outperforms existing methods, improving code exact match by 22.72% and identifier exact match by 18.31%. Additionally, integrating our method with existing baselines boosts code match by 47.80% and identifier match by 35.55%.