SkillForge: Self-Distilling Agents for Project-Specific Issue Resolution 精读
论文链接:SkillForge: Self-Distilling Agents for Project-Specific Issue Resolution 代码仓库:cslsolow/SkillForge 发表时间:2026年8月 机构:上海交通大学 领域标签:软件工程 agent / 自进化 SWE agent
一、论文背景
SWE agent 的项目知识瓶颈。LLM 驱动的软件工程 agent(SWE-agent、OpenHands 等)在标准基准上表现出色,但部署到特定项目时会遇到冷启动问题:真实项目有结构性规律——反复出问题的脆弱模块、正确补丁必须遵守的 API 契约、通过隐式执行路径耦合的 API——缺乏这些知识的 agent 只能每次从头摸索,反复掉进同一个项目特有的坑。
现有自进化方法的两大路线及其局限:
- 历史驱动(EvoCoder、SWE-Exp、MemGovern):从历史 issue/提交/轨迹蒸馏知识。局限:知识覆盖受限于"以前发生过什么"——没见过的 issue 类型就是盲区;且仓库外部的调试讨论(MemGovern 用人类调试痕迹)稀释了仓库特异性。
- 在线获取(SAGE、SWE-Debate、Live-SWE-agent):解决当前 issue 时在线探索并蒸馏。局限:每个 issue 都要付出测试时探索成本(SWE-Debate 单题 $0.382!),且学到的经验在下题才可用。
关键观察:这两条路线都在等"真实 issue 暴露知识缺口"——被动等待是共同的结构性缺陷。有没有办法主动获取项目知识?论文的答案藏在一个朴素的事实里:仓库自带测试覆盖的核心功能,本身就是知识的可验证来源。
二、论文定位和关联工作
| 谱系 | 代表工作 | 知识来源 | 与本文关键区别 |
|---|---|---|---|
| 历史驱动 | EvoCoder / SWE-Exp / MemGovern | 过往 issue、提交、人类调试痕迹 | 覆盖受历史限制,被动 |
| 在线获取 | SAGE / SWE-Debate / Live-SWE-agent | 当前 issue 的测试时探索 | 每题付费,延迟可用 |
| 任务合成 | SWE-Smith(数据管线) | 重写单函数制造 bug | 用于造训练数据,非项目知识资产 |
| SkillForge | 本文 | 主动合成 issue(重新实现带测试的功能) | 知识获取前移到真实 issue 之前 |
定位结论:SkillForge 开出第三条路线——“主动式仓库自蒸馏”:不等真实 issue、不依赖历史信号,把仓库本身(测试+核心功能)当作可自我提问的知识源。这与 SWE-Smith 的任务合成技术形似而神异:SWE-Smith 造数据训练通用模型,SkillForge 造 issue 蒸馏特定仓库的知识资产。
三、问题定义
具体场景:agent 即将进入一个新仓库解决 issue,之前没有任何该仓库的历史 issue 信号可用。
核心洞察:知识获取的时机可以前移——真实 issue 到来之前,仓库的"测试覆盖的核心功能"就是自带标准答案的自命题库。重新实现这些功能 → 得到自己版本的实现 → 与原实现对照 → 差异处即"这个项目的写法约定" → 解决"恢复原实现"这个合成 issue 的过程沉淀为技能。
形式化:给定仓库 R 及其带测试的功能集 F,合成 issue 集 S = {恢复 f 的原始实现 | f∈F},解决 S 的轨迹蒸馏为实体锚定技能集 K = {(实体 e, 技能 k)},未来真实 issue 到来时按 BM25 检索 top-5 技能注入。目标:最大化后续 issue 解决率,约束:合成阶段的离线成本摊销后单题成本可控。
精妙之处:合成 issue 有天然的可验证奖励(仓库自带测试通过与否)——不需要人工标注、不需要真实 issue 的后验信号,知识生产流程完全自动化。
四、问题解法
4.1 功能级仓库探查(与 SWE-Smith 单函数重写的差异)
SkillForge 不做单函数重写,而是"重新实现核心功能"——功能级的探查迫使 agent 理解模块间的调用关系与 API 契约,而不只是单函数内部的逻辑。消融对照(SkillForge w/ SWE-Smith)证明这一差异值 4.2 个百分点(72.2% vs 68.0%)。
4.2 实体锚定技能
蒸馏出的知识以"实体-技能"对存储:技能文本描述"在这个仓库里,X 类的修改通常要同步更新 Y"这类约定,实体锚定让 BM25 检索能按当前 issue 涉及的模块/类/函数精确命中。对照消融(w/ LLM Summary:静态仓库摘要替代轨迹蒸馏)在 GPT-5-mini 上反而降 0.6 分——证明知识必须从"解决问题的过程"而非"阅读代码的总结"中来。
4.3 防泄漏与公平性
合成技能只使用目标 issue 的 gold commit 之前的仓库历史——确保没有未来信息泄漏;温度 0、动作预算 250 步、BM25 top-5 检索,Pass@1 三次运行取平均。
五、评估指标与实验证据
主结果(SWE-bench Verified,500 题):
| 配置 | DeepSeek-V3.2 | GPT-5-mini |
|---|---|---|
| Mini-SWE-Agent 基线 | 66.4% | 55.0% |
| 最强历史驱动(MemGovern) | 69.2% | 58.0% |
| 最强在线(SWE-Debate/SAGE) | 68.2% / 67.2% | 56.4% / 56.0% |
| SkillForge | 72.2%(+5.8) | 60.6%(+5.6) |
统计显著性(p<0.05)标注于超基线的所有对比;成本 $0.074/$0.066 每 issue——与基线($0.049/$0.031)同数量级,远低于 SWE-Debate 的 $0.382。
泛化(SWE-bench Pro,731 实例,含 JS/TS/Go):DeepSeek-V3.2 28.3%→34.1%(+5.8)、GPT-5-mini 47.6%→51.7%(+4.1),均 p<0.05——跨语言长程任务同样有效。
消融的证明力:三个受控变体各隔离一个设计选择——w/ SWE-Smith(-4.2)证明功能级>函数级;w/ LLM Summary(-3.5/-6.2)证明轨迹蒸馏>静态阅读;两者共同支撑"知识来自解决合成 issue 的过程"这一核心主张。
为什么实验设计有证明力:对照系覆盖两大路线的最强代表(历史/在线各 3 个);单变量消融把"知识来源"这一核心变量分离出来;跨基准(Verified+Pro)与跨模型(开源+闭源)的双重泛化排除了"恰好适配某个模型"的解释。
六、效果优势的根源解释
对比对象:历史驱动与在线获取两条路线的最强方法。
根本局限:历史驱动的知识分布 ∩ 真实 issue 的知识需求 ≠ 完整需求集——历史是"过去发生的问题"的有偏采样,项目中最常被违反的隐式约定(API 契约、调用路径)恰恰很少显式出现在 issue 文本里。在线方法的局限是时机——知识在"当前题"的探索中产生,本题已经付了学费却只能惠及下题。
本文的根本性改变:因果链是——重新实现核心功能迫使 agent 与项目的真实约定碰撞(功能级理解产生函数级阅读没有的调用关系知识)→ 合成 issue 以仓库测试为可验证信号自动判分 → 蒸馏出的技能按实体锚定,未来 issue 按模块精确命中 → 72.2% 的提升。反事实支撑:把功能级探查退化成单函数重写(-4.2)、把轨迹蒸馏退化成静态摘要(-3.5/-6.2),增益即大幅缩水——两个消融从"知识的生产方式"和"知识的组织方式"两端夹出核心机制的必要性。
成本结构优势:合成阶段是离线一次性投入,摊销后单题成本与基线同数量级——与在线方法每题付费形成结构性对比。
七、必要知识反推
领域知识层:SWE-bench 评测协议与泄漏风险(gold commit 时序隔离);仓库功能与测试的组织方式——不知道"测试覆盖的功能"是何种粒度就无法设计功能级探查;既有自进化方法的失败面(历史覆盖缺口、在线成本)。
方法论知识层:任务合成的设计空间(SWE-Smith 的函数重写作为对照点);技能检索的组织方式(实体锚定+BM25 的匹配);消融实验的单变量控制。
工程知识层:Docker 化的仓库环境管理;250 步动作预算下的 agent 编排;离线成本摊销的核算口径。
知识融合的关键节点:最有创造性的一步是把"仓库自带测试"识别为自命题的知识源——测试既是出题器(合成 issue 的判定标准)又是阅卷器(自动判分),这个双重身份让知识生产完全闭环。需要同时跳出"等真实 issue"与"读历史"两种思维定势。第二个节点是实体锚定 vs 文档式摘要的差异意识——意识到"知识按可检索的实体组织"与"知识按叙事组织"对下游命中率的影响截然不同。
八、论文中可以提取的通用性灵感
1. 自带验证信号的系统可以被自命题学习 论文证据:仓库的测试覆盖功能 = 自带标准答案的题库,无需人工标注即可生产可验证的知识。 推广场景:用类型系统/编译器自命题学一门新代码库;用既有回归测试反向学习软件的隐式契约;新员工通过"重做公司已有项目并对照原版"学习组织惯例。
2. 知识获取的时机可以前移到需求出现之前 论文证据:在真实 issue 到来前主动合成学习任务,5.8pp 增益与摊销后的低成本,优于"边用边学"的在线路线。 推广场景:灾备演练先于故障发生;军事的战前推演;产品团队的预研技术雷达——凡"需求到来时学习太贵"的场景皆可前置。
3. 过程性知识优于描述性知识(做中学>看总结) 论文证据:轨迹蒸馏 vs LLM 仓库摘要的消融差距(-3.5/-6.2)——从解决问题过程中沉淀的知识胜过对代码的静态总结。 推广场景:维修手册 vs 拆装实践的技能留存差异;读投资理论 vs 模拟盘操作的交易学习;医生看手术视频 vs 参与手术的学习曲线。
4. 知识要按"将来被检索的方式"组织 论文证据:技能以实体-技能对存储、BM25 按当前 issue 涉及实体命中——组织方式服务检索场景。 推广场景:笔记按"未来查询的问题"组织而非按阅读时的章节;API 文档按使用场景而非字母序组织;法条按案件类型检索组织。