教导代码 LLM 在仓库级代码生成中使用自动补全工具
软件工程
2024-07-19 v3
摘要
代码大语言模型(LLM)在仓库级代码生成中面临局限性,原因是其缺乏对仓库级依赖(例如用户定义属性)的感知,从而导致诸如未定义变量和无成员等依赖错误。在本工作中,我们提出了 ToolGen,一种将自动补全工具集成到代码 LLM 生成过程中以解决这些依赖关系的方法。ToolGen 包含两个主要阶段:触发插入与模型微调(离线),以及工具集成代码生成(在线)。在离线阶段,ToolGen 使用特殊的标记 token 对给定代码语料库中的函数进行增强,指示触发自动补全工具的位置。然后使用这些增强后的函数及其相应的文档字符串来微调选定的代码 LLM。在在线阶段,ToolGen 使用微调后的 LLM 逐步预测 token,迭代生成函数。每当遇到标记 token 时,ToolGen 就会调用自动补全工具来建议代码补全,并选择最合适的一个。我们进行了全面的实验以评估 ToolGen 在仓库级代码生成中的有效性。为了便于评估,我们创建了一个包含 671 个真实代码仓库的基准,并引入了两个新的基于依赖的指标:依赖覆盖率和静态有效率。结果表明,ToolGen 在三个 LLM 中将依赖覆盖率显著提高了 31.4% 至 39.1%,将静态有效率提高了 44.9% 至 57.7%,同时在 BLEU-4、CodeBLEU、编辑相似度和精确匹配等广泛认可的相似度指标上保持了具有竞争力或改善的性能。在 CoderEval 数据集上,ToolGen 在 CodeT5 和 CodeLlama 的 Pass@1 上分别实现了 40.0% 和 25.0% 的提升。
引用
@article{arxiv.2401.06391,
title = {Teaching Code LLMs to Use Autocompletion Tools in Repository-Level Code Generation},
author = {Chong Wang and Jian Zhang and Yebo Feng and Tianlin Li and Weisong Sun and Yang Liu and Xin Peng},
journal= {arXiv preprint arXiv:2401.06391},
year = {2024}
}