← 返回 2026-03-13

通过重建来理解:逆转软件开发过程以用于大语言模型预训练 Understanding by Reconstruction: Reversing the Software Development Process for LLM Pretraining

Zhiyuan Zeng, Yichi Zhang, Yong Shan, Kai Hua, Siyuan Fang, Zhaiyu Liu, Jiaheng Liu, Haozhe Wang, Yining Zheng, Ming Ding, Ke Shen, Ge Zhang, Wenhao Huang, Xipeng Qiu 📅 2026-03-11 👍 9 2026-07-13 08:36
代码LLM 合成数据 推理链优化 智能体轨迹 预训练

把代码仓库逆向合成多智能体开发轨迹,用搜索优化CoT,做持续预训练。

前置知识

持续预训练(Continual Pre-training)

持续预训练是指在一个已经预训练好的模型基础上,使用新的数据继续进行自回归语言建模训练,而非从零开始训练或只做监督微调(SFT)。它的特点是数据规模通常远大于 SFT(本文使用 20B tokens 而 SFT 一般只有几万到几百万条样本),并且不依赖精心构造的指令-答案对,因此对数据中的噪声和偏差具有更强的鲁棒性。本文选择持续预训练而非 SFT,正是因为合成的智能体轨迹不可避免地包含 LLM 幻觉和工作流本身引入的噪声,需要大数据量稀释。

理解为何作者选择 continual pre-training 是读懂本文方法论的关键,因为它直接决定了合成数据的使用方式——不是问答对,而是长程、多步、可被扁平化为文档的训练语料。

多智能体系统与工具调用(Multi-Agent & Tool Use)

多智能体系统是指由多个具备不同角色的 LLM 协同完成任务的工作流,每个 agent 都有自己的 system prompt、记忆和可调用的工具。在本文的设定中,主智能体(Main Agent)负责高层规划——生成项目需求和文件实现顺序,并委派子智能体(Sub-Agent)实现具体文件;子智能体则通过 Read 工具读取其他文件的内容作为上下文,再通过 Write 工具生成目标文件的代码。整个流程被序列化为 (Think, Action, Observation) 的三元组轨迹,类似于 ReAct 或 SWE-Agent 的工作方式,但本文的关键创新是用一个强 LLM 通过提示工程模拟整个轨迹,而不是真的运行 agent。

这是本文框架的核心抽象。理解 Main/Sub-Agent 的职责分工和 Read/Write 工具的语义,是把握"如何把仓库变成轨迹"这一核心思路的前提。

Chain-of-Thought(CoT)与 LongCoT 优化

Chain-of-Thought 是指 LLM 在给出最终答案前生成的一系列中间推理步骤,被证明能显著提升复杂任务的性能。LongCoT 是更细粒度的概念,指每一步推理本身可以被进一步分解为多个细颗粒度的"思维动作"。本文提出的关键改进是:初始由 LLM 模拟生成的 CoT 可能质量不高,因此采用一种搜索式优化——对每个 CoT 步骤 $z_i$ 采样 $k$ 个候选改进版本,分别计算在候选条件下的目标代码困惑度 $\text{PPL}(x|z_{\text{cand}})$,只有当某候选让代码困惑度下降时才替换原始步骤。形式化目标是 $z^* = \arg\max_z \log p(x|z)$,即寻找使目标代码似然最大的推理路径。

LongCoT 优化是本文"理解即重建"范式中让合成数据"变好"的关键环节。如果只看流水线而不理解搜索式 CoT 优化的逻辑,就无法理解为什么 Repo2Agent-Search 在 HumanEval 上能从 16.46 涨到 37.20。

AST 与依赖图(Abstract Syntax Tree & Dependency Graph)

AST 是源代码的树形结构表示,每个节点对应一个语法单元(如类、函数、导入语句)。本文利用 AST 解析每个文件的内部结构(类与函数定义),用来为 Sub-Agent 提供实现规划时的结构信息。依赖图则是基于 import 语句分析得到的有向图,节点是文件,边表示"A 依赖 B"的导入关系,用于在 Read 工具模拟时决定哪些文件可被读取以及读取顺序。这两类信息都是从源仓库提取的"结构性真实信息",被注入到 LLM 的提示中以防止模拟轨迹偏离事实。

