一、研究团队与发表情况
本研究的主要作者包括Jiangping Huang(第一作者,重庆邮电大学)、Wenguang Ye(重庆邮电大学)、Weisong Sun(通讯作者,新加坡南洋理工大学)、Jian Zhang(北京航空航天大学)、Mingyue Zhang(西南大学)以及Yang Liu(新加坡南洋理工大学)。该研究已于2026年发表于由ACM/IEEE联合举办的软件工程领域顶级会议——第48届国际软件工程大会(ICSE ‘26),会议论文集的收录编号为979-8-4007-2025-3/2026/04,论文的DOI为https://doi.org/10.1145⁄3744916.3773187。
二、研究背景与目标
本研究的科学领域主要涉及软件工程中的人工智能辅助开发,具体聚焦于大型语言模型(Large Language Models, LLMs) 自动生成的代码的调试与修复问题。近年来,LLMs在代码生成方面展现出巨大潜力,但它们生成的代码,尤其是在复杂任务中,常常包含微妙但关键的逻辑错误。现有的自动化修复方法大多依赖于测试套件提供的简单的“通过/失败”二元反馈信号。这种方法就像一个“黑盒”,缺乏对程序内部执行状态的洞察,导致难以精确定位错误的根本原因。此外,由于缺乏从先前失败尝试中学习的能力,修复过程容易陷入重复、低效的循环,例如出现性能退化(修复破坏了之前正确的功能)或修复停滞(反复应用错误的局部补丁,无法找到全局正确解)。
因此,本研究旨在克服这些限制。其目标是模仿人类专家的“观察-分析-修复”调试流程,开发一个全新的自动化调试框架。该框架应具备三个核心能力:1. 获取程序运行的细粒度内部状态(观察);2. 利用这些状态进行因果分析以定位根因(分析);3. 能够从历史失败中学习,避免重蹈覆辙(学习)。最终目标是显著提升LLM生成代码的一次性通过率(pass@1),并实现更稳定、更高效的修复过程。
三、研究方法与详细工作流程
本研究提出了一个名为 “Tracecoder” 的、基于踪迹驱动的多智能体协作自动化调试框架。其核心思想是将复杂的调试任务分解为由三个专门智能体(Agent)负责的模块化阶段,并通过两个关键机制确保过程的稳定性和学习能力。整个工作流程如下图所示(参考原文图2),并包含以下详细步骤:
步骤1:初始代码生成与测试 首先,一个LLM根据自然语言问题描述生成初始代码。该代码随后在包含多个测试用例的环境中执行。如果所有测试通过,则流程结束。否则,进入多智能体调试循环。
步骤2:多智能体协作调试循环(核心) 该循环由三个智能体顺序协作完成: * Instrumentation Agent(插桩智能体): 该智能体负责“观察”。其输入包括当前有缺陷的代码、最新的测试失败反馈,以及(可选的)来自分析智能体的插桩建议。它的任务是在不改变程序原有语义的前提下,将诊断性的print语句(即“探针”)智能地插入到代码的关键位置(如函数体、分支、循环的入口/出口以及关键变量处),从而生成插桩后的代码。这个过程遵循四大原则:逻辑分解、状态与控制流可追踪、插桩纯净性(仅插入打印语句)、输出结构清晰。随后,一个名为 “Tracerunner” 的自定义执行包装器会运行该插桩代码,并捕获结构化的运行时踪迹数据,包括打印输出和异常信息。 * Analysis Agent(分析智能体): 该智能体负责“分析”和“学习”。它接收以下输入:原始问题描述、插桩后的代码、Tracerunner捕获的运行时踪迹数据,以及一个记录了当前问题所有先前失败尝试的 “Historical Lesson Learning Mechanism(历史教训学习机制,HLLM)” 日志。分析智能体执行两阶段推理:首先,诊断与反思,即分析运行时踪迹以定位错误的根本原因,同时回顾历史失败记录以理解先前修复策略为何失败;其次,策略制定,即基于诊断结果,生成两部分输出:1)一份详细的修复计划,用于指导修复智能体;2)插桩建议,为下一轮调试指明需要收集哪些额外的运行时信息。 * Repair Agent(修复智能体): 该智能体负责“执行”。它接收分析智能体制定的修复计划,结合原始问题描述、待修复的代码和测试失败反馈,实施具体的代码修改,生成修复后的候选代码。该智能体被赋予一定的灵活性,可以在不违背核心修复策略的前提下进行微小的本地化调整。
步骤3:回滚与迭代控制 为了确保修复过程的稳定收敛,框架引入了 “Rollback Mechanism(回滚机制,RM)” 。每次修复尝试后,系统会评估新代码通过的测试用例数量。算法(参考原文算法2)通过比较当前尝试、历史最佳尝试和上一次尝试的得分,决定下一步行动:如果新代码表现更好,则采纳为新的基线;如果表现相同或更差,则回滚到历史最佳版本作为下一轮的起点;如果长时间停滞不前,则终止修复以避免资源浪费。HLLM和RM共同作用,使得整个调试过程能够从错误中学习,并朝着正确的方向稳步前进。
步骤4:终止条件 上述循环持续进行,直到所有测试通过,或者达到预设的最大尝试次数或停滞阈值。
四、主要实验结果
研究在四个广泛使用的基准数据集上对Tracecoder进行了全面评估:HumanEval、HumanEval+、BigCodeBench和ClassEval。使用了三个代表性的LLM作为后端:Gemini-2.5-Flash-0417、DeepSeek-V3-0324和Qwen-Plus-2025-01-25。对比的基线方法包括:直接生成(Direct)、思维链(Chain-of-Thought, CoT)、自我规划(Self-Planning)、自调试(Self-Debugging)以及Intervenor。
RQ1:修复效果对比 实验结果表明,Tracecoder在所有设置下均一致性地超越了所有基线方法。在衡量标准pass@1(一次性生成正确代码的比例)上,Tracecoder展现出显著优势,特别是在包含复杂类级别代码生成的ClassEval和BigCodeBench数据集上。例如,使用Gemini模型在ClassEval上,Tracecoder达到了82.00%的pass@1准确率,相较于次优基线(61.00%),实现了高达34.43%的相对提升。平均来看,Tracecoder在各基准数据集上的平均表现(90.72%)也比最强的基线(81.05%)高出11.93%。这些数据强有力地证明了Tracecoder框架设计的有效性,其通过运行时追踪和因果分析,能够更精确地定位和修复深层逻辑错误。
RQ2:关键参数影响 研究分析了最大尝试次数(max_attempts)和耐心值(patience,即允许停滞的轮数)两个超参数的影响。敏感性分析显示,增加这两个参数都能带来pass@1准确率的稳定提升,因为更多的迭代机会和更高的容错度使得框架能够进行更深入的探索,从而逃离局部最优解。这验证了迭代和容错机制对处理复杂任务的重要性,同时也揭示了性能与计算成本之间的权衡。
RQ3:消融实验(各组件贡献分析) 通过在BigCodeBench数据集上进行消融研究,研究人员量化了每个核心组件的贡献。结果显示,完整的Tracecoder框架实现了89.04%的pass@1。当移除整个迭代修复循环(即退化为单次生成)时,性能骤降至53.77%,这凸显了迭代修复的基础性贡献。单独移除插桩智能体导致性能下降至78.51%,证明了运行时踪迹对精确诊断至关重要。进一步移除分析智能体后,性能再降至75.09%,表明即使没有踪迹,结构化分析仍然有益。移除回滚机制(RM)导致性能降至84.55%,证实了其在防止性能退化、维持稳定修复轨迹方面的作用。移除历史教训学习机制(HLLM)导致性能降至86.75%,显示了从过去失败中学习能够带来约2.6%的增益。移除两者则降至84.43%。这些结果系统地证实了所有组件的必要性及其协同作用。
RQ4:实用性评估 研究还进行了多方面的实用性分析: 1. 插桩纯净性验证:实证检验显示,对初始正确的代码进行插桩后,语义保留率超过99.32%-100%,并通过了Crosshair形式化验证工具的检查,证明了插桩过程的可靠性。 2. 成本分析:与基线相比,Tracecoder的令牌消耗处于高水平,但这是为了实现其高性能。在同等令牌预算或同等尝试次数的公平比较下,Tracecoder的pass@1仍然显著优于通过简单采样更多候选代码(pass@k)的基线方法,证明了其反馈引导的、深度优先的修复策略比盲目采样更有效。 3. 错误分析:在未能修复的案例中,错误答案(Wrong Answer, WA)是主要的失败模式(高达8.86%),表明框架在解决导致程序崩溃的运行时错误方面已很有效,剩余挑战在于纠正那些能运行但输出错误的微妙逻辑缺陷。 4. 案例研究:论文通过一个具体的语义错误(错误地将条件 x >= 0 用于筛选正数)案例,生动展示了Tracecoder如何通过插桩捕获中间决策、分析踪迹准确定位错误的过滤逻辑,并实施精准修复。这凸显了其相较于仅依赖最终错误信息的“黑盒”方法的根本优势。
五、研究结论与价值
本研究成功提出了Tracecoder,一个模仿人类专家调试行为的、基于踪迹驱动的多智能体框架,用于自动修复LLM生成的代码。通过整合运行时插桩、协作式智能体交互和迭代优化,Tracecoder实现了对程序内部状态的深入洞察、对故障根源的精确分析以及有针对性的修复。其创新的历史教训学习机制(HLLM)通过复用过去的洞察来避免重复错误,而回滚机制(RM)则确保了修复过程的稳定收敛。
本研究的科学价值在于,它将人类认知调试模型(信息收集、假设形成、修复)成功操作化为一个可计算的、模块化的多智能体系统,为解决LLM代码生成的“黑盒”调试问题提供了新的范式。其实践价值非常显著:在多个具有挑战性的代码生成基准测试中,Tracecoder显著超越了现有最先进的方法,最高实现了34.43%的相对性能提升,并能以更智能、更稳定的方式修复复杂的语义错误,提升了LLM辅助开发的可靠性和可用性。作者已开源了Tracecoder的实现,以支持可重复性研究和未来工作。
六、研究亮点