← 最新论文
💻 computer science

REFINE: A Multi-Agent LLM Approach for Evidence-Guided Code Refactoring

本文介绍了 REFINE,这是一个具备证据感知能力的多智能体框架,它利用静态分析和大型语言模型来生成更安全、更有效的 Java 代码重构候选方案,通过显著减少代码异味并最大限度地减少意外的行为变化来实现,尽管它强调在采用之前人工审查仍然至关重要。

原作者: Muhammad Waseem, Aakash Ahmad, Pekka Abrahamsson

发布于 2026-08-26
📖 1 分钟阅读☕ 轻松阅读

原作者: Muhammad Waseem, Aakash Ahmad, Pekka Abrahamsson

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

技术摘要:REFINE —— 一种用于证据引导的代码重构的多智能体 LLM 方法

问题陈述

尽管大语言模型(LLMs)在代码生成和转换方面展现出强大的能力,但其在软件重构中的应用仍面临显著挑战。有效的重构不仅需要修改代码以减少质量问题(代码异味),还需要确保这些改动不会引入新的缺陷、改变外部行为或移除关键的结构元素(例如:公共 API、断言)。

目前的 LLM 辅助重构方法通常缺乏严格的验证,导致了诸如幻觉建议、不一致的转换以及移除行为相关代码结构等风险。因此,需要一种系统化的方法来:

  1. 利用来自静态分析的证据来引导 LLMs。
  2. 通过编排多智能体工作流来进行规划、生成和验证改动。
  3. 提供关于改动了什么、剩余风险是什么,以及输出是一个可行的重构候选方案还是一个被自动接受的解决方案的可追溯证据。

方法论:REFINE 工作流

作者引入了 REFINE(具有证据感知流的集成智能执行重构,Refactoring with Evidence-aware Flow for Integrated ageNtic Execution),这是一个工具无关、具备证据感知的多智能体框架,旨在进行 Java 文件级的重构。该系统是一个研究原型,通过 Next.js 界面、Java Spring Boot 后端(用于通过 PMD 7.x 进行静态分析)以及 Python 智能体服务(使用 LangGraph v1.1 进行编排)实现。

该工作流通过三个主要阶段运行:

1. 任务特征化

  • 输入: 来自开源项目的单个 Java 文件。
  • 证据收集: 静态分析(PMD)识别文件级的代码异味和规则级证据。
  • 上下文构建: 系统提取公共 API 签名、工作区上下文,并对检测到的异味进行优先级排序,从而形成一个受限的重构任务。

2. 重构编排

工作流协调了十一个不同的角色(智能体)来管理整个过程:

  • 规划智能体 (Planning Agent): 将确定性的基于规则的引导与可选的 LLM 精炼相结合,创建面向异味的重构计划。
  • 重构智能体 (Refactoring Agent): 根据计划、原始源码和约束条件(例如:保留公共 API)调用 LLM 生成候选转换。
  • 验证智能体 (Verification Agent): 在保留生成的候选方案之前,根据配置的证据检查对其进行分析。

3. 验证追踪与分析

REFINE 并不将 LLM 的输出视为最终结果。相反,它会对转换后的文件进行重新分析,以计算:

  • 异味减少量: 绝对减少量 (Δsmell=BA\Delta_{smell} = B - A) 和检测到的代码异味的相对改进。
  • 静态保持代理 (Static Preservation Proxies): 检查公共 API 保留情况、异常处理、框架契约、条件逻辑以及关键的 assert/fail 调用。
  • 失败诊断: 记录拒绝的具体原因(例如:公共方法被移除)。
  • 可追溯性: 持久化存储原始源码、生成的候选方案、智能体步骤、指标和验证结果,从而将每一项决策与其证据相链接。

