作者/机构: IQuest Coder Team
本文介绍了IQuest-Coder-V1系列模型,这是一个新的代码大型语言模型(LLMs)家族,包含7B/14B/40B/40B-Loop等不同规模。该研究旨在缩小开源权重模型与像Claude 4.5 Sonnet这样的专有领导者之间,在长时程推理和处理复杂多文件代码库方面的差距。为了实现这一目标,作者提出了“代码流”(Code-Flow)多阶段训练范式,通过捕捉软件逻辑在不同阶段的动态演变来提升模型的智能密度。
技术贡献主要围绕一个四支柱的Code-Flow训练流程(如图2所示):
通过对IQuest-Coder-V1训练流程的系统性探索,研究团队得出了几项关键发现,这些发现挑战了代码LLM开发中的一些传统假设:
* 发现1:仓库转换数据(即代码提交的流程)比仅在静态快照文件上训练,为任务规划提供了更优越的信号。
* 发现2:在高质量代码退火之后、后训练之前,注入32k上下文的推理和智能体轨迹数据,可以作为一个关键的逻辑支架,在分布变化下稳定模型性能。
* 发现3:思考路径(利用RL)触发了一种在长时程任务(如SWE和代码竞赛任务)中自主错误恢复的新兴能力,这种能力在标准的指令SFT后训练路径中基本不存在。
IQuest-Coder-V1系列模型在多个关键的代码智能维度上取得了最先进的性能,包括智能体软件工程、编程竞赛和复杂工具使用。通过开源从预训练基础模型到最终思考和指令模型的完整白盒检查点链,该工作旨在推动自主代码智能和真实世界智能体系统的研究。
图2. IQuest-Coder-V1的代码流(Code-Flow)训练流程。
图1. IQuest-Coder-V1在不同基准测试上的性能。LiveCodeBench v6的分数来自IQuest-Coder-V1-40B-Loop-Thinking模型,其余分数来自IQuest-Coder-V1-40B-Loop-Instruct模型。橙色虚线代表所选模型的平均分。
LoopCoder架构。LoopCoder架构采用循环transformer设计,其中具有共享参数的transformer块以两个固定迭代执行。在第一次迭代中,输入嵌入通过transformer层处理,并带有位置偏移的隐藏状态。在第二次迭代期间,模型计算两种类型的注意力:全局注意力(其中第2次迭代的查询关注第1次迭代的所有键值对)和局部注意力(其中查询仅关注第2次迭代内的前序token以维持因果关系)。这两种注意力输出通过一个基于查询表示的学习门控机制进行组合,该门控控制全局上下文细化和局部因果依赖的加权混合。这种方法与原始的并行循环Transformer不同,它省略了token移位机制和推理特定的优化。
LoopCoder训练。LoopCoder的训练流程包括三个主要阶段,如图2所示。
表1. IQuest-Coder-V1的架构。
三阶段训练方法与基础设施。本文档描述了LoopCoder的三阶段训练方法论和基础设施。训练过程从(1)在通用和代码数据上进行预训练,并在高质量代码上进行退火;到(2)在推理、智能体和代码任务上进行上下文长度渐进(先32k后128k)的中训练;最后到(3)通过两条路径进行后训练——SFT和RL,分别用于思考模型(带有显式推理)或指令模型(用于指令遵循)。为了支持这项耗资数百万GPU小时的训练工作,该基础设施通过以下方式优先考虑计算效率:使用融合的门控注意力核减少内存带宽开销;通过点对点KV分片传输实现上下文并行,以支持超长上下文训练并降低内存成本;以及通过使用确定性重计算和张量指纹验证进行静默错误检测来确保可靠性,从而捕捉那些不会触发明确异常的硬件故障。
多语言预训练指导方针。我们采用了【索引24,Scaling laws for code: Every programming language matters,2025,arXiv】中关于代码预训练的指导方针,这对构建多语言代码语料库有直接影响。当训练token有限时,优先混合语法相关的编程语言(PLs)比简单地对单一PL进行上采样能带来更多改进。正向的协同效应表明,语言多样性,特别是当它跨越代码领域时,可以作为一种数据增强形式,提高模型的鲁棒性。对于现实的多语言预训练,混合语言的训练方案优于特定语言的微调。
扩展的缩放定律。传统的缩放定律将多语言代码视为同质的,但不同的编程语言对性能的贡献不同。我们通过显式地引入语言比例 $p = (p_1, ..., p_k)$ 来扩展这一定律:
$$\mathcal{L}(N, D ; p)=A \cdot N^{-\alpha_{N}(p)}+B \cdot D_{x}^{-\alpha_{D}(p)}+L_{\infty}(p)$$其中,$A_N(p) = \sum_i p_i \alpha_{N_i}$,$A_D(p) = \sum_i p_i \alpha_{D_i}$,以及$L_\infty(p) = \sum_i p_i L_{i\infty}$ 是从图3中各语言特定参数的比例加权平均值。
有效数据项。有效数据项捕捉了跨语言迁移的效果:
$$D_x=D_{all}\left(1+\gamma\sum_{L_i\neq L_j}p_{L_i}p_{L_j}\tau_{ij}\right)$$其中 $\tau_{ij}$ 是从表2中导出的迁移系数。
最终的缩放定律。我们可以得到最终的缩放定律:
$$\mathcal{L}^*(N, D) = A^* \cdot N^{-\alpha_N^*} + B^* \cdot D^{-\alpha_D^*} + L_\infty^*$$其中 $\alpha^*_N = 0.6859$, $\alpha^*_D = 0.2186$, $L^*_\infty = 0.2025$ 是在最优多语言分配下,针对多语言代码生成和翻译同时进行拟合的参数。
表2. 协同增益矩阵(重排后)。数值表示绝对性能,括号内显示与基线的相对改进。粗体数字表示百分比变化。背景强度表示幅度(深红色=更高增益)。
图3. 各种编程语言独立的缩放定律。图中显示了不同编程语言内在可预测性的清晰排序:C# < Java ≈ Rust < Go < TypeScript < JavaScript < Python。
通用语料库处理。为了构建IQuest-Coder的基础语料库,我们策划了一个主要来源于Common Crawl的大规模数据集。我们的预处理流程始于一个严格的清洗阶段,利用正则表达式去除低质量噪音和非信息性片段。我们通过一个分层去重策略确保数据完整性,该策略结合了精确匹配过滤和由高维嵌入模型驱动的模糊去重。为保障评估的有效性,我们实施了全面的去污染程序,以消除与常见基准测试的任何重叠。对于从Common Crawl中检索的编程数据,我们执行深入的抽象语法树(AST)分析,以验证其语法结构和结构完整性,这是我们代码流训练范式的关键一步。
代理分类器质量控制。为了规模化质量控制,我们训练了一套针对通用文本、代码和数学的领域特定代理分类器。这些代理分类器旨在模仿更大模型在质量评估方面的能力,为信息密度、教育价值和有毒内容等维度提供标注样本。在验证集上的实验结果证实,这些小型代理模型优于传统的基于FastText的方法,为选择高价值的token提供了更精确的信号。
增强代码相关事实性。为了增强LLM的代码相关事实性,我们将一个包含6600万样本的大规模指令语料库CodeSimpleQA-Instruct【索引25,Codesimpleqa: Scaling factuality in code large language models,2025,arXiv】融入预训练阶段。通过一个结构化的流程,采用LLM从每个聚类中自动生成事实性问答对,该流程包含明确的约束,以确保问题是客观、无歧义且时间不变的,并只有一个正确答案。这种方法产生了高质量、客观的技术评估,适用于知识评估平台,同时确保了时间不变的准确性,并且只需要极少的持续维护。
仓库演化模式学习。为了构建一个适合学习仓库演化模式的数据集,我们设计了一种基于项目生命周期的三元组构建策略。对于每个代码仓库,系统构建形式为($R_{start}$, P, $R_{end}$)的三元组,其中$R_{start}$代表项目在稳定开发阶段的代码状态,P表示捕捉两个代码状态之间差异的补丁信息,而$R_{end}$则代表经过一系列开发迭代后的代码状态。
起点选择原则。起点的选择遵循项目成熟度原则:提交(commits)选自项目生命周期中40%-80%百分位范围。这个区间对应项目的成熟开发阶段,此时代码库相对稳定,避免了早期开发的不确定性和后期维护阶段典型的碎片化变更。这种方法确保了训练数据能反映真实的软件开发模式。
端点搜索策略。基于选定的起点,系统向前搜索合适的终点提交,以形成完整的三元组。搜索策略考虑了代码变更的质量和代表性,确保每个三元组都捕捉了有意义的开发迭代过程。这种构建方法生成的训练数据既保持了代码演进的时间连续性,又确保了数据的多样性和信息密度,为LLM学习复杂的代码转换模式提供了理论上坚实的基础数据集。
代码补全。代码补全(Code completion)是代码智能的一项基础能力。该能力主要通过训练使用Fill-In-the-Middle (FIM)【索引1,Efficient training of language models to fill in the middle,2022,https://arxiv.org/abs/2207.14255】格式构建的数据来增强。在FIM范式中,一个代码文档被分割成三个部分:前缀(prefix)、中间(middle)和后缀(suffix)。训练目标是根据给定的前缀和后缀来预测中间内容。文件级FIM专注于单个文档,其中各部分通 过Fill-In-the-Middle (FIM)模式拼接起来进行训练。此外,仓库级FIM通过引入同一仓库中语义相似的代码片段作为额外上下文来辅助预测中间部分,从而扩展了此方法。
代码补全数据构建策略。我们主要采用两种策略来构建代码补全数据:基于启发式的方法和基于多级语法的方法【索引23,Execrepobench: Multi-level executable code completion evaluation,2024,arXiv】。基于启发式的方法包括两种技术:随机边界分割和随机行分割。随机边界分割在字符级别上划分代码文档,这增强了模型的泛化能力,并提升了其在生成大代码块或从特定字符继续生成时的性能。相比之下,随机行分割选择文档中的特定行作为补全目标,这更符合典型的用户交互模式。基于语法的方法利用了源代码固有的结构属性。通过使用抽象语法树(AST)表示,我们从具有不同特征的各种节点中提取代码片段。这种方法既保证了训练数据的随机性,又确保了代码的结构完整性。我们实现了多个层次级别,包括表达式级、语句级和函数级。基于这些节点,我们为文件级和仓库级任务构建了多种编程语言和多级别的补全数据,显著增强了训练样本的多样性。
任务结构。文件级补全的任务结构是 <|fim_prefix|>{code_pre}<|fim_suffix|>{code_suf}<|fim_middle|>{code_mid}<|im_end|>,而仓库级补全的任务结构是 <|repo_name|>{repo_name} <|file_sep|>{file_path1} {file_content1} <|file_sep|>{file_path2} {file_content2} <|file_sep|>{file_path3} <|fim_prefix|>{code_pre}<|fim_suffix|>{code_suf} <|fim_middle|>{code_fim}<|im_end|>。
两阶段中训练方法。这个中训练过程采用两阶段方法(阶段2.1在32K上下文,阶段2.2在128K上下文),以在管理计算成本的同时高效地扩展模型能力。两个阶段都在相同的核心数据类别上进行训练:推理问答(数学、编码、逻辑)、智能体轨迹、代码提交以及文件/仓库级别的Fill-in-the-Middle(FIM)数据。推理问答部分作为一个“推理运行时”,鼓励结构化的问题分解和一致性检查,而不是简单的模式匹配。而智能体轨迹数据通过让模型接触完整的行动-观察-修正循环以及密集的-环境反馈(命令、日志、错误、测试结果),来教授“闭环智能”。这种组合既提供了符号推理的支架,也提供了扎实的“代码世界”经验,使模型能够处理长时程任务、从错误中恢复并在扩展的上下文中保持连贯的计划。阶段2.2通过引入专门的128K序列长度样本,将这些能力特别扩展到仓库级别的推理。
后训练概述。后训练通过监督微调和强化学习,将预训练模型转化为专门的代码智能系统。此阶段使用涵盖代码工程、数学、智能体能力和对话的指令数据,并采用“模型在环”(model-in-the-loop)的合成方式,结合基于执行的验证。
模型为中心的数据构建框架。我们采用以模型为中心的框架,其中前沿的LLMs在严格的自动化验证下生成训练数据。对于客观领域,使用基于确定性执行的验证;对于主观领域,则使用结合了基于规则的检查、奖励模型和多智能体辩论的集成机制。我们的方法论涵盖了API编排、全栈工程、编程竞赛、代码推理、文本到SQL、代码编辑、终端基准测试、仓库级工程、工具使用和GUI智能体等多个方面。数据合成技术包括随机扰动、测试驱动的合成、逆向流程生成以及带有自动化环境构建的多阶段过滤。
大规模SFT。后训练过程在token数量上与预训练规模相当,通过优化的基础设施注入专门知识。这些优化包括:采用带有跨样本掩码的序列打包技术;使用带有延长低速率阶段的余弦学习率调度;以及一个将数据按难度排序的三阶段课程学习,从基础的指令遵循逐步过渡到对抗性样本,以确保稳定收敛并在复杂基准上取得卓越性能。
质量控制。质量控制确保只有经过验证的样本才能进入训练阶段,通过全面的沙盒执行来捕捉轨迹和指标、符号化的数学验证、针对主观评估的多智能体辩论,以及通过n-gram匹配和MinHash LSH去重进行积极的污染预防。此过程优先考虑质量而非数量,以提高在复杂基准上的泛化能力。
多目标优化策略。本节包括三个主要组成部分:(1)通过重放缓冲区、动态混合调整和组合式设计来减轻对齐税(alignment tax),从而在专业化的同时保留通用能力;(2)使用GRPO算法和clip-Higher策略,在编程竞赛任务上进行基于可验证反馈的强化学习,该学习基于测试用例通过率进行训练,且不设KL惩罚;(3)基于可扩展的云端沙盒基础设施构建的SWE-RL框架,该框架将真实世界的软件工程问题形式化为交互式RL环境。在此环境中,智能体在多个步骤中使用基于工具的动作,并通过GRPO进行训练,其奖励基于测试套件通过率并辅以效率正则化。这使得轨迹能够并行执行,从而实现了稳定的长时程代码推理和调试能力。这些方法共同催生了如自调试、跨语言迁移和改进的不确定性校准等新兴能力。
数据集:实验评估使用了广泛的基准测试集,覆盖了代码智能的多个方面。
模型架构: IQuest-Coder-V1系列包含从7B到40B的多个密集模型,并推出了采用循环transformer设计的LoopCoder变体(具体参数见表1)。
评估将IQuest-Coder-V1与一系列最先进的开源和闭源模型进行了比较,包括Anthropic、OpenAI、Google、阿里巴巴、DeepSeek等公司的模型。
表3. CrossCodeEval任务上的性能比较。
指令与推理模型评估:
表4. 代码生成任务上的性能比较。
表5. 代码推理评估的性能比较。
表6. 代码编辑任务上的性能比较。
表7. 代码效率任务上的性能比较。
表8. Text2SQL任务上的性能比较。
表9. 智能体编码任务(Terminal-Bench, Terminal-Bench 2.0, SWE-Verified)和通用工具使用任务(Mind2Web, BFCL V3)的综合性能比较。
表10. 安全性能比较,重点展示IQuest-Coder-V1。
本文介绍了IQuest-Coder-V1,一个通过“代码流”预训练范式和多阶段演进式训练,推动了自主软件工程领域最先进水平的代码大语言模型家族。通过在中训练阶段捕捉动态的仓库转换并整合广泛的推理轨迹与仓库级别的上下文,我们的模型为复杂的代码智能任务奠定了坚实的逻辑基础。IQuest-Coder-V1在涵盖智能体软件工程、编程竞赛和工具使用等多个基准测试中展现了卓越的性能,验证了我们训练方法的有效性。IQuest-Coder-V1-Loop变体通过循环架构创新,进一步解决了实际部署中的挑战,优化了模型容量与效率的权衡。通过分叉式的后训练方法——结合推理驱动的强化学习与指令调优——我们提供了为深度分析推理和通用辅助场景量身定制的专门化模型。通过开源完整的训练流程和模型检查点,我们旨在催化代码智能领域的进一步研究,并加速能够应对真实世界软件工程挑战的生产级智能体系统的发展。