当前位置: 首页 > ai >正文

[论文阅读] 人工智能 + 软件工程 | ReCode:解决LLM代码修复“贵又慢”!细粒度检索+真实基准让修复准确率飙升

ReCode:解决LLM代码修复“贵又慢”!细粒度检索+真实基准让修复准确率飙升

论文信息

  • 原标题:ReCode: Improving LLM-based Code Repair with Fine-Grained Retrieval-Augmented Generation
  • 主要作者:Yicong Zhao(复旦大学)、Shisong Chen(华东师范大学)、Jiacheng Zhang(复旦大学)、Zhixu Li*(中国人民大学,通讯作者)
  • 研究机构:复旦大学计算机科学与人工智能学院、华东师范大学上海人工智能教育研究院、中国人民大学信息学院&智能治理学院
  • APA引文格式:Zhao, Y., Chen, S., Zhang, J., & Li, Z. (2025). ReCode: Improving LLM-based Code Repair with Fine-Grained Retrieval-Augmented Generation. arXiv preprint arXiv:2509.02330.
  • 论文链接:https://arxiv.org/pdf/2509.02330

一段话总结

为解决现有基于LLM的代码修复方法“训练/推理成本高”“传统检索增强(RAG)质量低”“对分布外(OOD)缺陷适应性差”的痛点,研究者提出ReCode——一款融合“算法感知检索”(用LLM预测代码算法类型缩小检索范围)与“双视图编码”(分别处理文本描述和代码结构)的细粒度检索增强框架;同时构建真实代码基准RACodeBench(基于用户提交的错误-修复代码对)替代合成数据。实验表明,ReCode在RACodeBench及6个竞争性编程数据集(如AtCoder、CodeChef)上,相比best-of-N、self-repair等基线,不仅实现更高修复准确率(如GPT-4o-mini测试通过率达41.06%),还将推理成本降低3-4倍(如AtCoder达35%通过率仅需4次LLM调用)。

思维导图

在这里插入图片描述

研究背景

如果你用过GitHub Copilot这类AI编程工具,可能会惊叹LLM在生成代码时的“聪明”——但当代码出了bug(比如循环边界错、逻辑漏判),让LLM修复时,问题就暴露了:

首先,训练成本太高。要让LLM擅长修代码,要么用大量人工标注的“错误-修复”代码对训练(标注费贵到离谱),要么持续微调——但微调后模型可能“忘”了之前的技能(这叫“灾难性遗忘”),比如刚学好修Python bug,就不会修C++了。

其次,推理成本不低。现有修复方法要么生成多个候选代码选最优(比如best-of-N,要调用LLM8-32次),要么多轮迭代修(比如self-repair,先找错再改,调用次数更多),相当于“反复问AI同一个问题直到对”,又慢又费资源。

更头疼的是传统检索增强(RAG)不好用。为了让LLM“参考旧案例”,传统RAG会把“问题描述+错误代码”合并成一个向量检索——这就像“在图书馆找书只看封面”:比如要修“找数组最小正整数”的代码(错误是循环里的判断条件错),传统RAG可能没抓到“循环结构”这个关键,找回来的案例跟当前bug不匹配,反而帮倒忙。

最后,应对陌生bug很弱。如果遇到训练时没见过的缺陷(比如没学过的动态规划边界错),LLM就像“没见过这道题的学生”,只能瞎蒙,修复率骤降——这就是“分布外(OOD)缺陷”问题。

简单说,现有方法要么“贵得用不起”,要么“笨得不好用”,急需一个“又便宜又聪明”的方案。

在这里插入图片描述

创新点

ReCode的核心亮点就在于“针对性解决上述痛点”,有三个关键创新:

  1. 算法感知检索:先“分类”再找案例
    传统RAG是“全库乱找”,ReCode先用LLM分析输入代码的“算法类型”(比如是贪心、动态规划还是二分查找),甚至支持“多标签”(比如代码里既有图遍历又有贪心),然后只在对应“算法子库”里检索——相当于“先按学科找书架,再挑书”,大幅提升案例相关性。

  2. 双视图编码:分开处理“文字”和“代码”
    传统RAG把“问题描述(文字)”和“错误代码(代码)”揉成一个向量,导致代码的语法结构被忽略。ReCode用两个专用编码器:

    • 文本编码器(bge-m3):抓“问题要做什么”(比如“找最小正整数”);
    • 代码编码器(OASIS-code-1.3B):抓“代码结构错在哪”(比如“循环里num>0&num<minPos的判断错”);
      再融合两者特征——相当于“既看题目要求,又看代码细节”,检索精度翻倍。
  3. 真实基准RACodeBench:告别“假数据”
    之前的代码修复基准多是“人工造的bug”(比如故意改个变量名),跟真实开发场景差太远。RACodeBench直接用Codeforces用户提交的真实代码:每个案例都有“问题描述+错误代码+正确代码+测试用例+错误标注”,甚至标了“改了哪几行”(diff)——让评估结果更贴近真实使用场景。

  4. 准确率与效率双赢:不做“选择题”
    很多方法要么为了准确率牺牲效率(比如多轮迭代),要么为了效率放弃准确率(比如单轮生成)。ReCode通过“精准检索+少次调用”,做到“调用8次LLM的效果,比别人调用16次还好”,真正实现“又快又准”。