实验设计

  • 数据集: 选自 15 个开源系统(如 JHotDraw, Apache Ant, Guava, JabRef)的 450 个 Java 文件,通过基于代码异味数量和行数 (LOC) 的分层随机抽样进行选择。
  • LLM 配置: 对三种前沿模型进行了评估:OpenAI GPT-5.5、Google Gemini 3.1 Pro Preview 和 Anthropic Claude Opus 4.8。
  • 规模: 这产生了 1,350 个模型通过输出。
  • 基准测试: 在一个 150 文件的子集上进行了匹配的直接提示 (direct-prompt) 基准测试,以将多智能体工作流与简单的提示词进行对比。
  • 指标: 代码异味减少量、质量指标(圈复杂度、可维护性指数等)、结构性变化以及保留风险。

关键结果

1. 代码异味减少 (RQ1)

REFINE 在三种 LLM 配置下都实现了显著的代码异味减少:

  • 总减少量: GPT-5.5 为 68.26%,Gemini 3.1 为 72.79%,Opus 4.8 为 68.49%。
  • 主要异味: 最显著的改进出现在主要代码异味方面(减少了 86.51% 至 91.60%)。
  • 质量指标: 广泛的质量指标改进并不统一。虽然 Gemini 3.1 在圈复杂度和 LCOM 方面显示出显著减少,但其他指标(可维护性、可测试性、Halstead effort)表现出取决于模型的混合或不利变化。

2. 保留情况与风险 (RQ2)

  • 高通过率: 大多数静态保留指标(公共方法签名、异常处理、框架契约)以较高的比例通过(81.8% 至 94.2%)。
  • 关键风险:
    • Assert/Fail 调用: 所有模型中只有 57.1% 的输出保留了关键的 assert/fail 调用,这表明存在系统性风险。
    • 公共方法移除: 这是最具体的诊断性失败。Gemini 3.1 表现出最高的公共方法移除率(71 例),其次是 GPT-5.5(41 例)和 Opus 4.8(34 例)。

3. 重构行为 (RQ3)

不同的模型通过不同的编辑特征实现异味减少:

  • GPT-5.5: 产生了最紧凑的编辑。
  • Gemini 3.1: 表现出“重删除”特征,移除的行数和方法数最多。
  • Opus 4.8: 表现出“重提取”特征,具有最高的函数提取数量。
  • 相关性: 较大的编辑量与更高的绝对异味减少量相关,但不一定与更高的相对减少量相关。

4. 与直接提示 (Direct Prompting) 的比较

在匹配的 150 个文件子集上,REFINE 在以下方面优于直接提示:

  • 异味减少: 中位数总减少量为 100.0% (REFINE) 对比 20.8% (直接提示)。
  • 编辑足迹: 更小的中位数变更量 (14 LOC 对比 65 LOC)。
  • API 安全性: 更少的公共方法移除(46 例 对比 112 例)。
  • 权衡: 直接提示更频繁地保留了关键的 assert/fail 结构(100% 对比 58%)。

意义与主张

本文将 REFINE 定位为不是行为保留型重构工具的替代品,而是一种可追溯、具备证据感知的生成及评估重构候选方案的机制

  • 证据感知性: 主要贡献在于将生成的代码与驱动变化的特定静态证据(异味)以及它通过或失败的验证检查联系起来。
  • 受控生成: 与直接提示相比,多智能体工作流提供了更受控的候选方案生成,从而实现了更小的编辑量和更少的意外 API 移除,尽管它并未消除所有的行为风险。
  • 局限性: 作者明确指出,生成的输出是候选方案,而非生产就绪的重构。静态保留检查是代理指标,并不能证明行为等价性。
  • 实际意义: 生成的候选方案在采用之前,特别是在依赖丰富的或系统级的设置中,需要经过编译、测试、依赖分析和人工审查。

研究结论认为,虽然证据感知型多智能体工作流在针对性的文件级代码异味缓解方面具有前景,但无论是直接提示还是多智能体方法,目前都无法提供足够的证据来证明其在复杂的软件生态系统中能够实现完全的行为保留并自主运行。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →