SkillForge: Self-Distilling Agents for Project-Specific Issue Resolution
Silin Chen, Han Li, Xiaodong Gu, Yuling Shi, Haibing Guan
cs.SE, cs.AI
2026-08-19
交大用测试覆盖的核心功能改写出合成issue,把修复轨迹蒸馏成实体绑定技能。Verified上DeepSeek-V3.2从66.4%提到72.2%,GPT-5-mini从55.0%提到60.6%,均超对照。
SWE agent在SWE-bench这类跨仓库基准上已经能修一批真实issue,落到某一个具体项目时仍会反复踩同一类坑:脆弱模块、仓库特有的API契约、跨文件的隐式执行路径。缺的是项目知识,不是又一个通用脚手架。
现有自演化路线分两派。一派从历史issue、commit或旧轨迹里蒸馏经验,覆盖不到没被历史打过的长尾行为。另一派在当前issue上做测试时探索,每来一个bug就付一轮轨迹和token。两者都是事后补课。冷启动阶段,强模型也只是通用仓库探险者。
SkillForge的主张是:先从仓库自己的测试和代码里把项目知识挖出来,再去修真issue。给定仓库快照和测试套件,对通过的测试做覆盖追踪,定位共同实现同一功能的代码片段,让LLM在严格遮罩下重写这些协同片段。模型看不到原文实现,只拿到前后文、位置和测试目标,改写时会暴露它的通用编码先验和仓库惯例之间的缝。测试失败后,按SWE-bench格式装配成合成issue:问题陈述、错误补丁、参考补丁、相关测试。
然后用Mini-SWE-Agent去修这些合成issue,从轨迹里蒸馏双层技能。全局诊断技能挂在实体上,记录这个API在排障里扮演什么角色、从哪开始查、哪些API经常一起出现。局部干预技能记录改这个实体时该怎么动、哪些坑不要踩,成功轨迹和失败轨迹都用。下游修真issue时,先按问题描述用BM25取全局诊断技能垫进初始上下文;agent读到某个文件时,再即时注入对应的局部干预技能。检索跟着代码实体走,不靠「语义相似的旧issue」。
时间隔离协议要求:合成issue的源commit必须早于目标实例的黄金commit。Verified上共合成577个issue。温度0,动作预算250步,BM25取top-5。
脚手架是Mini-SWE-Agent,骨干是DeepSeek-V3.2和GPT-5-mini,Pass@1三次平均。SWE-bench Verified上SkillForge做到72.2%和60.6%,相对基线+5.8和+5.6个百分点。历史派最强的MemGovern是69.2%/58.0%。在线派SWE-Debate是68.2%/56.4%,单issue均价到$0.382/$0.167;SkillForge均价$0.074/$0.066,里面摊了离线合成和蒸馏。SWE-Smith式单函数改写变体只有68.0%/56.4%,LLM仓库摘要变体68.7%/54.4%,说明技能注入接口本身不够,功能级、跨片段的合成才是增量来源。
SWE-bench Pro上是34.1%/51.7%,相对基线28.3%/47.6%同样约四个到六个点,并超过Live-SWE-agent的32.4%/49.1%。去掉全局诊断掉3.8/3.0点,去掉局部干预掉4.4/3.4点。跨模型迁移呈对角:DeepSeek用自己蒸的技能72.2%,换GPT-5-mini蒸的技能掉到65.2%;GPT-5-mini用对方技能掉到55.0%,和没技能的基线持平。技能编码的是「这个模型在这个仓库里会怎么错」,不是仓库的通用说明书。
七个实例最多的仓库上SkillForge相对基线无回撤,Sphinx上DeepSeek最多+13.6%,Scikit-learn上GPT-5-mini最多+15.6%。SWE-Exp会在Matplotlib、Astropy上回撤。超参上检索条数和改写片段数都在5附近最好,全量灌入或改得太狠都会掉。
这是把项目知识从「等事故发生」改成「上线前用测试当监督信号自蒸馏」。对已经有可运行测试的仓库,离线做一轮合成issue,比每来一个ticket都开辩论或在线演化便宜,也比吃GitHub历史更贴这个仓库。技能不能跨模型复用,意味着换骨干要重蒸,不能把DeepSeek的playbook塞给GPT。对从业者这是渐进但可落地的一层:不改基座,改仓库侧记忆。
合成issue依赖可运行测试,覆盖差的区域学不到东西。问题陈述是LLM根据失败证据写的,和开发者工单仍有分布差。蒸馏技能的质检是人工抽查,没有大规模自动验真。跨模型不能迁移,放大了离线成本。评测骨干停在DeepSeek-V3.2和GPT-5-mini,没有放到当时最强的代码模型上。时间隔离能挡住未来泄漏,挡不住「测试套件本身已经把仓库惯例写进合成任务」这一层更软的泄漏。