FailForge: Distilling Procedural Competence from Persistent Failures into Code Agents

TL;DR

FailForge通过诊断失败实例,诱导可迁移的程序技能,提升代码代理的验证成功率6.6点。

cs.AI 🔴 高级 2026-08-09 48 次浏览
Dongyi Lv Fushun E Aichen Cai Liang Huang Ya Zhang Qiuyu Ding Canhui Wu Zhi Wang Yuesong Zhang Jiaqi Wang Nan Duan
软件工程 强化学习 程序技能 模型微调 故障恢复

核心发现

方法论

本文提出FailForge框架,结合错误反馈与执行轨迹,诊断失败原因,提取高层次策略技能,并在训练中去除技能,内化行为。采用漏泄过滤确保技能不泄露具体实现细节,通过引导重试提升失败实例的成功率。核心算法包括故障诊断模型、漏泄过滤器和技能诱导机制,结合多轮采样与策略指导,显著改善模型在复杂软件任务中的表现。

关键结果

  • 在SWE-bench验证集上,FailForge将成功率提升6.6点(从59.6%到66.2%),在多语言任务中也表现优异,提升至70.7%。通过引导重试,成功恢复超过26%的先前失败实例,成本几乎无增加。训练Qwen3.5-4B模型,基于增强数据集,验证成功率提升明显,尤其在难题上效果更佳。
  • 与仅增加采样或实例提示的基线相比,FailForge在保持相似成本的同时,显著提高单次成功率,证明其提取的程序策略具有更高的泛化能力和训练价值。漏泄过滤确保技能的迁移性,模型在不同平台和任务中表现出良好的迁移性。
  • 消除技能后,模型内部化了故障诊断与修复策略,提升了模型的自主推理能力。AB测试显示,去除技能的训练效果优于仅依赖提示或额外采样,验证了策略技能的长远价值。

研究意义

该研究突破了传统RFT的瓶颈,充分利用失败实例中的潜在信息,推动软件工程自动化向更高层次的策略学习迈进。通过引入可迁移的程序技能,模型不再依赖外部提示,增强了自主解决复杂任务的能力,有望在自动化测试、代码修复等场景中实现广泛应用,极大提升软件开发效率与质量。

技术贡献

提出FailForge框架,结合故障诊断、漏泄过滤与策略诱导,系统性地从失败中提取程序技能,训练出具有迁移能力的代码代理。创新点在于技能的高层次抽象与去除机制,确保模型内部化行为而非依赖外部提示,显著改善在复杂任务中的表现。该方法为强化学习与程序合成结合提供新思路,拓展了模型自主学习的边界。

新颖性

首次系统性地从持续失败的实例中诱导可迁移的程序技能,突破了传统基于逐步片段修复或实例提示的局限。区别于现有方法仅在局部或片段层面操作,FailForge通过全局故障诊断与策略抽象,提升了失败样本的利用效率,推动了软件工程中策略学习的创新。

局限性

  • 当前方法依赖于高质量的故障诊断模型,诊断不准确可能影响技能的有效性,且在极端复杂或模糊的失败场景中效果有限。
  • 漏泄过滤器虽能减少细节泄露,但在某些情况下仍可能引入偏差,影响技能的纯粹迁移性。
  • 训练成本较高,尤其是在大规模多轮采样与过滤过程中,未来需优化效率以适应更大规模应用。

未来方向

未来将探索多模态信息融合以提升故障诊断精度,结合自监督学习增强技能的泛化能力。同时,计划将FailForge扩展到其他软件工程任务如自动测试生成和代码优化,推动模型自主能力的全面提升。还将研究多任务学习与迁移学习策略,进一步降低成本,增强模型在不同平台和场景的适应性。

AI 总览摘要

软件工程中的代码代理正逐步迈向自主化,但面对复杂任务时,失败实例频繁出现,严重制约了其性能提升。传统的拒绝采样微调(RFT)方法只保留成功轨迹,忽略了那些最具信息价值的失败样本,导致模型在能力边界上停滞。为解决这一难题,本文提出FailForge框架,旨在从持续失败的实例中提取可迁移的程序策略技能。

FailForge的核心思想是通过故障诊断模型分析失败轨迹,识别根本原因,抽象出高层次的策略技能。这些技能在引导模型第二次尝试时提供策略指导,显著提高成功率。关键在于,技能仅在训练阶段引入,训练完成后会被去除,确保模型在推理时不依赖外部提示,从而实现行为的内在化。

实验结果显示,FailForge在SWE-bench验证集上将成功率提升6.6点(从59.6%到66.2%),在多语言任务中也表现优异,成功恢复超过26%的失败实例,成本几乎无增加。与传统方法相比,FailForge不仅提高了单次成功率,还增强了模型的泛化能力。其技术创新在于对失败样本的全局故障诊断与策略抽象,为软件工程中的自主学习提供了新路径。这一方法有望推动自动化测试、代码修复等场景的智能化发展,显著提升软件开发效率与质量。

深度分析

研究背景

近年来,随着大规模语言模型在软件工程中的应用逐步深入,研究者不断探索如何提升模型的自主能力。早期工作如CodeX、OpenAI Codex通过模仿示例实现代码生成,但在复杂任务中仍存在失败率高的问题。后续的强化学习与微调技术(如RFT)改善了验证效率,但仍未充分利用失败样本中的潜在信息。现有方法多在片段层面操作,难以解决长范围依赖和稀疏反馈的问题。随着任务复杂度增加,模型在边界上的失败频繁出现,亟需更系统的策略学习机制。

