← 返回 2026-07-30

MindForge:基于无源程序合成教小模型掌握全生命周期软件工程 MindForge: Teaching Small Language Models Whole-Life-Cycle Software Engineering via Source-Free Program Synthesis

Yihao Chen, Shi Chang, Khaled Chawa, Feng Lin, Boyuan Chen, Shaowei Wang, Ahmed E. Hassan 📅 2026-07-29 👍 27 2026-08-04 18:30
代码合成 小语言模型 无源逆向工程 知识蒸馏 训练数据生成 软件工程智能体

用无源程序合成轨迹蒸馏27B模型,逼近前沿大模型的编程能力

前置知识

Coding Agent(编码智能体)

指通过自然语言驱动、能自主调用 shell/编辑器/编译器等工具完成软件开发任务的 LLM 智能体。它不是一次性生成代码,而是在多轮交互中读代码、改文件、运行测试、调试错误,形成「推理—行动—观察」的闭环。本文使用 mini-swe-agent 框架(Yang et al. 2024)作为统一脚手架。

本文的目标就是把前沿编码智能体的「全生命周期开发行为」蒸馏到 27B 小模型上,所以必须先理解智能体如何通过工具调用循环完成长程任务。

Source-Free Setting(无源设定)

指智能体只能看到「编译后的参考可执行文件」和「公开文档」,看不到任何源代码,需要通过黑盒探测(运行 --help、喂样例输入、观察 stdout/stderr/退出码)来推断程序规范,再从零实现。ProgramBench 和 MirrorCode 用这个设定评估前沿模型,而 MindForge 反其道而行——用它来生成训练数据。

这是本文的核心创新切入点:把原本只用于评测的「无源黑盒」设定转变为训练数据生成设定,既覆盖全生命周期又天然避免源码级污染。

Whole-Life-Cycle SE(全生命周期软件工程)

区别于只修 bug 或只加功能的「单阶段」任务,全生命周期覆盖规范推断、架构设计、实现、调试、测试、提交可编译产物这六个完整阶段。MindForge 收集的轨迹平均 181.6 轮、最长 272K token,远超以往 95 分位仍在 32K 以内的短程任务。

本文的卖点正是「完整生命周期的监督信号」——只有理解这种长程多阶段特征,才能理解为什么蒸馏能跨任务泛化。

Knowledge Distillation / SFT(知识蒸馏与监督微调)

用强教师模型(本文为 GLM-5.2)在训练环境里自主解题产生「轨迹」,再把轨迹作为监督数据微调弱学生模型(Qwen3.6-27B)。训练时只对 assistant 生成的推理、自然语言、工具调用 token 计算损失,系统/用户消息和工具输出被 mask 掉。

理解 SFT 损失的 mask 策略,以及轨迹质量直接决定学生能力,是读懂本文训练配方与两条精炼流程存在理由的前提。

ProgramBench

Yang et al. 2026b 提出的基准,包含 200 个真实开源 CLI 程序(Rust 107、Go 46、C/C++ 45、Java 1、Haskell 1),每个实例提供 README/man page 文档和一个「仅可执行」的二进制作为行为预言机,按难度分为 28 简单/143 中等/29 困难。主指标是平均测试通过率,对每个实例按通过隐藏测试用例比例 $r_p = k_p/n_p$ 求均值。

这是本文的主战场——基础模型 Qwen3.6-27B 仅 37.98%,连 GPT-5.5 也只能解决 <1% 任务,MindForge-27B 把它推到 49.51%。

研究动机

现有编码智能体在「修改已有代码库」类任务(bug 修复、功能实现、代码补全)上已取得长足进展,但「从零构建完整程序」是完全不同且更困难的设定——智能体必须独立完成规范推断、架构设计、实现、自调试、自测试、迭代精炼整个开发过程。这一困难在 ProgramBench 上体现得淋漓尽致:连 GPT-5.5 这样的前沿模型也只能完全解决不到 1% 的任务。与此同时,用于训练编码智能体的可扩展环境构建框架(SWE-Smith、SWE-Gym、R2E-Gym、SWE-rebench、OpenSWE、ScaleSWE、SWE-universe 等)都聚焦在软件开发的单一阶段,并且默认智能体能看到源代码——它们训练智能体去「修改」一个源码可见的代码库,而不是「从零构建」。结果是:可扩展的、面向端到端、全生命周期的无源程序构建训练环境(以及避免直接源码暴露带来的污染问题)这一方向几乎完全空白。

本文的目标是本文要填补这个空白,构建一个端到端自动化流水线 MindForge,把开源命令行程序自动转换成「无源」训练环境——智能体只能看到编译后的参考可执行文件及其公开文档,必须独立走过完整的软件开发生命循环直至产出可编译提交。在此之上,用强教师智能体(GLM-5.2)大规模收集覆盖全生命周期的程序合成轨迹,再通过两条精炼流程把它们清洗成高质量监督数据,蒸馏到 27B 参数的小模型(Qwen3.6-27B)中。最终目标是用一个 27B 小模型在 ProgramBench 上逼近甚至超越体量大得多的前沿模型,并验证这种全生命周期监督能在七个未参与训练的软件工程基准上跨任务泛化。

与已有工作不同的是,本文最独特的切入角度是把「无源黑盒」这一原本只用于评测的设定(如 ProgramBench、MirrorCode)重新用作训练数据生成器——既有 ProgramBench/MirrorCode 用于评估前沿模型,而 MindForge 反过来用它来生产训练数据。这一翻转带来三重好处:第一,天然规避源码级污染(智能体全程不见源码,训练仓库与评测仓库完全不相交);第二,覆盖完整生命周期(规范探索、设计、实现、调试、测试、精炼六阶段)而非单阶段;第三,跨 6 种编译型语言(Go、Rust、C、C++、Swift、TS)。这与以往仅靠短程、单阶段、Python 中心、源码可见的蒸馏工作形成本质区别。

核心方法

直觉上,MindForge 把「真实开源项目」隔离成「黑盒考试题」,让一个会做题的强老师把整场考试过程(从读说明书、做设计、写代码、查 bug 到交卷)演示给小模型看。技术路线分两阶段:第一阶段「可执行程序环境构建」把 2,235 个候选仓库层层筛选成 562 个可复现、无源码泄漏的 cleanroom Docker 镜像;第二阶段「轨迹收集与精炼」让 GLM-5.2 教师在 cleanroom 里用 mini-swe-agent 解题,产生 1,001 条完整轨迹,再用「基础设施噪声恢复」和「推理重写」两条流程清洗,最终留下 973 条用于 SFT Qwen3.6-27B。整个过程像一条「软件资产 → 蒸馏级训练数据」的工厂流水线,把可执行软件自动转换为能传递长程软件工程能力的高质量监督信号。

核心创新是把「无源评测设定」改造成「无源训练设定」,并配套两条独特的轨迹精炼机制。第一是基础设施噪声恢复:当教师轨迹因 API 错误、沙箱崩溃等瞬时故障被中断时,不丢弃整条轨迹,而是回退到最后一个健康步、在干净环境里重放已记录的工具调用前缀(重放过程中不调用教师模型推理),再从该点续生成——这避免了重新求解已完成的前缀,大幅节省推理成本。第二是推理重写:教师也会犯工具调用错误,简单删除会留下「孤立的反思」造成语义断裂,于是只用 GLM-5.2 重写受影响的推理文本,并通过安全检查后才接受——关键约束是绝不触碰工具调用本身和程序输出记录,从而只改善叙述连贯性而不篡改教师的真实行为。两条流程都遵循「尽可能保留原始成功轨迹」的原则。

方法步骤详情

