论文

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 倍,随着生成器大小的增加而增长)。与单独改进检索相比,同时改进检索和生成可以产生更准确的代码,且预算接近单次传递。

CARET:无需训练测试时存储库级代码完成的扩展的原论文方法或结果图
图 3:Caret 概述,分两个阶段。 (a) 检索和路由 (R):组装两个基本上下文并路由到样本更一致的池,仅当主协议一致 $a<\tau$ 时才咨询替代方案。 (b) 生成 (G) 包括采样和选择:缓存感知采样对长前缀进行一次编码,并对短延续进行解码,RCV 选择器选择最后一行——如果一致达到 $\theta$,则发出模态候选,否则根据截断上下文的反向上下文可能性对不同候选进行评分,并返回投票混合的 argmax。虚线路径是节省成本的捷径;相同的小模型样本和分数。