本文反复强调"grounding simulation with extracted information",AST 和依赖图正是这种 grounding 的核心技术手段。如果不理解这些结构信息的作用,就无法理解为什么在 Read 工具的响应中直接替换为真实文件内容、Write 工具的输出替换为真实代码。

Perplexity(PPL)作为推理质量的代理指标

困惑度是语言模型对一段文本预测能力的标准度量,定义为 $\text{PPL}(x) = \exp(-\frac{1}{N}\sum_{i=1}^{N} \log p(x_i|x_{<i}))$,值越低表示模型对文本越不"惊讶"。本文巧妙地把这一指标用于推理质量评估:如果一段改进后的 CoT 能让目标代码 $x$ 在该 CoT 条件下的 PPL 降低,就说明该 CoT 让代码生成变得更"自然",即推理更接近正确答案的因果路径。优化形式化为 $z_i^* \leftarrow z_i'$ if $\text{PPL}(x|z_1,...,z_i',...,z_n) < \text{PPL}(x|z_1,...,z_i,...,z_n)$。

PPL 既是优化目标,也是评估指标(Figure 3b 显示 PPL 随迭代轮数单调下降)。理解 PPL 的语义和它在搜索式 CoT 优化中的"奖励函数"角色,是理解整个方法第二阶段的关键。

研究动机

当前主流代码大语言模型(如 Qwen2-Coder、DeepSeek-Coder)的预训练数据主要由静态软件仓库组成,但仓库实际上是开发过程的"终态"——人类工程师的需求分析、架构规划、试错调试、迭代重构等推理步骤都被压缩进了最终代码里。当模型只在静态代码上训练 next-token prediction 时,本质上是在"记住终点而不展示路径",这导致两个具体后果:第一,模型擅长生成短片段(snippet)但在需要长程因果推理的复杂软件工程任务上表现不佳,作者引用了 SWE-Synth [19] 等工作的观察来佐证;第二,即使在 Ruler/Helmet 等长上下文基准上,能够处理长文档也未必能处理长程的因果依赖,因为代码的"结构信号"被表达为最终的 AST 而不是逐步的构建过程。已有工作 Quiet-STaR [38]、BOLT [18]、TPT [32]、REER [30] 都尝试从静态文本恢复推理步骤,但都聚焦于"孤立的推理片段"——要么在 token 级别,要么在段落级别——而非整个软件仓库开发这一完整的多步骤、多工具交互的智能体过程。此外,两类现有合成 agent 轨迹方法也有明显短板:一类需要在真实环境中让 agent 探索(如 SWE-Bench 设置),工具调用成本和工程开销极大;另一类用 LLM 模拟整个轨迹(如本文 §2.2 所引工作),虽然成本低但容易产生幻觉,损害数据可靠性。

本文的目标是本文的核心目标是定义并验证一种新的预训练数据范式——"理解即重建(understanding via reconstruction)"——即要让 LLM 学会重建产生目标代码的完整智能体轨迹,包括规划、文件级动作序列、迭代工具使用和隐式推理链,而不仅仅是代码本身。具体地,作者希望构建一个从静态仓库自动合成大规模 agentic trajectory 数据集的两阶段框架:第一阶段用多智能体模拟从仓库还原轨迹,第二阶段用基于搜索的 CoT 优化提升推理质量,最终通过在 Llama-3-8B-Instruct 上持续预训练 20B tokens(其中 12% 为新合成的轨迹数据)来验证假设。他们追求的不只是某个基准的提升,而是在长上下文理解、代码生成、推理和智能体能力四个维度的全面增益。

