[Paper] SweRank+: 多语言、多轮代码排序用于软件问题定位
Source: arXiv - 2512.20482v1
概览
SweRank+ 解决了处理大型多语言代码库时的一个痛点:将自然语言的 bug 报告或功能请求转化为需要修复的确切函数。通过将跨语言代码排序引擎(SweRankMulti)与迭代的“代理式”搜索循环(SweRankAgent)相结合,作者将问题定位的准确率提升到了远超当前最先进水平——尤其是在 Python 之外的语言上。
关键贡献
- SweRankMulti:一个两阶段排序管道(稠密检索器 + 基于 LLM 的列表式重排序器),在覆盖最流行编程语言的大规模多语言问题定位数据集上进行训练。
- SweRankAgent:一个具备代理功能的搜索框架,执行多轮推理,将中间候选项存入记忆缓冲区,并在多次迭代中细化搜索。
- 大规模多语言数据集:从真实世界的问题跟踪系统中策划,提供 10 多种语言(Python、Java、JavaScript、Go、C# 等)的高质量训练信号。
- 最先进的结果:单独使用 SweRankMulti 即在所有基准语言上超越先前的单遍基线;SweRankAgent 进一步提升 top‑k 准确率 3–7 %。
- 开源发布:代码、模型和数据集均公开可用,支持可复现性和下游工具的使用。
方法论
-
Embedding Retriever – 仓库中的每个函数都使用一种语言无关的代码编码器(在代码‑注释对上微调的 Transformer)进行编码。Bug 描述也以相同方式编码,随后通过快速的近似最近邻搜索返回前 N 个候选函数。
-
Listwise LLM Reranker – 将这 N 个候选函数连同原始问题文本一起输入大型语言模型(LLM),对整个列表进行联合打分,使模型能够考虑候选之间的交互(例如,“如果函数 A 相关,则函数 B 的相关性会降低”)。
-
Agentic Search Loop (SweRankAgent) – 系统不会在一次遍历后停止,而是保持一个 memory buffer,记录之前检查过的候选项。每一次迭代,代理执行以下操作:
- 使用包含缓冲区洞见的更新提示词(例如,“问题提到了 null pointer;优先考虑处理指针的函数”)查询检索器。
- 用 LLM 对新批次进行重新排序。
- 将得分最高的候选项更新到缓冲区。
循环运行固定的轮次数(通常为 3–5 轮)或直至收敛,实际上实现了粗到细的搜索。
所有组件在多语言数据集上端到端训练,检索器通过对比损失进行优化,重新排序器通过列表式交叉熵进行优化。
结果与发现
| 基准 | 语言 | Top‑1 Acc.(先前 SOTA) | Top‑1 Acc.(SweRankMulti) | Top‑1 Acc.(SweRankAgent) |
|---|---|---|---|---|
| Defects4J | Java | 58.2 % | 66.7 % | 71.3 % |
| BugsJS | JavaScript | 49.5 % | 57.9 % | 62.4 % |
| GoBugs | Go | 45.1 % | 53.2 % | 58.0 % |
| 多语言(10 种语言) | – | 52.3 %(平均) | 60.8 % | 65.5 % |
- 跨语言迁移:在合并数据集上训练可使低资源语言(如 Rust、Kotlin)的表现提升超过 10 %(绝对值)。
- 多轮增益:代理循环始终提升 3–7 % 的 top‑k 准确率,验证了迭代推理有助于解决模糊或噪声的错误描述。
- 效率:尽管增加了轮次,得益于快速的 ANN 检索器和批量 LLM 推理,单 GPU 下每次查询的平均延迟仍保持在 1 秒以下。
实际影响
- 更快的分流: 将 SweRank+ 集成到 CI/CD 流水线中,可在新问题出现时自动建议要检查的确切函数,显著减少手动搜索时间。
- 跨语言代码库: 使用多语言技术栈的公司(例如 Java、Go 和 Node.js 的微服务)可以使用单一模型,而无需维护针对特定语言的工具。
- 开发者助手: IDE 插件可以在你输入错误描述时展示排序后的函数候选项,将自然语言调试转化为引导式代码导航体验。
- 安全与合规: 当漏洞以高层描述报告时,SweRank+ 能快速定位跨语言受影响的代码路径,加速补丁部署。
限制与未来工作
- 对高质量问题数据的依赖:当问题描述极其简短或缺乏领域术语时,模型性能会下降。
- 对大型单体仓库的可扩展性:虽然 ANN 索引可良好扩展,但代理缓冲区的内存消耗随仓库规模增长;需要更智能的剪枝策略。
- LLM 成本:列表式重排序器依赖大型语言模型,在没有量化或蒸馏的情况下,可能对本地部署成本过高。
- 未来方向:作者计划探索 (1) 对专有代码库的少量示例适应,(2) 与静态分析工具更紧密的集成以丰富候选集,(3) 开源轻量级重排序器,以保留大部分准确性提升。
作者
- Revanth Gangi Reddy
- Ye Liu
- Wenting Zhao
- JaeHyeok Doo
- Tarun Suresh
- Daniel Lee
- Caiming Xiong
- Yingbo Zhou
- Semih Yavuz
- Shafiq Joty
论文信息
- arXiv ID: 2512.20482v1
- 分类: cs.SE, cs.AI
- 发表时间: 2025年12月23日
- PDF: Download PDF