摘要
本文重点讨论软件开发中的问题定位问题。
问题本地化是指以自然语言编写的错误报告为线索,识别代码库中需要修复的代码的过程。
对于大型代码库来说,这一过程既耗时又耗力,而且会大大降低开发效率。
近年来,LLM 在代码生成和测试生成方面取得了成功,LLM 代理与代码库搜索工具的结合有望实现自动化。
然而,这需要一种被称为 "版本库深度搜索 "的复杂搜索,它要求 LLM 具备多阶段推理和高级工具调用能力。
现有的 LLM 面临着工具调用错误和推理不一致导致的不准确问题。
因此,作者提出了一种名为 ToolTrain 的新工具集成学习框架,它能让 LLM 在有效利用工具的同时探索资源库。
建议的方法
拟议的 ToolTrain 方法包括两个阶段的学习过程。
第一阶段是 “拒绝采样监督微调”。
在这一阶段,只选择 LLM 使用工具生成的、到达正确代码点的高质量轨迹作为训练数据。
通过这种方式,模型将学习资源库搜索任务的基本格式以及如何调用工具。
第二阶段是工具集成强化学习。
在这一阶段,LLM 会进行试错搜索,并将搜索结果作为奖励信号。奖励被计算为是否找到正确代码段的评估指标,以及代码段的排序是否恰当。
这样,模型就能避免错误的工具调用,并更有效、更有策略地进行探索。
此外,作者还设计了一个名为 "RepoSearcher "的轻量级探索代理,它提供了一套工具(如文件结构检索、函数搜索、类搜索)。
这种设计使 LLMs 能够避免冗余搜索,并在逐步推理的同时实现高精度定位。
实验
为了验证所提方法的有效性,作者使用基于真实 GitHub 问题的评估数据集 SWE-Bench-Verified 进行了实验。
作为基准,使用 Recall@k、MAP、MRR 和 nDCG@5 等多维指标评估了文件和函数级别的问题定位精度。
比较对象包括现有框架(如 Agentless、LocAgent 和 CoSIL)以及商业模型(如 GPT-4o 和 Claude-3.7)。
结果表明,在 ToolTrain 上训练的模型始终比类似规模的 LLM 显示出更高的准确性,并且优于 Claude-3.7,尤其是在函数级定位方面。
ToolTrain-7B 模型也比其他使用 32B 规模模型的框架表现出更高的准确性,这表明即使使用小规模模型,有效的强化学习也有助于提高性能。
此外,研究还证实,定位精度的提高也与问题解决(错误修复成功率)的提高直接相关。特别是,当与 関数レベルRecall@5で68.55を達成し 和补丁生成模型相结合时,ToolTrain-32B 的修复成功率最高,达到 31.6%。
这些结果表明,ToolTrain 是显著提高 LLM 资源库探索能力的有效方法。