与已有工作不同的是,本文的独特切入角度有三点。第一,与 REER [30] 等只恢复"开放式生成的逻辑骨架"的工作相比,本文重建的是"完整的智能体轨迹"——包含高层架构规划、文件级动作排序和迭代工具使用,这种多维度的完整重建更贴近真实软件工程开发过程。第二,与现有合成 agent 轨迹方法相比,本文显式地通过从源仓库提取结构性真实信息(文件树、依赖图、AST)来 grounding 模拟过程——具体做法是直接用真实文件内容替换 Read 工具的响应、用真实代码替换 Write 工具的输出——从而在保留 LLM 生成的"思考过程"的同时,把"动作和结果"锚定到事实。第三,本文首次把"基于搜索的 CoT 优化"应用到了智能体轨迹这一粒度:之前 REER 的优化目标是开放式问答的最终答案,而本文的目标是整个仓库的开发轨迹,优化信号的计算对象也变成了具体的代码文件 PPL。

核心方法

本文方法的核心直觉可以用费曼的名言"凡我不能创造的,我并不理解"来概括:当前 LLM 在软件工程上的局限不是因为它们见过代码太少,而是因为它们只见过"终态"没见过"过程"。因此方法的关键就是"逆转开发过程"——把静态仓库当成 ground-truth 答案,用 LLM 反向模拟出产生该答案所需的规划、思考、工具调用序列。整体技术路线分两大阶段:第一阶段(Multi-Agent Trajectory Curation)用 Qwen3-30B-A3B-Instruct-2507 这一强模型扮演 Main/Sub-Agent,通过精心设计的 prompt 和从仓库抽取的结构信息(文件树、依赖图、AST),合成 4B tokens 的 agentic trajectory;第二阶段(LongCoT Optimization via Search)对轨迹中的每个 CoT 步骤进行迭代搜索式优化——每个步骤采样 $k=2$ 个候选,用目标代码的 PPL 作为打分,只接受让 PPL 下降的候选,迭代 3 轮。最终数据集由 30 万个 GitHub 仓库(约 4B tokens)合成而来,用于 Llama-3-8B-Instruct 的 20B tokens 持续预训练,其中轨迹数据占 12%。

本文的核心创新点是与已有方法的本质区别集中在三方面。第一个区别是数据形态——"agentic trajectory vs. raw code"。已有的 code LLM 训练范式(无论是 DeepSeek-Coder 还是 Qwen2-Coder)都把仓库当成纯文本预训练语料,而本文把仓库展开成一个包含 Main-Agent 规划、Sub-Agent 实现、Read/Write 工具交互和 Observation 的完整长文档。第二个区别是"grounding 策略"——以往 LLM 模拟轨迹的方法任由 LLM 自由发挥(导致幻觉),本文通过把 Read 工具响应替换为真实文件内容、Write 工具输出替换为真实代码,让"思考可以自由但动作必须真实"。第三个区别是"优化粒度"——REER [30] 的搜索式优化针对单条问答的最终答案,本文把同一思想扩展到整个仓库级别的开发轨迹,并通过 Figure 3 的分析证明 PPL 会随迭代轮数单调下降、CoT 长度同步增加,从经验上验证了搜索式优化的有效性。这三点结合起来,使得合成数据同时具备"过程的因果完整性"和"推理的逻辑严密性"。

方法步骤详情

