{
  "title": "算法解读：SkillForge——四步合成 issue + 双层技能库，SWE-bench 实测 +5.8%",
  "url": "/posts/deep-code-skillforge/",
  "permalink": "https://hackcv.com/posts/deep-code-skillforge/",
  "date": "2026-08-23",
  "lastmod": "2026-08-23",
  "author": "hackcv",
  "description": "SkillForge 完整拆解：strict-mask 合成 issue 四步流程、全局诊断/局部干预双层技能库、BM25+JIT 两阶段检索；SWE-bench Verified 72.2%（+5.8%）、Pro 34.1%（+5.8%）。",
  "categories": ["研究简报"],
  "tags": ["AI","Agent","技能蒸馏","SkillForge","算法解读"],
  "cover": "https://picsum.photos/seed/%E7%AE%97%E6%B3%95%E8%A7%A3%E8%AF%BBskillforge%E5%9B%9B%E6%AD%A5%E5%90%88%E6%88%90-issue-\u0026#43;-%E5%8F%8C%E5%B1%82%E6%8A%80%E8%83%BD%E5%BA%93swe-bench-%E5%AE%9E%E6%B5%8B-\u0026#43;5.8/1200/675",
  "readingTime": 2,
  "wordCount": 306,
  "content": "\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e一句话结论\u003c/strong\u003e：SkillForge 不等真实 issue——\u003cstrong\u003e用\u0026quot;重新实现测试覆盖的核心功能\u0026quot;合成项目专属 issue\u003c/strong\u003e，在解决合成 issue 中蒸馏出\u003cstrong\u003e实体锚定技能\u003c/strong\u003e（诊断 + 干预双层），解决真实 issue 时按交互位置即时注入。SWE-bench Verified：DeepSeek-V3.2 达 \u003cstrong\u003e72.2%\u003c/strong\u003e（基线 66.4%，+5.8%）、GPT-5-mini 达 \u003cstrong\u003e60.6%\u003c/strong\u003e（+5.6%），两种知识缺一不可。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"背景与动机\"\u003e背景与动机\u003c/h2\u003e\n\u003ch3 id=\"项目知识瓶颈\"\u003e项目知识瓶颈\u003c/h3\u003e\n\u003cp\u003eLLM 编码 Agent 解决特定仓库 issue 常失败——不知道模块划分、代码风格、隐含约束。现有 self-evolving 方法两条路都有硬伤：\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e路线\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e做法\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e缺陷\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e历史学习（SWE-Exp/EvoCoder/MemGovern）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e用历史修复轨迹提炼\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e依赖历史修复信号\u003c/strong\u003e，新仓库冷启动失效\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e在线探索（SAGE/SWE-Debate/Live-SWE）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e遇到真实 issue 现场学\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e逐 issue 探索成本高\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eSkillForge 第三条路：\u003cstrong\u003e知识缺口从仓库测试主动构造\u003c/strong\u003e——测试即规范，天然自带验证器。\u003c/p\u003e\n\u003ch2 id=\"核心思路四步合成--双层蒸馏--两阶段检索\"\u003e核心思路（四步合成 → 双层蒸馏 → 两阶段检索）\u003c/h2\u003e\n\u003ch3 id=\"-合成-issue四步流程\"\u003e① 合成 issue（四步流程）\u003c/h3\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e步骤\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e做法\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e1. 测试驱动范围\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e对每个\u003cstrong\u003e通过的测试\u003c/strong\u003e做覆盖率插桩执行，提取执行轨迹 → 被覆盖源文件与行范围，切片成连续代码段\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e2. 关键段选择\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eLLM 选 top-k 关键段（测试目的 + 代码段摘要）；\u003cstrong\u003e关键区别\u003c/strong\u003e：可跨组件选多段，合成能暴露\u003cstrong\u003e跨组件交互\u003c/strong\u003e的 issue\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e3. 代码重写（strict-mask）\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e不给原始实现\u003c/strong\u003e，只给段前后代码行 + 位置/缩进 + 测试目标，让 LLM 重写一个保留 API 但逻辑简化的替代实现 → 诱发\u0026quot;通用知识 vs 仓库知识\u0026quot;的差距（即真实开发中的错误类型）\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e4. 实例组装\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e重写致测试失败 → 构建 buggy 快照 + buggy/reference patch → LLM 把失败证据转成\u003cstrong\u003e不暴露修复提示\u003c/strong\u003e的问题陈述 → 标准 SWE-bench 格式实例\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eSWE-bench Verified 上合成 \u003cstrong\u003e577 个合成 issue\u003c/strong\u003e（时间隔离：回滚到 golden patch 前快照）。\u003c/p\u003e\n\u003ch3 id=\"-双层技能库entity-grounded\"\u003e② 双层技能库（entity-grounded）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e全局诊断技能 M_ext\u003c/strong\u003e（3 字段，解决\u0026quot;去哪看\u0026quot;）：\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e字段\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e内容\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003epurpose\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e实体在 issue 解决中的功能角色（判断是否是调试入口）\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003eplaybook\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e反复验证的可复用推理策略（仓库特定，非通用建议）\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003erelated_apis\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e常共同涉及的 API 及原因（仓库交互模式）\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e局部干预技能 M_int\u003c/strong\u003e（解决\u0026quot;怎么改\u0026quot;）：从\u003cstrong\u003e成功轨迹\u003c/strong\u003e（正确修复策略）与\u003cstrong\u003e失败轨迹\u003c/strong\u003e（对比错误 patch vs reference patch 暴露的陷阱）蒸馏，形如 \u003ccode\u003e{api_path, intervention_skills[]}\u003c/code\u003e。\u003c/p\u003e\n\u003cp\u003e技能通过解析轨迹中的 shell 命令（grep/sed/cat）+ AST 结构索引对齐到\u003cstrong\u003e真实代码实体\u003c/strong\u003e——防止 LLM 幻觉出不存在的接口。\u003c/p\u003e\n\u003ch3 id=\"-两阶段检索上下文感知注入\"\u003e③ 两阶段检索（上下文感知注入）\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e宏观初始化\u003c/strong\u003e：新 issue 描述 → \u003cstrong\u003eBM25\u003c/strong\u003e 从 M_ext 检索 top-5 → 前置到初始提示（项目先验）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e微观 JIT 注入\u003c/strong\u003e：不一次性注入 M_int——\u003cstrong\u003e监控 agent 的 shell 命令\u003c/strong\u003e，访问的文件命中 M_int 条目时，把干预提示作为辅助观察即时附加。技能与当前交互\u003cstrong\u003e严格对齐\u003c/strong\u003e，避免语义检索的歧义\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"实验数据\"\u003e实验数据\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSWE-bench Verified（表 I，Pass@1）\u003c/strong\u003e：\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e方法\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eDeepSeek-V3.2\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eGPT-5-mini\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003eSkillForge\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e72.2%\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e60.6%\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eMini-SWE-Agent（基线）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e66.4%\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e55.0%\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eMemGovern（最强历史基线）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e69.2%\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e58.0%\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSAGE / SWE-Debate（在线基线）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e67.2% / 68.2%\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e56.0% / 56.4%\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSkillForge w/ SWE-Smith（单函数重写）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e68.0%\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e56.4%\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSkillForge w/ LLM Summary（摘要代替轨迹蒸馏）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e68.7%\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e54.4%\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eSWE-bench Pro\u003c/strong\u003e（731 实例，Python/JS/TS/Go）：34.1% / 51.7%（+5.8% / +4.1%）。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e消融与超参\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e组件消融\u003c/strong\u003e：移除 M_ext ↓3.8%/↓3.0%；移除 M_int ↓4.4%/↓3.4%——\u003cstrong\u003e两种知识都必要，干预技能影响略大\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e跨 LLM 迁移\u003c/strong\u003e：GPT-5-mini 用 DeepSeek 蒸馏的知识 55.0% \u0026lt; 自蒸 60.6%——\u003cstrong\u003e技能与蒸馏模型绑定\u003c/strong\u003e（不同模型编码先验不同，暴露的仓库不匹配也不同），对角模式明显\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e检索数量\u003c/strong\u003e：k_r 峰值 5（69.7%）；全部注入反而降到 67.5%（低排名技能挤占上下文）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e重写段数\u003c/strong\u003e：k_s 峰值 5（多实体交互暴露更丰富知识），7 略降\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e跨仓库\u003c/strong\u003e：7 个大仓库全提升无回归（DeepSeek 最高 +13.6% Sphinx、GPT-5-mini +15.6% scikit-learn），对比 SWE-Exp 在 3 个仓库回归（Matplotlib −11.8%）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e案例（Django #11206）\u003c/strong\u003e：格式化极小 Decimal（\u003ccode\u003eformat(Decimal(\u0026quot;1e-200\u0026quot;), \u0026quot;.\u0026quot;, decimal_pos=2)\u003c/code\u003e）期望 \u0026ldquo;0.00\u0026rdquo; 却返回 \u0026ldquo;1.00e-200\u0026rdquo;。基线 agent 用指数启发式判零 → FAIL_TO_PASS 0/2；SkillForge agent 靠检索知识保留现有格式化管道、用仓库精度语义推理数值等价 → 2/2 全过。\u003c/p\u003e\n\u003ch2 id=\"工程落地要点\"\u003e工程落地要点\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e测试质量 = 合成质量\u003c/strong\u003e：弱断言/无断言的测试不适合做合成素材；无测试的仓库先补关键测试\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e技能粒度\u003c/strong\u003e：实体锚定（文件/函数级）比泛化经验有效——检索命中率与注入对齐度是关键\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e落地建议\u003c/strong\u003e：先在中等仓库（几百文件）验证合成-蒸馏闭环，动作预算参考 250 步、温度 0\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e代价提示\u003c/strong\u003e：合成 + 蒸馏有额外推理开销，适合高频同质 issue 流（技能复用摊薄成本）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"适用边界与取舍\"\u003e适用边界与取舍\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e适合\u003c/strong\u003e：有测试套件的仓库、新仓库冷启动、高频同质 issue\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e不适合\u003c/strong\u003e：无测试且不补测试的仓库、一次性问题流（技能库膨胀复用率低）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e取舍\u003c/strong\u003e：vs 历史学习（无冷启动依赖但需测试）；vs 在线探索（无逐 issue 成本但需事前合成预算）；vs agent-skills（自动生成+实体锚定 vs 人工沉淀）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"复现要点\"\u003e复现要点\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003earXiv: 2608.18933；代码/数据 \u003cstrong\u003egithub.com/cslsolow/SkillForge\u003c/strong\u003e（上海交大 Haibing Guan 团队）\u003c/li\u003e\n\u003cli\u003e复现链路：覆盖率插桩跑测试 → strict-mask 重写 → 失败证据转问题陈述 → Mini-SWE-Agent + BM25 检索 + JIT 注入\u003c/li\u003e\n\u003c/ul\u003e\n",
  "summary": " 一句话结论：SkillForge 不等真实 issue——用\u0026quot;重新实现测试覆盖的核心功能\u0026quot;合成项目专属 issue，在解决合成 issue 中蒸馏出实体锚定技能（诊断 + 干预双层），解决真实 issue 时按交互位置即时注入。SWE-bench Verified：DeepSeek-V3.2 达 72.2%（基线 66.4%，+5.8%）、GPT-5-mini 达 60.6%（+5.6%），两种知识缺一不可。\n背景与动机 项目知识瓶颈 LLM 编码 Agent 解决特定仓库 issue 常失败——不知道模块划分、代码风格、隐含约束。现有 self-evolving 方法两条路都有硬伤：\n路线 做法 缺陷 历史学习（SWE-Exp/EvoCoder/MemGovern） 用历史修复轨迹提炼 依赖历史修复信号，新仓库冷启动失效 在线探索（SAGE/SWE-Debate/Live-SWE） 遇到真实 issue 现场学 逐 issue 探索成本高 SkillForge 第三条路：知识缺口从仓库测试主动构造——测试即规范，天然自带验证器。\n核心思路（四步合成 → 双层蒸馏 → 两阶段检索） ① 合成 issue（四步流程） 步骤 做法 1. 测试驱动范围 对每个通过的测试做覆盖率插桩执行，提取执行轨迹 → 被覆盖源文件与行范围，切片成连续代码段 2. 关键段选择 LLM 选 top-k 关键段（测试目的 + 代码段摘要）；关键区别：可跨组件选多段，合成能暴露跨组件交互的 issue 3. 代码重写（strict-mask） 不给原始实现，只给段前后代码行 + 位置/缩进 + 测试目标，让 LLM 重写一个保留 API 但逻辑简化的替代实现 → 诱发\u0026quot;通用知识 vs 仓库知识\u0026quot;的差距（即真实开发中的错误类型） 4. 实例组装 重写致测试失败 → 构建 buggy 快照 + buggy/reference patch → LLM 把失败证据转成不暴露修复提示的问题陈述 → 标准 SWE-bench 格式实例 SWE-bench Verified 上合成 577 个合成 issue（时间隔离：回滚到 golden patch 前快照）。\n"
}
