PaT:试错后规划,实现高效的测试时代码生成

arXiv cs.CL 论文

摘要

本文介绍了 PaT(试错后规划),这是一种用于代码生成的自适应测试时计算策略,在保持与更大模型相当的性能的同时,将推理成本降低了约 69%。

arXiv:2605.07248v1 公告类型:新论文 摘要:除了训练时优化之外,扩展测试时计算已成为提升大语言模型(LLMs)推理能力的关键范式。然而,大多数现有方法采用僵化的“试错前规划”(PbT)策略,即使对于可直接解决的问题也会产生规划开销,从而低效地分配测试时计算资源。我们提出了“试错后规划”(PaT),这是一种用于代码生成的自适应策略,仅在验证失败时才调用规划器。这种自适应策略自然地支持异构模型配置:一个成本效益高的模型处理生成尝试,而一个强大的模型则保留用于针对性的规划干预。经验表明,在多个基准测试和模型系列中,我们的方法显著推进了成本-性能帕累托前沿。值得注意的是,我们的异构配置实现了与大型同质模型相当的性能,同时将推理成本降低了约 69%。
查看原文
查看缓存全文

缓存时间: 2026/05/11 06:56

# PaT:规划后置试验以实现高效的测试时代码生成

来源: https://arxiv.org/html/2605.07248

Youngsik Yoon$^1$, Sungjae Lee$^1$, Seockbean Song$^2$, Siwei Wang$^3$, Wei Chen$^3$, Jungseul Ok$^{1,2}$

$^1$韩国浦项工科大学计算机科学与工程系  
$^2$韩国浦项工科大学人工智能研究生院  
$^3$微软亚洲研究院,中国北京

{ysyoon97, sungjaelee25, shinebobo, jungseul.ok}@postech.ac.kr, {siweiwang, weic}@microsoft.com

###### 摘要

除了训练时优化之外,扩展测试时计算已成为扩展大语言模型(LLMs)推理能力的关键范式。然而,大多数现有方法采用僵化的“先规划后试验”(Planning-before-Trial, PbT)策略,即使对于可以直接解决的问题,也会因产生规划开销而导致测试时计算资源分配低效。我们提出了“先试验后规划”(Planning-after-Trial, PaT),这是一种用于代码生成的自适应策略,仅在验证失败时调用规划器。这种自适应策略自然支持异构模型配置:一个成本效益高的模型处理生成尝试,而一个强大的模型保留用于针对性的规划干预。实证研究表明,在多个基准测试和模型家族中,我们的方法显著推进了成本-性能帕累托前沿。值得注意的是,我们的异构配置实现了与大尺寸同构模型相当的性能,同时将推理成本降低了约 69%。

PaT:规划后置试验以实现高效的测试时代码生成

Youngsik Yoon$^1$, Sungjae Lee$^1$, Seockbean Song$^2$, Siwei Wang$^3$, Wei Chen$^3$, Jungseul Ok$^{1,2}$††thanks:Corresponding author.

$^1$韩国浦项工科大学计算机科学与工程系  
$^2$韩国浦项工科大学人工智能研究生院  
$^3$微软亚洲研究院,中国北京

{ysyoon97, sungjaelee25, shinebobo, jungseul.ok}@postech.ac.kr, {siweiwang, weic}@microsoft.com

参见图注

