Skip to main content
QUICK REVIEW

[论文解读] RAPGen: An Approach for Fixing Code Inefficiencies in Zero-Shot

Spandan Garg, Roshanak Zilouchian Moghaddam|arXiv (Cornell University)|Jun 29, 2023
Software System Performance and Reliability被引用 5
一句话总结

RAPGen 是一种零样本提示工程方法,通过从历史修复的知识库中检索性能错误修复指令,并利用这些指令生成针对大型语言模型(如 Codex)的有效提示,以建议代码优化。该方法在约 60% 的情况下达到开发人员级别的修复质量,并在约 39% 的情况下生成完全一致的修复,显著减少了对微调或基于规则的系统的需求。

ABSTRACT

Performance bugs are non-functional bugs that can even manifest in well-tested commercial products. Fixing these performance bugs is an important yet challenging problem. In this work, we address this challenge and present a new approach called Retrieval-Augmented Prompt Generation (RAPGen). Given a code snippet with a performance issue, RAPGen first retrieves a prompt instruction from a pre-constructed knowledge-base of previous performance bug fixes and then generates a prompt using the retrieved instruction. It then uses this prompt on a Large Language Model (such as Codex) in zero-shot to generate a fix. We compare our approach with the various prompt variations and state of the art methods in the task of performance bug fixing. Our evaluation shows that RAPGen can generate performance improvement suggestions equivalent or better than a developer in ~60% of the cases, getting ~42% of them verbatim, in an expert-verified dataset of past performance changes made by C# developers.

研究动机与目标

  • 为解决性能错误——这类非功能性问题难以检测且需要专家知识——提供一种无需依赖昂贵微调或基于规则系统的修复方法。
  • 通过利用提示工程而非训练专用模型,降低维护成本并提高性能错误修复工具的泛化能力。
  • 通过构建过去修复模式的知识库,利用预训练的大规模语言模型实现零样本、可扩展且可扩展的性能修复生成。
  • 通过检索并重用历史性能错误修复中的有效指令模板,提升修复质量并减少对手动提示编写的依赖。

提出的方法

  • RAPGen 构建一个过去性能错误修复的知识库,提取出存在错误的 API 使用方式及其对应的自然语言修复指令。
  • 给定一个存在错误的代码片段以及具体存在低效问题的代码行,RAPGen 使用语义相似度从知识库中检索最相关的修复指令。
  • 通过将错误代码方法、检索到的指令作为注释,以及方法签名组合,构建一个提示,以引导 LLM 生成正确的修复。
  • 随后在零样本设置下将该提示输入预训练的 LLM(如 Codex),以生成优化后的代码版本。
  • 该方法避免了微调,而是依赖于检索增强的提示生成,以动态适应新的性能问题。
  • 该方法在由开发人员验证的 C# 性能错误修复数据集上进行评估,将 RAPGen 的输出与人工编写的修复进行比较。

实验结果

研究问题

  • RQ1在零样本设置下,检索增强的提示生成是否能提高 LLM 生成的性能错误修复的准确性和相关性?
  • RQ2RAPGen 在生成正确且高效的代码修复方面,与 DeepDev-PERF 等最先进模型相比表现如何?
  • RQ3在不进行微调的情况下,过去修复指令的知识库在多大程度上能提升提示质量和修复效果?
  • RQ4在提示中包含具体存在错误的代码行,是否能比仅提供完整方法的方法生成更优的修复建议?

主要发现

  • 在专家验证的 C# 性能更改数据集中,RAPGen 生成的修复在约 60% 的情况下与开发人员修复等效或更优。
  • 在约 39% 的情况下,RAPGen 生成的修复与开发人员修复完全一致,表明其与人类意图高度对齐。
  • 该方法在生成正确单方法性能修复方面优于 DeepDev-PERF 和其他基线模型,尤其在零样本场景下表现更优。
  • 将特定修复指令检索并注入提示中,相比通用或手动编写的提示,显著提升了修复质量。
  • RAPGen 的零样本设计消除了对模型微调的需求,降低了维护开销,使其在多种语言和错误类型间具有可扩展性。
  • 该方法表明,有效的提示工程可以与端到端微调模型相媲美甚至超越,特别是在基于过去修复的精选知识库引导下。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。