论文
CARET:无需训练测试时存储库级代码完成的扩展
CARET: Training-Free Test-Time Scaling for Repository-Level Code Completion
摘要
检索增强生成 (RAG) 主导存储库级代码补全:它检索跨文件上下文 (R),然后解码一个贪婪补全 (G)。现有的工作主要集中在检索上并仅限于此。我们认为这两个阶段可以一起改进,特别是从测试时缩放中获益。我们提出了 CARET,一种无需训练方法。对于 R,CARET 使用其自身样本之间的一致性在检索上下文之间进行路由,当样本分散时级联到替代上下文。对于 G,它通过缓存的提示前缀对候选者进行采样,因此长检索的上下文被编码一次,而不是每个样本编码一次。然后,它通过反向上下文可能性选择最终的完成:正确的完成使光标后面的代码更有可能,因此同一模型通过预读来对自己的候选代码进行评分。在具有六种代码模型(1.1B 到 7B,四个系列)的 CrossCodeEval、RepoEval-Line 和 RepoEval-API 中,CARET 将所有 18 种组合的精确匹配比贪婪解码平均提高了 10.8 个点,比自一致性@10 平均提高了 5.3 个点。 token级别的计算量保持在一代的 1.45 倍左右(测量挂钟的 1.3-2.9 倍,随着生成器大小的增加而增长)。与单独改进检索相比,同时改进检索和生成可以产生更准确的代码,且预算接近单次传递。