核心问题

核心问题在于,传统RFT忽略了那些反复失败的实例,这些实例虽未能成功,但蕴含着模型能力的边界信息。当前方法仅在成功样本上进行微调,导致模型在难题上表现受限。如何从失败中抽象出可迁移的程序策略,指导模型第二次尝试,成为提升性能的关键。该问题难点在于失败样本的复杂性、长距离依赖以及缺乏有效的故障诊断机制,限制了失败样本的利用效率。

核心创新

本研究的创新在于引入FailForge框架,系统性地从失败轨迹中诊断出故障根源,抽象出高层次的程序策略技能。该技能在训练中引入,指导模型第二次尝试,显著提升成功率。区别于现有仅在片段层面操作的方法,FailForge强调全局故障诊断与策略抽象,确保技能的迁移性和泛化能力。其关键创新点包括漏泄过滤机制、策略技能的高层次抽象以及在训练中去除技能的机制,确保行为的内在化。

方法详解

  • �� 采用标准RFT采样多轮轨迹,识别失败实例集F。
  • �� 利用故障诊断模型A分析失败轨迹、输出和推理,抽象出策略技能si,包括适用条件、关键原则、常见陷阱和解决方案步骤。
  • �� 通过漏泄过滤器J筛查技能,确保不泄露具体实现细节,保持技能的迁移性。
  • �� 在引导重试阶段,将技能si注入教师模型的上下文,采样新轨迹,筛选成功的轨迹加入增强数据集。
  • �� 在训练中,去除技能si,训练模型内化行为,优化目标为最大似然。
  • �� 通过多轮采样、过滤、引导和训练,逐步提升模型在复杂任务中的表现。

实验设计

使用SWE-Gym提供的2401个Python任务实例,训练基于Kimi-K2.6的教师策略,评估在SWE-bench验证集和多语言子集。对比基线包括普通RFT、增加采样和实例提示。关键指标为pass@k(k=1,3,5),模型规模为Qwen3.5-4B和9B。通过AB测试验证不同组件的贡献,分析成功率提升和成本效率,确保方法的实用性。

结果分析

FailForge在验证集成功率由59.6%提升至66.2%,在多语言任务中提升至70.7%。成功恢复26%以上的失败实例,成本几乎不变。与仅增加采样或提示相比,表现更优,验证了策略技能的迁移性和泛化能力。模型在不同平台和规模下均表现出良好的适应性,验证了方法的广泛适用性。

应用场景

该方法适用于自动代码修复、自动测试生成和软件调试等场景。通过从失败中学习策略,提升模型在复杂任务中的自主解决能力,减少人工干预。未来可结合持续集成系统,实现端到端的自动化软件维护,推动工业智能化升级。

局限与展望

目前依赖高质量的故障诊断模型,诊断不准确会影响策略提取效果。漏泄过滤仍存在泄露风险,可能引入偏差。训练成本较高,需优化多轮采样和过滤流程。未来需增强模型的泛化能力,降低成本,扩大应用范围。

通俗解读 非专业人士也能看懂

想象你在厨房里做菜,遇到一道菜总是失败。每次失败后,你会试图找出原因,比如火太大、调料放错,甚至忘记加某个步骤。慢慢地,你总结出一套做菜的策略,比如先用中火、按步骤放调料。后来,你把这套策略记下来,做菜时用它指导自己。虽然每次做菜时不用再看指南,但你内心已经掌握了这套技巧,能自己做出好菜。这就像FailForge从失败中提取出“做菜策略”,让模型学会自己解决问题,而不是每次都依赖外部提示。

简单解释 像给14岁少年讲一样

想象你在玩一款游戏,总是输掉某个关卡。你会尝试找出为什么会输,比如没有找到正确的路线,或者不知道怎么用道具。每次失败后,你会总结一些技巧,比如“先探索一下,然后用道具攻击”。慢慢地,你把这些技巧记在心里,下次遇到类似情况时就会用上。这样你就变得更厉害了,不再需要别人告诉你怎么做。这就像FailForge,它从失败中学会了“策略”,让模型自己变得更聪明,能解决以前难以攻克的问题。

原文摘要

Rejection sampling fine-tuning (RFT) is widely used to train code agents by generating trajectories on verifiable software engineering tasks, retaining those that pass the tests, and fine-tuning on the successful rollouts. However, even strong code agents repeatedly fail on a substantial fraction of such tasks, and standard RFT simply discards these failures. The discarded samples are precisely the hardest and most informative ones, drawn from verifiable instances that are costly to curate. Stronger base models may reduce the number of failures, but the remaining hard cases still define the frontier for further improvement. We propose FailForge, an agentic framework that converts failed rollouts into training signal. For each failed instance, an agent diagnoses the failure from error feedback and execution traces, distills the diagnosis into a concise and actionable skill, and injects the skill into the agent context for a guided second attempt. Trajectories that succeed under skill guidance are folded back into the RFT corpus. Crucially, the skill is removed at training time, so the model internalizes the recovered behavior rather than relying on external hints at inference. FailForge recovers over 26% of previously failed instances at marginal additional cost, and training Qwen3.5-4B on the augmented corpus improves the SWE-bench Verified resolve rate by 6.6 points over a strong RFT baseline, with gains concentrated on the hardest problems.

cs.AI