研究方法和思路、实验方法

一、ReCode框架工作流程(分6步)

  1. 输入分解:把用户查询拆成“自然语言问题描述”(比如“找数组最小正整数”)和“错误代码”(比如循环判断错的代码);
  2. 双视图编码
    • 文本编码器(bge-m3)处理问题描述,输出“语义向量”;
    • 代码编码器(OASIS-code-1.3B)处理错误代码,输出“结构向量”;
    • 融合两个向量,得到“细粒度特征向量”;
  3. 算法类型预测:用LLM分析错误代码,输出1个或多个算法标签(比如“贪心算法”);
  4. 定向检索:根据算法标签,在“算法子库”中找最匹配“细粒度特征向量”的案例(每个案例含“问题+错误代码+正确代码”);
  5. Prompt构建:把检索到的案例和用户输入拼接成Prompt(比如“参考这个贪心算法的修复案例,修下面的代码:XXX”);
  6. 生成修复代码:把Prompt输入LLM,生成满足所有测试用例的正确代码。

二、实验设计细节

1. 实验数据
数据类型具体内容
分布内数据集RACodeBench(基于Codeforces真实提交,含错误-修复对、测试用例、错误标注)
OOD数据集6个竞争性编程数据集:AtCoder(800题)、CodeChef(2.4k题)、HackerRank(720题)、HackerEarth(1k题)、GeeksforGeeks(680题)、Aizu(1.8k题)
2. 模型选择
模块模型名称作用
文本编码bge-m3处理问题描述,生成语义向量
代码编码OASIS-code-1.3B处理错误代码,生成结构向量
推理生成GPT-4o-mini、Gemini-1.5-Flash、Gemma-2-9B/27B、DeepSeek系列生成修复代码
3. 评估指标
  • 测试通过率:所有问题的“平均测试用例通过比例”(比如某问题有10个测试用例,最优候选过了8个,贡献0.8);
  • 严格准确率:“通过所有测试用例的问题比例”(只有候选过了所有测试用例,才算1分)。
4. 基线对比
  • best-of-N:生成N个候选代码,选最优(N=8/32,采样温度1.0保证多样性);
  • self-repair:多轮迭代(先找错再改,调用次数和ReCode一致)。

主要成果和贡献

一、核心实验结果(用表格更清晰)

1. 分布内性能(RACodeBench,N=8次LLM调用)
模型类型模型名称测试通过率(%)- best-of-N测试通过率(%)- self-repair测试通过率(%)- ReCode严格准确率(%)- ReCode
开源模型Gemma-2-9B23.3422.6726.0716.67
开源模型Gemma-2-27B24.9622.7429.8319.17
开源模型DeepSeek-Coder-V2-Instruct31.5433.0840.4728.75
闭源模型GPT-4o-mini31.0934.7941.0630.41
2. 推理成本对比(AtCoder数据集,GPT-4o-mini)
测试通过率目标(%)LLM调用次数 - best-of-NLLM调用次数 - self-repairLLM调用次数 - ReCode
35.011154
35.512155
36.016196
3. OOD性能(以GPT-4o-mini为例,N=32次调用)
OOD数据集测试通过率(%)- best-of-N测试通过率(%)- self-repair测试通过率(%)- ReCode
AtCoder33.234.537.8
CodeChef30.131.835.2
HackerRank32.533.936.7

二、研究贡献(3点核心价值)

  1. 方法创新:提出ReCode框架,首次将“算法感知检索”与“双视图编码”结合,解决传统RAG在代码修复中的缺陷,为LLM代码修复提供“低成本高准确率”的新范式;
  2. 数据创新:构建RACodeBench基准,填补“真实场景代码修复评估”的空白,让后续研究能更精准地验证方法有效性;
  3. 实践价值:实验证明ReCode在开源/闭源LLM上均有效,且推理成本低,可直接落地到真实开发工具(如IDE插件、AI编程助手)。

三、开源资源说明

  • 目前论文未公开ReCode框架的开源代码及RACodeBench完整数据集,但明确说明数据来源于Codeforces用户公开提交,可基于Codeforces API及论文描述的“半自动化标注流程”复现知识库与基准。

关键问题

1. ReCode是如何解决传统RAG“检索质量低”的核心问题的?