环境构建五步走:(1) 仓库选择:从 awesome CLI 合集拉取 2,235 个仓库并 pin 到最新 commit,确保与评测基准仓库不相交;(2) 离线筛查:explorer agent(Qwen3.5-397B-A17B)只读源码与文档,判定是否为自包含 CLI 工具,拒绝依赖公网/凭据/特殊硬件者,剩 1,206 个;(3) 构建发现:builder agent 生成自包含的 mindforge_build.sh,能从干净 checkout 编译出参考可执行文件与(可能的话)带覆盖率的 instrumented 可执行文件,剩 1,002 个跨 15 种语言;(4) 行为等价校验:在全新沙箱用 pinned 源码快照重跑脚本,并在重建产物与 builder 产物上重放行为检查,要求退出码/stdout/stderr 三者完全一致,否则重试;(5) 无源检查:把可执行文件编译成原生二进制(ELF/Mach-O/PE),扫描字节与字符串里能泄漏构建痕迹的标记,泄漏则重试,仍泄漏则丢弃。最终剩 562 个跨 6 种编译型语言的 cleanroom 镜像。轨迹收集:GLM-5.2 在镜像内用 mini-swe-agent 解题,只保留以显式完成命令结尾且 compile.sh 能编译出可执行文件的轨迹,得到 1,001 条;经 256K token 长度过滤后 973 条进入 SFT。训练:MS-Swift + Megatron 后端、sequence packing、micro-batch 1、global batch 96、8 epochs、AdamW($\beta_1{=}0.9, \beta_2{=}0.98$,weight decay 0.04)、峰值学习率 $\eta = 4\times 10^{-5}$ 线性预热 10% 后余弦衰减到 $4\times 10^{-6}$、梯度裁剪范数 1.0、seed 1105,损失只对 assistant 生成的推理/自然语言/工具调用 token 计算。

技术新颖性

技术新颖性体现在四点。第一,首个把无源黑盒设定系统化用作训练而非评测的流水线,配套自动化环境构建 + 轨迹精炼 + 蒸馏完整开源。第二,轨迹是「全生命周期」的——平均 181.6 轮、最长 272K token,覆盖规范探索(99.1% 轨迹)、设计(87.1%)、实现(99.7%)、bug 定位(59.4%)、bug 修复(62.6%)、验证(83.7%)、精炼(64.2%)七大阶段;而以往蒸馏语料 95 分位仍局限在 32K 上下文的短程任务。第三,两条精炼机制设计精细——基础设施恢复做「前缀重放不重新推理」省成本,推理重写做「只改叙述不动行为」保真度。第四,所有环境构建 agent 都遵循 propose-then-check 模式:agent 在自己沙箱内产出,host 在它够不到的全新沙箱里重放校验,杜绝自审通过;这种「双校验 + 隔离重放」的工程范式是可规模化与抗污染的关键。

Illustrative infrastructure-noise recovery
Figure 3: Illustrative infrastructure-noise recovery
Reasoning rewrite after malformed tool use
Figure 4: Reasoning rewrite after malformed tool use
Four manually examined trajectories exercising different SE life-cycle activities
Figure 5: Four manually examined trajectories exercising different SE life-cycle activities

实验结果

ProgramBench 主战场上,MindForge-27B 把 Qwen3.6-27B 的平均测试通过率从 37.98% 提升到 49.51%,绝对 +11.53pp、相对 +30.4%,超过 DeepSeek V4 Pro(47.80%)、逼近 GLM-5.1(50.90%)与 Opus 4.7(51.38%),但仍有差距于教师 GLM-5.2(64.60%)和 GPT-5.5(56.50%)。在 200 个任务上,152 个严格变好、43 个变差、5 个持平,说明增益来自训练配方而非个别离群任务;5 个实例通过率超 95%(达到「几乎解决」标准,匹敌 Opus 4.6),cmatrix 实例拿到 100%——此前只有 GPT-5.5 在 High/xHigh 推理模式做到过。跨任务泛化更亮眼:七个未参与训练的基准、八种评测设置全部提升,且 Holm 校正后全部 $p<0.05$。最大绝对增益在 RepoZero C2Rust(47.00→78.00,+31.00pp),最大相对增益在 DeepSWE(1.76→15.92,9.0 倍);NL2Repo 带测试 +10.70pp、不带 +4.56pp;SWE-bench Verified +5.04、Pro +5.93、Multilingual +5.22、FeatBench +4.94。行为分析揭示了为何有效:平均轮次 344→735.7、工具调用 174.4→373.0(甚至超过教师的 186.6),但命令失败率反降 10.98%→9.35%——即「干得更多、错得更少」;token 总耗 2.03B→11.64B(5.7 倍),出现过 830 轮/848 工具调用/209.5M token 的极端长跑,证明是持续有效的坚持而非更长更吵;推理后立即编辑率 27.8%→50.1%、失败恢复后立即编辑率 31.8%→48.8%,逼近 GLM-5.2 的 61.4%/64.0%;对参考可执行文件的探查覆盖率 49.34%→58.39%,154/200 实例覆盖更高。