方法的具体步骤可以分解为以下七步。第一步,数据筛选与仓库预处理:从 GitHub 上筛选约 30 万个仓库(剔除过短和过长的),作为待合成语料。第二步,结构信息抽取:对每个仓库抽取三类 ground-truth 信息——文件结构树(用于指导 Main-Agent 的实现规划)、基于 import 语句的跨文件依赖图(用于模拟 Read 工具的访问路径)、基于 AST 的文件内部结构(用于 Sub-Agent 的实现规划)。第三步,Main-Agent 轨迹模拟:用一个 prompt 让 LLM 扮演 Main-Agent,输入是仓库代码 + 文件树,输出是一个 JSON 列表,包含 system prompt、用户需求、Main-Agent 的思考、调用 code_generator 子智能体的动作、工具响应等步骤;Main-Agent 负责生成项目需求文档和按依赖顺序的文件实现计划。第四步,Sub-Agent 轨迹模拟:对实现计划中的每个文件,用一个独立的 prompt 让 LLM 扮演 code_generator Sub-Agent,输入是仓库需求 + 文件树 + 文件名 + 文件级需求 + 真实代码(作为 ground-truth 引导但不让 agent 看见)+ 相关依赖文件代码,输出是包含 Think-Read-Observation-Think-Write-Observation 序列的 JSON。第五步,grounding 替换:把 Sub-Agent 模拟过程中 Read 工具的响应替换为对应文件的真实内容,把 Write 工具的最终输出替换为真实代码,从而保证轨迹的"事实正确性"。第六步,LongCoT 搜索式优化:对每个 CoT 步骤 $z_i$,采样 $k=2$ 个候选 $z_i'$,计算目标代码 $x$ 的 $\text{PPL}(x|z_1,...,z_i',...,z_n)$,若新 PPL 严格小于原 PPL,则用 $z_i'$ 永久替换 $z_i$;本文迭代 3 轮。第七步,轨迹扁平化与训练数据构造:把 Main-Agent 与所有 Sub-Agent 的嵌套交互递归展开成一个单一的长序列文档(类似 Table 1 所示的扁平格式),但对 Observation tokens 施加 loss mask——模型只学习预测 Think 和 Action tokens,而不被迫记忆工具响应;最终将这个长文档作为持续预训练的自回归训练样本。

技术新颖性

本文的技术新颖性体现在四个层面。第一,"理解即重建"这一数据哲学的提法本身具有新意:作者把它形式化为 $z^* = \arg\max_z \log p(x|z)$,即把代码生成这一条件生成问题反过来变成对最优推理路径的搜索问题,并指出这与 RL 的联系(log p(x|z) 可被视为 reward),但本文选择 inference-time search 以避开 RL 训练的不稳定性。第二,grounding-aware 的多智能体模拟是一种新的"半合成"数据范式:推理完全由 LLM 生成但动作和结果由真实仓库约束,这种 hybrid 设计既保留了 LLM 的多样性又保证了事实性。第三,"针对长程代码生成的搜索式 CoT 优化"是 REER [30] 思想在大粒度数据上的首次应用,并通过 Figure 3 的实验现象(PPL 随迭代轮数从高到低、CoT 长度从 900 涨到 2300)从经验上证明了它的有效性。第四,loss masking Observation tokens 这一训练技巧的灵感来自对"避免模型记忆反馈"的清晰动机分析——因为 Observation 通常是确定性的(给定文件内容是唯一的),强行让模型预测 Observation 只会鼓励表面复制,而非学习因果推理链。

合成智能体轨迹的流水线
Figure 1: 合成智能体轨迹的流水线

实验结果

本文的核心实验结论可以分四个维度展开。第一个维度是长上下文理解(Table 2/5/6):在 Ruler 基准上,Repo2Agent-Search 在 16k/32k/64k 三个长度上的平均得分分别为 87.10/84.40/61.80,分别超过 Raw-Repo 基线 0.20/1.20/0.80 分,并且在 64k 这一最苛刻长度上甚至超过了 Prolong 这一外部 SOTA 基线(Prolong 在 64k 上仅 57.10);具体到子任务,Repo2Agent-Search 在 RULER-CWE(常见词提取)32k 上达到 42.30 分,远超 Raw-Repo 的 34.60;在 NIAH-Multi 64k 上达到 80.40(Prolong 仅 66.20)。Helmet 基准上同样观察到一致的领先——Repo2Agent-Search 在 32k 平均 62.65(Raw-Repo 60.98,Prolong 61.57),其中 Recall 32k 达到 99.81、ICL 16k 达到 73.52,均为最优。第二个维度是代码能力(Table 3):在 HumanEval 上,Repo2Agent-Search 达到 37.20,相比 Raw-Repo 的 34.76 提升 2.44 分,相对增幅 7%,相比 Prolong 基线的 16.46 提升超过 125%;LongCodeBench-32k 上 Repo2Agent-Search 拿到 36.46,超过 Prolong 的 29.38 和 Raw-Repo 的 34.16。第三个维度是推理迁移(Table 3):尽管没有数学专用微调,Repo2Agent-Search 在 MATH 上达到 3.76(Prolong 1.64,Raw-Repo 2.18),在 BBH 上达到 67.03(Prolong 66.69),在 AGI-Eval 上达到 36.85(Prolong 36.91)——说明结构化的智能体轨迹对一般推理也有正面迁移。第四个维度是智能体能力(Table 4,APTBench):Repo2Agent 在 Issue-Fix 类别上以 34.84 平均分领先(Raw-Repo 33.72),Repo2Agent-Search 在 Env-Setup 类别以 21.61 平均分领先,特别是在 Error 子任务上达到 24.49——说明 search 优化更适合教授细粒度调试逻辑,而原始 CoT 更适合教授整体规划。综合分析(Figure 2/3)显示:搜索优化使 Sub-Agent-Call-Think tokens 从 900 翻倍到 2300,每个仓库的平均 token 数从原始代码的 4865.5 增长到 12083.4(增加约 2.5×),而 PPL 随迭代轮数从初始值稳定下降,CoT 长度则持续上升——证实了搜索优化确实在"展开更细的推理"而非简单重写。

