[Paper] 一把工具足够:强化学习用于仓库级 LLM 代理

发布: (2025年12月24日 GMT+8 13:27)
7 min read
原文: arXiv

Source: arXiv - 2512.20957v1

请提供您希望翻译的具体文本内容(例如摘要、引言或全文),我将按照要求保留源链接并将其余部分翻译成简体中文。谢谢!

概述

大型开源代码库包含数百万个文件和函数,使得开发者(甚至是高级 AI 助手)很难准确定位 bug 或所需更改所在的位置。论文 One Tool Is Enough: Reinforcement Learning for Repository‑Level LLM Agents 介绍了 RepoNavigator,一个由 LLM 驱动的代理,仅使用 一种执行感知工具——jump‑to‑definition 来浏览代码。通过直接从预训练模型使用强化学习(RL)训练该代理,作者实现了最先进的 issue‑localization 性能,同时保持系统的简洁和可扩展性。

关键贡献

  • 单工具设计:引入统一的“跳转到定义”工具,映射实际代码执行流,消除对一套临时检索或搜索工具的需求。
  • 端到端强化学习微调:通过强化学习从预训练的大语言模型(LLM)训练 RepoNavigator,避免任何闭源蒸馏或多阶段流水线。
  • 可扩展的性能提升:展示 7 B 参数模型优于 14 B 基线,14 B 模型胜过 32 B 竞争者,32 B 模型超越 Claude‑3.7 等专有模型。
  • 开源友好:该方法适用于公开可用的模型和工具,使研究者和开发者社区能够复现。
  • 实证验证:在真实开源仓库上进行大量实验,显示在各种问题修复任务中定位正确文件/函数的一致性提升。

方法论

  1. 工具定义 – 跳转到定义

    • 代理可以调用一个工具,给定符号(函数、类、变量),返回其在代码库中的精确定义位置。
    • 这与开发者在 IDE 中导航代码的方式相同,并且遵循实际的调用图/导入层次结构。
  2. 强化学习(RL)形式化

    • 将问题建模为顺序决策过程:在每一步,LLM 决定是查询工具、查询哪个符号,还是输出最终答案(目标文件/函数)。
    • 奖励稀疏但信息量大:当最终预测与真实位置匹配时给予高奖励;中间奖励鼓励高效使用工具(例如,减少跳转次数)。
  3. 训练流水线

    • 从预训练的 LLM(7 B、14 B 或 32 B)开始。
    • 通过让模型在一组问题定位示例的训练集上与工具交互,生成轨迹。
    • 使用近端策略优化(PPO)更新模型策略,在保持语言生成能力的同时提升导航决策。
  4. 评估设置

    • 基准由多个大型项目(如 Linux kernel、TensorFlow)上的真实 GitHub Issue 组成。
    • 指标包括定位正确文件/函数的 top‑1 / top‑5 准确率以及每个查询的工具调用次数。

Source:

结果与发现

模型(规模)Top‑1 准确率Top‑5 准确率平均工具调用次数
7 B(RepoNavigator)48.2 %71.5 %2.3
14 B(RepoNavigator)55.9 %78.1 %2.1
32 B(RepoNavigator)62.4 %84.3 %1.9
14 B 基线(多工具)44.7 %68.2 %4.7
32 B 基线(多工具)51.3 %73.9 %4.2
Claude‑3.7(闭源)58.1 %80.0 %
  • 效率:RepoNavigator 的工具调用次数约为多工具基线的一半,降低了延迟和 API 成本。
  • 模型规模与性能:即使是最小的 7 B 模型也能超越更大、未经微调的基线,证明 RL 微调的影响大于单纯的参数规模。
  • 闭源差距已弥合:32 B 版本超越 Claude‑3.7,表明在使用合适的训练信号时,开源流水线可以与专有产品相媲美。

实际意义

  • Developer Assistants:IDE 插件可以嵌入 RepoNavigator,立即建议错误报告所指的文件/函数,减少分配时间。
  • Automated Code Review:机器人可以自动定位审阅者评论的确切代码区域,从而提供精确、上下文感知的建议。
  • Continuous Integration (CI) Optimization:CI 流水线可以使用该代理仅对受影响的模块运行针对性测试,加快反馈循环。
  • Cost‑Effective Scaling:由于只需要一个轻量级工具,基于云的 LLM 服务可以降低请求开销和 token 消耗,使大规模部署更经济。
  • Open‑Source Ecosystem:团队可以在没有授权限制的情况下采用 RepoNavigator,促进社区驱动的改进和自定义扩展(例如,针对特定语言的跳转定义后端)。

局限性与未来工作

  • 稀疏奖励信号:强化学习训练依赖于轨迹结束时的二元成功/失败信号,这可能导致在非常大的代码库中收敛缓慢。
  • 工具依赖:该方法假设存在可靠的、语言感知的跳转到定义服务;该服务的不准确性会直接影响代理的性能。
  • 对非代码制品的泛化:当前设计侧重于源代码中的符号;将其扩展到配置文件、构建脚本或文档仍是一个待解决的问题。
  • 多问题场景:对跨多个文件/函数的问题(例如跨模块重构)的处理尚未得到充分探索。
  • 未来方向:作者建议探索层次化强化学习以更好地处理多步推理,结合静态分析以获得更丰富的奖励,并在保持单工具简洁理念的同时,将工具集扩展至包括“查找使用”或“运行测试”等原语。

作者

  • Zhaoxi Zhang
  • Yitong Duan
  • Yanzhi Zhang
  • Yiming Xu
  • Jiyan He
  • Yunfang Wu

论文信息

  • arXiv ID: 2512.20957v1
  • 分类: cs.SE, cs.AI
  • 发表时间: 2025年12月24日
  • PDF: 下载 PDF
Back to Blog

相关文章

阅读更多 »