Statistics of generated trajectories
Table 1: Statistics of generated trajectories
Coverage of each development activity over the 1,001 trajectories
Table 2: Coverage of each development activity over the 1,001 trajectories
Comparison between MindForge-27B, base model, and frontier models
Table 3: Comparison between MindForge-27B, base model, and frontier models
Agentic Operational Metrics and Behavioral Transitions across Models
Table 4: Agentic Operational Metrics and Behavioral Transitions across Models
Funnel rules the explorer agent must resolve for each candidate
Table 5: Funnel rules the explorer agent must resolve for each candidate
Operational rules used to identify software engineering activities
Table 7: Operational rules used to identify software engineering activities
Verifier outcomes on overlapping evaluation instances
Table 8: Verifier outcomes on overlapping evaluation instances
Paired significance tests
Table 9: Paired significance tests
Average ProgramBench test pass rate by model scale
Figure 1: Average ProgramBench test pass rate by model scale
Generalization to seven software-engineering benchmarks across eight evaluation settings
Figure 2: Generalization to seven software-engineering benchmarks across eight evaluation settings
查看结构化数据
任务指标本文基线提升
ProgramBench(200 实例,从零重建 CLI 程序) 平均测试通过率 49.51% Qwen3.6-27B base 37.98% +11.53pp(相对 +30.4%),Wilcoxon $p=2.38\times10^{-14}$
RepoZero-C2Rust(200 实例,端到端仓库翻译) 全通过率 78.00% 47.00% +31.00pp(最大绝对增益),McNemar $p=6.39\times10^{-15}$
DeepSWE(113 实例,原始长程工程任务) 解决率 15.92% 1.76% +14.16pp(9.0× 相对增益),McNemar $p=4.02\times10^{-4}$
NL2Repo-Bench 带测试(104 实例,自然语言到仓库生成) 通过率 71.97% 61.27% +10.70pp
NL2Repo-Bench 不带测试(104 实例) 通过率 23.48% 18.92% +4.56pp
SWE-bench Verified(500 实例,issue 解决) 解决率 73.84% 68.80% +5.04pp,$p_{\text{Holm}}=2.52\times10^{-4}$
SWE-bench Pro(731 实例,企业级长程任务) 解决率 51.34% 45.41% +5.93pp,$p_{\text{Holm}}=1.68\times10^{-8}$
SWE-bench Multilingual(300 实例,多语言 issue) 解决率 67.77% 62.55% +5.22pp
FeatBench(155 实例,自然语言功能实现) 解决率 55.05% 50.10% +4.94pp,$p_{\text{Holm}}=0.033$

局限与改进

作者坦承三点局限。第一,活动覆盖分析依赖规则解析器(Table 7)而非人工标注或 LLM 判官,会产生假阳/假阴:隐式设计可能没有匹配短语,蓄意失败的负向测试可能被误判为 bug 触发,成功后的编辑只是精炼的操作化代理;这套分析只能证明轨迹暴露了广泛的多阶段信号,不能建立这些信号与下游泛化增益的因果关系。第二,方法论上 10/15 事件窗口在召回与精度间做了取舍。第三,论文未给出每阶段的精度/召回与不确定性。我自己观察到更多局限:与前沿模型仍有显著差距(GLM-5.2 64.60% vs MindForge 49.51%);200 个 ProgramBench 实例仅 1 个拿到 100%,说明从零构建对当前最强模型仍是巨大挑战;训练语言分布严重偏斜(Go 41.1%、Rust 37.7%,Swift 仅 2 个、TS 仅 1 个,且不含 ProgramBench 测试集里的 Java/Haskell),泛化到这些低资源语言的能力存疑;推理成本爆炸式上升(5.7 倍 token、极端单次 209.5M token),生产部署不现实。