合成的智能体轨迹示例
Table 1: 合成的智能体轨迹示例
长上下文理解性能汇总 (Ruler & Helmet)
Table 2: 长上下文理解性能汇总 (Ruler & Helmet)
推理与代码基准结果 (AGI-Eval, BBH, GSM-8k, MATH, Human-Eval, LongCodeBench)
Table 3: 推理与代码基准结果 (AGI-Eval, BBH, GSM-8k, MATH, Human-Eval, LongCodeBench)
APTBench 结果 (合并中英文子任务)
Table 4: APTBench 结果 (合并中英文子任务)
Ruler 详细结果
Table 5: Ruler 详细结果
Helmet 详细结果
Table 6: Helmet 详细结果
轨迹的 token 分布与长度 (a) 组成成分 (b) 仓库平均长度
Figure 2: 轨迹的 token 分布与长度 (a) 组成成分 (b) 仓库平均长度
CoT 长度 (a) 与代码 PPL (b) 随搜索迭代轮数的变化
Figure 3: CoT 长度 (a) 与代码 PPL (b) 随搜索迭代轮数的变化
查看结构化数据
任务指标本文基线提升
HumanEval (代码生成) Pass@1 (%) 37.20 (Repo2Agent-Search) 16.46 (Prolong) / 34.76 (Raw-Repo) 相对 Prolong +126%;相对 Raw-Repo +7%
LongCodeBench-32k (长上下文代码) Average Score (%) 36.46 (Repo2Agent-Search) 29.38 (Prolong) / 34.16 (Raw-Repo) 相对 Prolong +24%;相对 Raw-Repo +6.7%
LongCodeBench-64k (长上下文代码) Average Score (%) 31.05 (Repo2Agent) / 30.26 (Repo2Agent-Search) 30.52 (Prolong) / 27.37 (Raw-Repo) Repo2Agent 超过所有基线
RULER 16k 平均 Average Score (%) 87.50 (Repo2Agent) / 87.10 (Repo2Agent-Search) 83.61 (Prolong) / 86.90 (Raw-Repo) 相对 Raw-Repo +0.6~0.7
RULER 32k 平均 Average Score (%) 84.40 (Repo2Agent-Search) 81.77 (Prolong) / 83.20 (Raw-Repo) 相对 Prolong +3.2%;相对 Raw-Repo +1.4%
RULER 64k 平均 Average Score (%) 61.80 (Repo2Agent-Search) 57.10 (Prolong) / 61.00 (Raw-Repo) 相对 Prolong +8.2%;相对 Raw-Repo +1.3%
Helmet 32k 平均 Average Score (%) 62.65 (Repo2Agent-Search) 61.57 (Prolong) / 60.98 (Raw-Repo) 相对 Prolong +1.8%;相对 Raw-Repo +2.7%
BBH (推理) Average Score (%) 67.03 (Repo2Agent-Search) 66.69 (Prolong) / 66.27 (Raw-Repo) 微幅领先 Raw-Repo
MATH (数学推理) Accuracy (%) 3.76 (Repo2Agent-Search) 1.64 (Prolong) / 2.18 (Raw-Repo) 相对 Prolong +129%;相对 Raw-Repo +73%
AGI-Eval Average Score (%) 36.85 (Repo2Agent-Search) 36.91 (Prolong) / 35.78 (Raw-Repo) 接近 Prolong,超过 Raw-Repo +3%
APTBench Issue-Fix 平均 Average Score (%) 34.84 (Repo2Agent) 33.72 (Raw-Repo) +3.3%
APTBench Env-Setup 平均 Average Score (%) 21.61 (Repo2Agent-Search) 20.61 (Raw-Repo) +4.9%

