最近开发的一些大型语言模型(Code LLMs)已经在代码库级别的代码数据(Repo-Code LLMs)上进行了预训练,使得这些模型能够识别代码库结构并利用跨文件信息进行代码补全。然而,在实际的开发场景中,简单地将整个代码库连接起来往往超出了这些Repo-Code LLMs的上下文窗口限制,导致性能显著下降。在本研究中,我们对六个Repo-Code LLMs进行了广泛的初步实验和分析。结果表明,保持文件的拓扑依赖关系并增加完成提示中的代码文件内容可以提高完成准确性;在所有相关文件中修剪特定函数的具体实现并不会显著降低完成的准确性。基于这些发现,我们提出了一种名为分层上下文修剪(HCP)的策略,以构建具有高信息代码内容的完成提示。HCP在函数级别上建模代码库,保持代码文件之间的拓扑依赖关系,同时删除大量无关的代码内容,从而显著减少了用于代码库级别完成的输入长度。我们在六个Repo-Code LLMs的实验中应用了HCP策略,结果表明我们提出的方法可以显著提高完成准确性,同时大大减少输入长度。我们的代码和数据可在https://github.com/Hambaobao/HCP-Coder上获得。
提问交流