随着大型语言模型(LLMs)在编码方面的不断改进,用于评估其性能的基准测试逐渐变得不那么有用。这是因为即使许多 LLMs 在这些基准测试中获得了相似的高分,但要理解在特定的软件开发项目和企业中应该使用哪些模型仍然很困难。耶鲁大学和清华大学的一篇新论文提出了一种新颖的方法来测试模型解决“自调用代码生成”问题的能力,这些问题需要推理、生成代码并在解决问题时重用现有代码。# 自调用代码生成用于评估 LLMs 编码能力的两个流行基准测试是 HumanEval 和 MBPP(主要是基本 Python 问题)。这些是手工制作的问题数据集,要求模型为简单任务编写代码。然而,这些基准测试仅涵盖了软件开发人员在现实世界中面临的挑战的一个子集。在实际场景中,软件开发人员不仅仅是编写新代码 - 他们还必须理解和重用现有代码,并创建可重用的组件来解决复杂问题。“理解并随后利用自己生成的代码的能力,即自调用代码生成,对于 LLMs 利用其推理能力进行代码生成至关重要,而当前的基准测试未能捕捉到这一点,”研究人员写道。为了测试 LLMs 在自调用代码生成方面的能力,研究人员创建了两个新的基准测试,HumanEval Pro 和 MBPP Pro,它们扩展了现有的数据集。HumanEval Pro 和 MBPP Pro 中的每个问题都基于原始数据集中的现有示例构建,并引入了需要模型解决基本问题并调用解决方案来解决更复杂问题的其他元素。# LLMs 在自调用代码生成方面表现不佳研究人员在 20 多个开放和私有模型上测试了 HumanEval Pro 和 MBPP Pro,包括 GPT-4o、OpenAI o1-mini、Claude 3.5 Sonnet,以及 Qwen、DeepSeek 和 Codestral 系列。他们的发现显示了传统编码基准测试和自调用代码生成任务之间的巨大差距。“虽然前沿的 LLMs 在生成单个代码片段方面表现出色,但它们往往难以有效地利用自己生成的代码来解决更复杂的问题,”研究人员写道。例如,在单次生成(pass@1)时,o1-mini 在 HumanEval 上的准确率达到 96.2%,但在 HumanEval Pro 上仅为 76.2%。另一个有趣的发现是,虽然指令微调在简单编码任务上提供了显著的改进,但在自调用代码生成方面的回报却逐渐减少。研究人员指出,“当前基于指令的微调方法对于更复杂的自调用代码生成任务不够有效,”这表明我们需要重新思考如何训练基础模型进行编码和推理任务。为了帮助推进自调用代码生成的研究,研究人员提出了一种技术,可以自动将现有的编码基准测试重新用于自调用代码生成。该方法使用前沿的 LLMs 根据原始问题生成自调用问题。然后,他们生成候选解决方案,并通过执行代码并在其上运行测试用例来验证其正确性。该管道最大限度地减少了手动代码审查的需求,有助于以更少的努力生成更多的示例。# 复杂的局面这一新的基准测试家族出现之际,旧的编码基准测试正迅速被前沿模型征服。当前的前沿模型,如 GPT-4o、o1 和 Claude 3.5 Sonnet,在 HumanEval 和 MBPP 以及它们的更高级版本 HumanEval+和 MBPP+上已经取得了非常高的分数。同时,还有更复杂的基准测试,如 SWE-Bench,它评估模型在端到端软件工程任务中的能力,这些任务需要广泛的技能,如使用外部库和文件,以及管理 DevOps 工具。SWE-Bench 是一个非常困难的基准测试,即使是最先进的模型也表现出适度的性能。例如,OpenAI o1 在 SWE-Bench Verified 上表现不一致。自调用代码生成介于简单基准测试和 SWE-Bench 之间。它有助于评估一种非常特定类型的推理能力:在模块内使用现有代码来解决复杂问题。自调用代码基准测试可以证明是在现实世界中非常实用的代理,用于评估 LLMs 的有用性,在现实世界中,人类程序员处于控制之中,AI 副驾驶帮助他们在软件开发过程中完成特定的编码任务。“HumanEval Pro 和 MBPP Pro 旨在成为代码相关评估的有价值的基准,并通过揭示当前模型的缺点和鼓励培训方法的创新,激发未来 LLM 的发展,”研究人员写道。