局限与改进

本文的局限性可从作者承认和读者观察两方面总结。作者承认的局限包括:第一,合成数据不可避免包含 LLM 幻觉和工作流偏差,论文在 §3.3 中明确指出这是选择持续预训练而非 SFT 的主要原因;第二,搜索式 CoT 优化的计算开销很大,每个 CoT 步骤需要 $k=2$ 次重采样并计算完整轨迹下的代码 PPL,论文承认这一开销但未给出具体成本数字。从读者观察的角度看,还有一些更深层的局限:第一,方法依赖于 Qwen3-30B-A3B-Instruct-2507 这一个特定强模型作为模拟器,其模拟质量的天花板由该模型决定,论文没有做模拟器选型对最终数据质量的消融;第二,搜索式优化使用的 PPL 计算本身就需要一个代码 LLM,论文未明确这一打分模型与最终训练模型 Llama-3-8B 的关系(是同一族还是 Qwen?),如果打分模型本身就是最终训练目标,可能存在优化偏差;第三,方法假设"仓库可由单一Main-Agent + 多个Sub-Agent 顺序开发",但真实的开源软件开发涉及多人协作、PR review、CI 反馈等复杂机制,本文抽象可能过于简化;第四,损失函数对 Observation tokens 的 mask 处理虽然有清晰动机,但作者没有给出这一选择相对于"mask 全部非-Think tokens"或"不 mask"的消融;第五,实验仅在 Llama-3-8B 这一个 8B 规模模型上验证,未在更大模型(如 70B)或不同 code 专用模型(如 CodeLlama、Qwen2.5-Coder)上验证方法的通用性;第六,本文完全使用英文 GitHub 仓库,没有跨语言(如中文仓库)或跨范式(如 Jupyter notebook、Rust crates)的探索。

独立分析的弱点

经过对论文的独立分析,可以识别出以下几个具体的弱点并给出改进方向。第一,模拟器选型单一——论文固定使用 Qwen3-30B-A3B-Instruct-2507 作为轨迹生成器,没有探索其他模拟器(如 Claude-3.5-Sonnet、GPT-4o、DeepSeek-V3)的影响。改进方向是引入"模拟器多样性"——对每个仓库用 $N$ 个不同模型分别生成轨迹,再通过投票或 ranking 选出最优,类似于 self-consistency 的多采样思路。第二,搜索式 CoT 优化的奖励信号 PPL 本身具有内在噪声——一次 PPL 评估可能因采样随机性而波动,导致 step 之间的接受/拒绝决策不稳定。改进方向是引入多采样平均 PPL(如对每个候选生成 $m$ 个候选代码估计 $\mathbb{E}[\text{PPL}]$),或者用对比学习方法训练一个专门的 reasoning-quality scorer 替代 PPL。第三,Observation mask 缺乏消融——作者没有说明 mask 掉 Observation 是否真的优于 mask 全部非-Think 或不 mask 的版本。改进方向是增加一组消融实验,比较三种 mask 策略在 HumanEval 等小基准上的差异。第四,方法的端到端计算成本未被披露——合成 4B tokens 的轨迹需要多少 GPU hours?搜索优化每次迭代需要多少次 PPL 调用?这一信息对方法的可复现性至关重要。改进方向是在附录中提供完整的算力账单。第五,跨模型族迁移性未被验证——本文仅在 Llama-3-8B 上训练,未在 Qwen2.5、DeepSeek-Coder 等其他 code LLM 上验证。改进方向是增加至少一个不同族模型的对照实验。第六,方法对仓库类型高度敏感——300k 仓库的质量筛选标准("too short/long")未明确定义阈值,也没有分析 Python/Java/JS 等语言的分布。改进方向是给出仓库语言分布直方图和长度过滤的具体阈值。