**图 1**:不同模型规模下的成本($\downarrow$)- Pass@1($\uparrow$)权衡。我们绘制了基础基准测试(HumanEval Chen et al. (2021) (https://arxiv.org/html/2605.07248#bib.bib3), MBPP Austin et al. (2021) (https://arxiv.org/html/2605.07248#bib.bib4) 及其 EvalPlus Liu et al. (2023) (https://arxiv.org/html/2605.07248#bib.bib19) 变体)的平均 Pass@1 相对于相对推理成本的关系。PaT 在不同模型规模(Qwen3 4B, 8B, 14B 和 32B)下一致地推进帕累托前沿。详细结果见第 4.1.1 节 (https://arxiv.org/html/2605.07248#S4.SS1.SSS1) 和表 1 (https://arxiv.org/html/2605.07248#S4.T1)。

参见图注

**图 2**:与现有方法及 PaT(我们的方法)的比较。问题按难度分组(简单、中等和困难)。方框表示关键组件:生成器(创建代码)、规划器(分解问题)和执行器(验证解决方案)。(a) 标准方法:直接生成并执行;适用于简单问题,但在较难问题上经常失败。(b) FunCoder (PbT):总是先规划,因此即使不需要也要支付规划成本。(c) PaT(我们的方法):先进行试验,仅在失败时规划;廉价地解决简单问题,自适应地解决困难问题。

## 1 引言

大型语言模型(LLMs)在代码生成方面取得了显著成功,这得益于模型和数据规模的扩大 (Chen et al., 2021 (https://arxiv.org/html/2605.07248#bib.bib3); Liu et al., 2022 (https://arxiv.org/html/2605.07248#bib.bib22); OpenAI, 2023 (https://arxiv.org/html/2605.07248#bib.bib23))。除了规模扩展外,传统方法侧重于训练时策略,如监督微调(SFT)(Rozire et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib46); Luo et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib47)) 和基于人类反馈的强化学习(RLHF)(Ouyang et al., 2022 (https://arxiv.org/html/2605.07248#bib.bib45))。作为对这些努力的补充,最近的研究通过扩展测试时计算来处理复杂的算法逻辑 (Wei et al., 2022 (https://arxiv.org/html/2605.07248#bib.bib10); Yao et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib11); Snel et al., 2025 (https://arxiv.org/html/2605.07248#bib.bib33))。特别是,通过模拟人类编码行为,将复杂问题分解为可管理的子问题 (Chen et al., 2024a (https://arxiv.org/html/2605.07248#bib.bib1); Lee et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib40)),而不是直接生成解决方案,这一领域取得了进展。

然而,现有的测试时扩展代码生成方法往往会产生高昂的推理成本。这主要是因为它们严重依赖显式规划模块 (Chen et al., 2024a (https://arxiv.org/html/2605.07248#bib.bib1); Lee et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib40)) 或迭代修复和调试循环 (Shin et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib27); Zhong et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib2)),这些都会消耗大量计算资源。如图 1 (https://arxiv.org/html/2605.07248#S0.F1) 所示,以前的最先进方法如 FunCoder (Chen et al., 2024a (https://arxiv.org/html/2605.07248#bib.bib1)) 消耗过多的测试时资源,通常使得使用该小模型(Qwen3-4B)比使用更大模型(Qwen3-32B)的标准推理更昂贵,即使性能更差。这表明以前方法在成本-性能比方面表现不如标准缩放。

这种低效率源于忽视了工作负载的内在难度分布。如图 1 (https://arxiv.org/html/2605.07248#S0.F1) 所示,小模型(Qwen3-4B)使用标准推理已经实现了 76% 的 Pass@1,表明相当一部分任务可以在没有复杂干预的情况下解决。只有少数困难实例真正需要昂贵的规划。尽管如此,许多先前的方法 (Chen et al., 2024a (https://arxiv.org/html/2605.07248#bib.bib1); Lee et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib40); Jiang et al., 2024b (https://arxiv.org/html/2605.07248#bib.bib26)) 遵循僵化的“先规划后试验”(PbT)策略,通过不加区分地将昂贵的规划应用于这些易解问题来浪费资源。

为了解决这个问题,我们引入了“先试验后规划”(PaT),这是一种逆转 PbT 的自适应方法。与对每个问题强制执行规划的 PbT 不同,PaT 首先进行标准推理,并利用执行反馈来验证该解决方案。如图 2 (https://arxiv.org/html/2605.07248#S0.F2) 所示,昂贵的分解仅在初始尝试失败时触发。通过严格将规划限制在明显需要它的问题上,PaT 将计算资源精确地集中在困难实例上,同时保持简单实例的低成本。因此,PaT 显著降低了平均推理成本并提高了性能,从而如图 1 (https://arxiv.org/html/2605.07248#S0.F1) 所示推进了成本-性能帕累托前沿。

PaT 的效率在异构模型配置中得到了进一步放大。这使得战略性的分工成为可能,其中成本效益高的模型被分配到高吞吐量的“生成器”角色,而强大的模型被分配到低频率的“规划器”角色。这种分工反映了这样的直觉:需要更复杂推理(例如,问题分解)的规划最好由更强的模型处理,而生成的分解子任务通常可以由较小的模型熟练实现。

我们在不同的模型家族和全面的基准测试套件中实证验证了我们的主张。我们的结果首先确立了 PaT 始终优于最先进 PbT 基线 FunCoder (Chen et al., 2024a (https://arxiv.org/html/2605.07248#bib.bib1)),在所有模型规模下实现更高性能,同时平均仅使用 60% 的推理成本。此外,我们表明异构模型配置进一步提高了这种效率。例如,由强大规划器指导的小生成器模型实现了具有竞争力的性能,与同构设置中的较大模型差距 <1%,而成本仅为 31%。这些发现证实,PaT 的自适应策略建立了新的、更优越的成本-性能前沿。

总而言之,我们的工作表明扩展测试时计算无需均匀进行,证明可以消除不必要的开销,同时保持甚至提高性能。我们的贡献总结如下:

-   我们提出了 Planning-after-Trial (PaT),一种自适应策略,仅在验证失败时调用规划以避免不必要的开销。
-   我们将 PaT 与异构模型配置相结合,结合小模型进行生成和大模型进行规划以最大化效率。
-   我们提供了跨模型家族和基准测试的综合评估,表明我们的方法一致地推进了成本-性能帕累托前沿。

## 2 相关工作

##### 使用 LLMs 进行代码生成。

为了推进代码生成,研究优先考虑通过后训练 (Dubey et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib20); Zhu et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib21)) 和自我改进框架如 rStar-Coder (Liu et al., 2025 (https://arxiv.org/html/2605.07248#bib.bib42))、SPIN (Chen et al., 2024b (https://arxiv.org/html/2605.07248#bib.bib44)) 和 SCoRE (Kumar et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib43)) 来增强内在能力。与此同时,鉴于给定模型,显著的关注点转向了扩展测试时推理和计算。关键方法利用少样本提示 (Brown et al., 2020 (https://arxiv.org/html/2605.07248#bib.bib17)) 和多样性采样 (Chen et al., 2021 (https://arxiv.org/html/2605.07248#bib.bib3)),通常通过测试驱动验证 (Chen et al., 2022a (https://arxiv.org/html/2605.07248#bib.bib6); Shin et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib27))、迭代精炼 (Wang et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib36); Zhang et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib37); Zhong et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib2)) 或从外部库检索 (Liu et al., 2022 (https://arxiv.org/html/2605.07248#bib.bib22); Zhang et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib30)) 进行细化。为了应对更高的复杂性,最近的系统进一步纳入了层次分解 (Chen et al., 2024a (https://arxiv.org/html/2605.07248#bib.bib1); Lee et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib40)) 和自然语言规划 (Wang et al., 2025a (https://arxiv.org/html/2605.07248#bib.bib35))。虽然这些方法提高了鲁棒性,但它们通常在所有问题上统一应用复杂的干预,从而为简单案例产生不必要的开销。值得注意的是,AdaCoder (Zhu et al., 2025 (https://arxiv.org/html/2605.07248#bib.bib34)) 动态选择精炼策略,但仍依赖于迭代修复而不是结构分解。相比之下,PaT 优化测试时计算,将复杂干预严格保留给通过执行反馈作为精确触发器确认的失败案例。

##### 分解与结构化推理。

为了应对直接生成无法解决的复杂问题,分治策略已从思维链 (Chain-of-Thought) (Wei et al., 2022 (https://arxiv.org/html/2605.07248#bib.bib10)) 和思维树 (Tree-of-Thoughts) (Yao et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib11)) 中的隐式推理步骤演变为显式规划范式。这种演变涵盖了不同领域,从最少到最多提示 (Least-to-Most prompting) (Zhou et al., 2023 (https://arxiv.org/html/2605.07248#bib.bib25)) 中的顺序求解和带有程序思维 (Program of Thoughts) (Chen et al., 2022b (https://arxiv.org/html/2605.07248#bib.bib9)) 的数学推理,到使用模型社会解决复杂任务 (Juneja et al., 2024 (https://arxiv.org/html/2605.07248#bib.bib31))。在代码领域,Self-Plan (Jiang et al., 2024b (https://arxiv.org/html/2605.07248#bib.bib26)) 和 FunCoder (Chen et al., 2024a (https://arxiv.org/html/2605.07248#bib.bib1)) 等结构化管道在实现之前明确分解问题。然而,这些方法主要遵循僵化的先规划后试验(PbT)策略,在执行之前无条件调用规划。虽然最近的工作试图通过学习调用规划的自适应策略来缓解这种低效率 (Paglieri et al., 2025 (https://arxiv.org/html/2605.07248#bib.bib32)),但此类方法引入了额外的训练复杂性和辅助模型。相比之下,PaT 提供了一种更简单、无需学习的替代方案:它利用明确的执行信号作为反应式触发器,避免了 PbT 的普遍成本和训练单独策略模型的开销。

## 3 PaT:试验后规划

##### 问题形式化。

我们将一个代码生成实例建模为一个规范 $x$(例如,自然语言描述)并寻求满足 $x$ 的程序 $\mathcal{F}$。令 $M_G$ 表示生成器模型,$M_P$ 表示规划器模型。对于任何规范 $x$,生成器 $M_G$ 产生一个直接候选实现,记为 $\hat{f}$。规划器 $M_P$ 在调用时,产生一个分解计划,包含一个新的顶层实现 $\hat{f}$ 和一组子问题规范 $\{x_i\}$。最终程序 $\mathcal{F}$ 由 $\text{Compose}$ 构建,该函数将实现 $\hat{f}$ 与一组经过验证的辅助函数 $H$ 合并。为了验证,我们构造一个测试集 $\mathcal{T}(x) = \{(\text{in}_j, \text{out}_j)\}_{j=1}^t$ 并在沙箱 Python 运行时中执行程序。我们使用以下公式评估 $\mathcal{F}$:

$$
\textsc{Evaluate}(\mathcal{F}, \mathcal{T}(x)) = \sum_{j=1}^{t} \mathbf{1}[\mathcal{F}(\text{in}_j) = \text{out}_j], \quad (1)
$$

即通过的测试数量。

**算法 1** 试验后规划 (PaT)

1: 输入:问题 $x$,辅助函数集 $H$,  
2: 生成器 $M_G$, 规划器 $M_P$  
3: 输出:生成的程序 $\mathcal{F}$  
4: PaT:  
5: $\quad \hat{f} \leftarrow M_G(x; H)$ \triangleright Best-of-$N$ 试验  
6: $\quad \mathcal{T}(x) \leftarrow \textsc{GenerateTests}(x)$  
7: $\quad p \leftarrow \textsc{Evaluate}(\textsc{Compose}(\hat{f}, H), \mathcal{T}(x))$  
8: $\quad$ **if** $p = |\mathcal{T}(x)|$ **then**  
9: $\quad \quad \mathcal{F} \leftarrow \textsc{Compose}(\hat{f}, H)$  
10: $\quad \quad$ **return** $\mathcal{F}$ \triangleright 试验成功  
11: $\quad$ **endif**  
12: **while** True **do** \triangleright 直到成功或停滞  
13: $\quad \hat{f}_{\text{prev}}, p_{\text{prev}} \leftarrow \hat{f}, p$  
14: $\quad \hat{f}, \{x_i\} \leftarrow M_P(x; H)$ \triangleright 规划器被调用  
15: $\quad$ **foreach** $x_i$ **not** implemented in $H$ **do**  
16: $\quad \quad \hat{f}_i \leftarrow \textsc{PaT}(x_i, H, M_G, M_P)$  
17: $\quad \quad H \leftarrow H \cup \{\hat{f}_i\}$  
18: $\quad$ **endfor**  
19: $\quad p \leftarrow \textsc{Evaluate}(\textsc{Compose}(\hat{f}, H), \mathcal{T}(x))$  
20: $\quad$ **if** $p = |\mathcal{T}(x)|$ **then** \triangleright 最终成功  
21: $\quad \quad$ **return** $\textsc{Compose}(\hat{f}, H)$  
22: $\quad$ **endif**  
23: $\quad$ **if** $p \leq p_{\text{prev}}$

相似文章

生成式规划模型的高效测试时推理

arXiv cs.AI

本文介绍了OCLGen,一种计算高效的测试时搜索算法,它将生成式规划模型与经典的开闭列表框架相结合,提高了组合规划领域的解质量。

LoopCoder-v2:仅一次循环实现高效的测试时计算扩展

Hugging Face Daily Papers

LoopCoder-v2 提出了并行循环变换器(Parallel Loop Transformers,PLT),用于在代码生成中实现高效的测试时计算扩展,证明两次循环能带来显著增益,而更多循环则导致收益递减和位置错位成本。

测试时个性化:针对缩放失败的一种诊断框架与概率修正方法

arXiv cs.LG

本文提出了测试时个性化(TTP),这是一种通过候选采样和基于奖励的选择来扩展推理时计算,从而提升大语言模型(LLM)个性化能力的框架。该研究诊断了标准奖励模型中的失效模式,并提出了一种概率个性化奖励模型以缓解这些问题。

为代理式编码扩展测试时计算

Hugging Face Daily Papers

一种面向代理式编码的测试时扩展框架,可将 rollout 轨迹压缩为结构化摘要,并通过递归投票/PDR 将 Claude-4.5-Opus 在 SWE-Bench Verified 上的成绩提升至 77.6%。