[论文解读] Repository-Level Prompt Generation for Large Language Models of Code
本文提出Repo-Level Prompt Generator(RLPG),一种黑盒框架,通过使用可学习的提示提案从多个文件中选择相关上下文,为代码大语言模型生成仓库感知的提示。该方法在不微调模型的情况下,利用代码仓库的结构和语义上下文,在单行代码补全任务上相较Codex实现了36%的相对性能提升。
With the success of large language models (LLMs) of code and their use as code assistants (e.g. Codex used in GitHub Copilot), techniques for introducing domain-specific knowledge in the prompt design process become important. In this work, we propose a framework called Repo-Level Prompt Generator that learns to generate example-specific prompts using prompt proposals. The prompt proposals take context from the entire repository, thereby incorporating both the structure of the repository and the context from other relevant files (e.g. imports, parent class files). Our technique doesn't require any access to the weights of the LLM, making it applicable in cases where we only have black-box access to the LLM. We conduct experiments on the task of single-line code-autocompletion using code repositories taken from Google Code archives. We demonstrate that an oracle constructed from our prompt proposals gives a remarkably high relative improvement of 36% over Codex, showing the quality of these proposals. Further, we show that when we train a model to predict a prompt proposal, we can achieve significant performance gains over Codex and other baselines. We release our code, data, and trained checkpoints at: \url{https://github.com/shrivastavadisha/repo_level_prompt_generation}.
研究动机与目标
- 解决缺乏系统性方法将仓库级上下文整合到代码大语言模型提示中的问题。
- 在无需访问模型权重的情况下,实现有效且示例特定的提示生成,支持黑盒部署。
- 通过基于仓库结构和文件内容推导出的可解释、结构化的提示提案,将领域知识融入提示设计。
- 通过从仓库中导入的文件、父类和相关文件中选择相关上下文,提升代码自动补全性能。
- 为专有或特定领域的软件仓库提供可扩展的、无需微调的替代方案,以适应代码大语言模型。
提出的方法
- 该框架使用一组预定义的、人类可读的提示提案,从仓库中提取特定上下文,例如从导入文件中提取方法名和方法体,或从父文件中提取类定义。
- 训练一个神经网络提示提案分类器(PPC),基于仓库和目标位置信息,预测最有效的提示提案。
- 将选定的提示提案与默认上下文(例如目标补全位置之前的代码)结合,形成最终输入大语言模型的提示。
- 该方法在黑盒访问模式下运行,无需微调底层大语言模型,因此可适用于专有模型(如Codex)。
- 提示提案设计为可解释且基于代码语义,例如从导入语句中提取标识符,或从父类中提取方法签名。
- 该框架在Google代码归档库的仓库上进行了单行代码补全任务的评估,性能与Codex及基线方法进行对比。
实验结果
研究问题
- RQ1是否可以通过可学习的提示选择机制,在不微调大语言模型的前提下,利用仓库级上下文提升代码补全性能?
- RQ2与Codex的标准 few-shot 提示方法相比,黑盒、仓库感知的提示生成框架效果如何?
- RQ3捕捉来自多个文件的结构和语义上下文的提示提案,在多大程度上能提升代码补全的准确性?
- RQ4神经提示提案分类器是否能在多样化的代码库上泛化,并实现一致的性能提升?
- RQ5当无法使用完整仓库上下文时,该框架在上下文长度增加时的可扩展性如何?
主要发现
- 由提示提案构建的最优提示(oracle)相较Codex在代码补全准确率上实现了36%的相对提升,证明了所提上下文选择质量的优越性。
- 训练好的提示提案分类器(PPC)在单行代码补全任务上显著优于Codex及其他基线模型。
- 该框架在黑盒访问模式下表现良好,适用于专有大语言模型(如Codex),无需模型权重或微调。
- 即使上下文长度有限,RLPG仍优于标准提示方法,因其聚焦于语义相关的仓库级上下文,而非任意代码片段。
- 该方法在大型仓库中依然有效,数据集中70.22%的仓库超过32k tokens,凸显其在长上下文场景下的适用性。
- 初步结果表明,将多个提示提案组合扩展至框架中可能带来进一步性能提升,显示出未来增强的强劲潜力。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。