未来方向

作者在论文结尾指出了几个未来方向,结合其成果可作如下延伸。第一,作者提到该框架的核心目的不是训练 agent 而是构建预训练语料,因此一个直接延伸是把该范式推广到非软件工程领域——例如把数学证明、论文写作、实验设计等过程类似的领域也合成相应的轨迹数据,用相同的"理解即重建"逻辑训练更强的领域 LLM。第二,本文只探索了 Llama-3-8B 的 8B 规模,未来工作可以尝试在 70B 甚至更大的模型上重复实验,验证规模放大后 agentic trajectory 数据是否仍有边际收益(按 Chinchilla 风格的数据-参数缩放规律推断应该有)。第三,作者承认合成数据包含噪声,一个有意义的未来方向是把本文的合成方法与 RLHF 或 DPO 相结合——先用合成轨迹做持续预训练,再在 human-annotated 的偏好对上做对齐,从而弥补模拟器幻觉带来的偏差。第四,搜索式 CoT 优化目前每步只采样 $k=2$ 个候选、迭代 3 轮,未来可以探索更大的搜索空间(如 beam search 或 MCTS)来进一步提升推理质量,或结合 process reward model(PRM)做更细粒度的 step-level 监督。第五,作者用 PPL 作为推理质量的代理指标,但 PPL 本身只是 next-token 预测难度的度量,未来可以用更直接的指标(如执行通过率、人工评分)来构造搜索奖励。第六,方法的 grounding 策略目前仅基于静态结构信息(文件树、依赖图、AST),未来可以引入动态 grounding——例如在 Write 工具后真的执行单元测试,把测试结果作为 Observation 注入轨迹,让模型学会"写代码-测试-调试"这一完整的开发循环。第七,本文只在英文仓库上验证,可以扩展到中文、阿拉伯语等多语言仓库,验证 agentic trajectory 的语言无关性。第八,可以把损失函数的 mask 策略也作为学习目标的一部分——例如训练一个 critic 来自动决定哪些 Observation 应该被 mask。

复现评估

关于复现性,本文提供了较为充分但仍有缺失的信息。数据层面:作者使用了 30 万 GitHub 仓库作为种子数据,但论文未提供具体的仓库列表、筛选脚本或数据来源 URL;合成数据本身也未公开。模型层面:作者使用 Qwen3-30B-A3B-Instruct-2507 作为轨迹生成器,并基于 Llama-3-8B-Instruct 做持续预训练,这两个模型都是公开可下载的。代码层面:论文在附录 D 中给出了三段核心 prompt(Main-Agent、Sub-Agent、CoT 优化),这些 prompt 是复现的关键,但作者未给出完整的合成 pipeline 代码或训练脚本。算力层面:20B tokens 的持续预训练 8B 模型,按标准的 8x H100 设置估算大约需要 1500-2500 GPU hours(按 ~50k tokens/sec/GPU 的吞吐量估算),合成阶段由于需要多次调用 Qwen3-30B(带 PPL 计算)也需要相当的算力,作者未给出具体数字但属于行业标准配置。复现难度评估为中等偏难——核心算法(多智能体模拟 + 搜索式 CoT 优化 + 持续预训练)都有清晰的算法描述,但实际复现需要:(1) 收集 30 万仓库并实现筛选;(2) 用 Qwen3-30B 跑数千次轨迹合成调用,每次可能涉及多步推理 + Read/Write 工具模拟;(3) 对每个轨迹做 3 轮 × 每步 2 候选的 PPL 评估;(4) 用 64k 上下文窗口持续预训练 Llama-3-8B 20B tokens。整体复现性建议评级为:算法可复现、数据不可复现、训练成本中等到高。