摘要
测试时的优化旨在通过额外的推理来改进生成的程序,但在产生初始候选代码后,这种优化的价值仍不明确。我们对七种模型和三个Python代码生成基准进行了单轮自我优化(Self-Refine)和自我调试(Self-Debug)的对照评估。对于每种模型和任务,这两种方法都会优化同一个初始候选代码,从而让我们能够在初始生成结果不变的情况下测量优化的效果。在21种模型-基准组合中,Self-Debug在16种情况下带来了积极的优化效果,而在剩下的5种情况下没有变化;而Self-Refine在16种组合中降低了程序的正确性,仅在4种情况下有所改进。将优化效果分解为修复错误和导致错误回归的部分可以澄清这种对比。在诊断性处理之后,Self-Debug保留的候选代码中有34.1%的最终测试失败问题仍未得到解决,但最初正确的候选代码中有99.95%仍然正确。由于几乎不存在错误回归的情况,诊断性失败后的修复操作直接带来了积极的优化效果。Self-Refine也能修复最初的错误,但其导致错误回归的情况是修复错误次数的三倍多,因此总体优化效果主要为负。资源分析表明,Self-Refine在使用更多令牌的同时总体上降低了程序的正确性,而Self-Debug在优化效果和开销之间取得了更好的平衡,尽管其每次额外处理的推理开销因模型和基准的不同而有所差异。这些结果表明,单轮优化并不一定是有益的,只有当预期的优化效果能够证明额外的计算和成本是合理的时,才应当采用这种方法。