独立分析的弱点

第一,推理成本与延迟爆炸:平均 token 消耗增长 5.7 倍、极端单次 209.5M token、平均 735 轮,对实际产品部署几乎不可行;改进方向是用更轻量的教师(如 7B 级)蒸馏、或加入 RL 阶段让模型学会更早收敛。第二,对教师质量高度依赖:整套数据由 GLM-5.2 产生,教师自身 7.15% 的命令失败率、以及它的能力上限会成为学生天花板;可考虑多教师混合、或基于学生 rollout 的迭代训练(如 Rastogi et al. 2025)打破这一上限。第三,训练集语言与任务分布偏斜:562 个程序几乎全是 Go/Rust CLI,Swift/TS 几乎缺席,且只覆盖编译型语言;要扩展到脚本语言、Web 服务、移动应用需重新设计环境构建。第四,覆盖分析的因果性未建立:仅靠规则解析统计活动出现频率,无法证明「设计阶段出现」就是泛化的原因;改进方向是分层人工抽检 + LLM judge 校准,再辅以消融实验(如只保留某阶段的轨迹)做因果验证。第五,评测污染虽小但存在:DeepSWE 与 SWE-Multilingual 各有 2-3 个仓库与训练池重叠(共 17 个评测实例),尽管任务表述不同,仍可作为更严格去污的改进点。

未来方向

作者明确提出的方向:把构建出的 instrumented coverage 镜像作为辅助工件发布,供后续研究探索长程智能体运行期间的执行轨迹与代码覆盖;用分层人工抽检或对齐人工标注的 LLM judge 来校准活动覆盖估计并报告每阶段精度/召回与不确定性。基于本成果可延伸的方向:其一,在 SFT 之上叠加强化学习(如 SWE-RL 的规则奖励、CWM 的世界模型奖励),用环境反馈进一步打磨 27B 模型;其二,把同一流水线迁移到其他「从零构建」基准(RPG、MirrorCode、DeNovoSWE)做横向比较;其三,结合 Qwen3.5 这类原生多模态 agent,让模型能读 README 截图、TUI 录屏来推断规范;其四,把「推理重写」机制扩展为更通用的「轨迹自修复」工具,处理教师 hallucination、重复无效调用等更复杂的噪声。

复现评估

复现友好度较高。作者承诺完整开源:环境构建、验证、轨迹精炼、蒸馏全流程代码,以及产出的环境、轨迹、MindForge-27B 权重。使用的主流工具均开源——mini-swe-agent、MS-Swift、Megatron-LM。训练超参交代细致:micro-batch 1、global batch 96、8 epochs、AdamW($\beta_1{=}0.9, \beta_2{=}0.98$,wd 0.04)、峰值 $\eta=4\times10^{-5}$、余弦衰减到 $4\times10^{-6}$、预热 10%、梯度裁剪 1.0、seed 1105、bfloat16。困难在于:(1) 环境构建与轨迹收集依赖 Kubernetes 集群管理大量一次性沙箱容器,工程门槛高;(2) 教师是 GLM-5.2(Z.ai 商用 API),轨迹收集总成本巨大(1,001 条 × 平均 182K token × 多轮推理),个人研究者难以承担;(3) 27B 模型 8 epochs 的 SFT 在多卡集群上才能跑。数据去污分析(Appendix C.2)、统计显著性(Appendix D)、活动挖掘规则(Appendix C.1)也都公开,便于复现实验结论。综合评估:方法学高度可复现,端到端重跑成本偏高但可分阶段复现。