传统RAG的问题是“统一编码+全库检索”:把文字和代码揉成一个向量,忽略代码结构;且不区分算法类型,导致案例不匹配。ReCode用两点解决:一是“双视图编码”,分开处理文字(抓语义)和代码(抓结构),再融合细粒度特征;二是“算法感知检索”,先预测代码的算法类型,只在对应子库检索,从“乱找”变成“精准找”。

2. RACodeBench相比之前的合成基准,优势在哪里?

之前的合成基准是“人工造bug”(比如故意改变量名、删分号),和真实开发中的“逻辑错”(比如循环边界、动态规划状态转移错)差距大。RACodeBench的优势:① 数据来自真实用户提交,bug类型更贴近实际;② 每个案例含完整测试用例,能精准验证修复正确性;③ 有细粒度错误标注和代码diff,方便分析修复效果;④ 与检索知识库严格分区,避免数据污染。

3. ReCode为什么能在OOD场景(比如没见过的数据集)表现好?

因为ReCode依赖“算法类型”而非“具体数据分布”:比如在Codeforces上学了“贪心算法修循环错”,到AtCoder遇到同样算法类型的bug,即使数据集不同,也能通过“算法感知检索”找到匹配案例。而传统方法依赖训练时的静态数据,遇到OOD场景就“没见过”,修复率骤降。

4. ReCode的“算法感知检索”为什么要支持多标签?

因为真实代码往往融合多种算法:比如一道题既要“图遍历”找路径,又要“贪心算法”选最优路径。如果只标一个算法标签,会漏掉关键案例;多标签设计能覆盖这种复杂场景,让检索到的案例更全面,修复更准确。

5. ReCode如何平衡“修复准确率”和“推理成本”?

传统方法要么靠“多调用LLM”提准确率(比如best-of-N调用32次),要么靠“少调用”降成本(比如单轮调用)。ReCode的关键是“精准检索”:通过算法感知和双视图编码,让LLM“参考1个高质量案例,比参考10个低质量案例效果还好”——比如调用8次LLM的准确率,比best-of-N调用16次还高,实现“少调用、高准确”。

总结

ReCode针对现有LLM代码修复“高成本、低检索质量、OOD适应性差”的痛点,提出融合“算法感知检索”与“双视图编码”的细粒度检索增强框架,同时构建真实基准RACodeBench。实验表明,在RACodeBench及6个OOD竞争性编程数据集上,ReCode相比best-of-N、self-repair等基线,不仅显著提升修复准确率(开源/闭源LLM均适用),还将推理成本降低3-4倍。该研究为LLM代码修复提供了“低成本、高泛化、贴近真实场景”的新方案,其设计思路(算法感知、双视图编码)也为其他代码智能任务(如代码生成、错误检测)提供了参考,具有重要的理论与实践价值。

http://www.xdnf.cn/news/19741.html

相关文章:

  • 【序列晋升】27 Spring Cloud Sleuth给分布式系统装上透视镜
  • 彩笔运维勇闯机器学习--逻辑回归
  • JavaScript手录进阶01-跨域问题
  • Diamond基础3:在线逻辑分析仪Reveal的使用
  • 用AI做旅游攻略,真能比人肉整理靠谱?
  • iOS 上架 uni-app 流程全解析,从打包到发布的完整实践
  • LabVIEW软件全面解析:图形化编程的工业级应用指南
  • RL 大模型逆袭!搞定真实软件工程任务,成功率从 20% 飙到 39%,无需教师模型蒸馏
  • 如何将华为手机数据转移到OPPO手机
  • 2004-2023年各省生活垃圾无害化处理率数据(无缺失)
  • 07、上传jar包到 Linux 并启动项目
  • 9月3日星期三今日早报简报微语报早读
  • 深入解析Java Spliterator(Stream延迟、并行计算核心)
  • TensorFlow的Yes/No 关键词识别模型训练
  • LVGL9.3 vscode 模拟环境搭建
  • 多层环境室内定位系统综述总结
  • 如何获取easy-ui的表格的分页大小
  • VRRP协议
  • Deformable 3D Gaussians:把动态场景装进“可变形的静态世界”
  • 技术重构人力管理 —— 打造人力资源流程自动化、智能化专业服务方案
  • 解决git无法连接github
  • 打破信息洪流:微算法科技(NASDAQ:MLGO)推出一种移动互联网环境下数字媒体热点挖掘算法
  • 什么是量子计算?
  • HarmonyOS 声明式 UI 状态管理深度实践:从 @State 到持久化
  • STM32的时钟系统与时钟树的配置
  • 深兰科技AI问诊助手走访打浦桥街道社区卫生服务中心
  • 阅兵背后的科技:战场上的目标检测与无人机巡检
  • 刷新记录:TapData Oracle 日志同步性能达 80K TPS,重塑实时同步新标准
  • 腾讯云《意愿核身移动 H5》 接入完整示例
  • 【51单片机】【protues仿真】基于51单片机压力测量仪系统