“思考更长时间”而非“模型更大”是提升模型在复杂软件工程任务中表现的有效途径 | 学术研究系列
作者:明巍/临城/水德
还在为部署动辄数百 GB 显存的庞大模型而烦恼吗?还在担心私有代码库的安全和成本问题吗?通义灵码团队最新研究《Thinking Longer, Not Larger: Enhancing Software Engineering Agents via Scaling Test-Time Compute》探索了如何通过扩展测试时计算(Test-Time Compute Scaling, TTS),让个人可部署的开源大模型(如仅需单卡运行的 32B 模型),达到与顶级闭源模型(如 DeepSeek R1, OpenAI o1)相媲美的代码推理和问题解决能力。
核心亮点:
-
性能飞跃:32B 模型在结合了两种 Test Time Scaling 策略后,在 SWE-bench Verified 基准上,成功解决了 46.0% 的真实 GitHub Issue,与 DeepSeek R1 和 OpenAI o1 等更大规模的业界领先模型表现相当;
-
实证 TTS 现象:内部 TTS (Internal TTS) 通过高质量、多阶段的合成开发轨迹进行训练,让模型学会深度思考,模型在面对更有挑战的问题时,会动态地分配更多计算资源(输出更多 Token),这验证了"思考更长时间"确实能提升模型解决复杂任务的能力。
-
最优开发过程搜索:在软件开发的关键决策点(如仓库理解、故障定位)进行干预,利用过程奖励模型和结果奖励模型指导搜索,以更优的计算效率找到最佳解决方案。同时利用更大的推理 budget 会产生更优的性能。
方法:内外兼修的 Test-time Scaling 策略
我们提出了一个统一的测试时计算(TTS)扩展框架,包含两种互补策略:
1. 内部 TTS (Internal Test-Time Scaling): 内化深度思考能力
-
高质量轨迹合成 (High-Quality Trajectory Synthesis):
- 数据源 : 从 GitHub 上筛选 超过 1000 星标 的高质量仓库,收集真实的
<issue, pull-request, codebase>
三元组数据。 - 初始过滤: 应用启发式规则过滤数据,例如,保留描述足够详细的 issue (≥20 字符, ≤3 超链接),以及修改量适中 (1-5 个代码文件, 非纯测试文件修改) 的 PR。
- 环境构建与验证 : 利用
ExecutionAgent
尝试为每个仓库自动构建可执行的测试环境,确保后续能够进行真实的补丁验证。无法成功构建或运行环境的仓库被排除,最终形成包含约 9000 个 issue 和 300 个仓库 的高质量数据集。
- 数据源 : 从 GitHub 上筛选 超过 1000 星标 的高质量仓库,收集真实的
-
轨迹引导与增强 (Trajectory Bootstrapping):
-
基础框架 : 基于开源的
SWE-SynInfer
框架(包含仓库理解、故障定位、补丁生成三个阶段),增加了补丁验证 (Patch Verification) 阶段,形成SWE-SynInfer+
框架。在此阶段,模型需生成复现代码来自动验证补丁有效性,并在失败时进行迭代优化。 -
引导模型: 使用开源推理模型 DeepSeek R1作为教师模型,在其多次内部推理迭代和优化的能力下,生成详尽的、包含多轮思考与修正的 长思维链(Long CoT)轨迹。
-
开发上下文的拒绝采样 (Development-Contextualized Rejection Sampling):
- 多维质量把关 : 对生成的轨迹进行严格的多维度验证和过滤:
- 仓库理解准确性: 检查模型识别的待修改文件是否与开发者实际修改的文件一致。
- 故障定位准确性: 确认模型生成的补丁是否作用于开发者实际修改的代码位置(类、函数、代码块)。
- Issue 复现代码有效性: 验证生成的复现代码能否在原始代码上触发问题,在应用开发者补丁后问题消失。
- 补丁正确性: 应用模型补丁后,运行其生成的复现代码和仓库原有的单元测试,检查问题是否解决且无新问题引入。
- 复杂性过滤: 筛除掉基础模型(Qwen2.5 Coder 32B)无需复杂推理就能一次性解决的简单问题,确保训练数据能有效激发模型的深度推理潜力。
- 保留有效中间步骤: 如果一个轨迹的补丁验证失败,但之前的仓库理解、故障定位等步骤是正确的,保留这些正确的中间步骤数据,避免浪费有价值的推理过程信息。
- 多维质量把关 : 对生成的轨迹进行严格的多维度验证和过滤:
-
推理式训练 (Reasoning Training):
- 学习目标: 采用标准的监督学习,优化模型生成正确推理动作(包括思考过程和最终行动)的条件概率。损失函数同时计算轨迹中每个步骤的 "思考(think)"(规划、反思、修正等)和 "回答(answer)"(最终输出的 API 调用、代码补丁等)部分,促使模型学习完整的决策过程。
- 历史信息剪枝 : 为提高多轮推理效率,借鉴 DeepSeek R1 的机制,在生成第
i
步时,历史上下文中只保留第i-1
步的answer
部分,舍弃think
部分,减少冗余信息。
2. 外部 TTS (External Test-Time Scaling): 优化决策搜索路径
-
基于开发流程的搜索策略 (Development-Process-Based Search, Dev-Search):
- 核心思想: 软件工程任务是长链条决策过程,中间步骤的错误会严重影响最终结果。我们摒弃仅在终点验证或对每一步都进行低效验证的做法,选择在 三个关键决策阶段(仓库理解、故障定位、补丁生成)集中进行搜索和评估,以高效利用计算预算。
-
过程奖励模型 (Process Reward Model, PRM) 引导:
- 训练目标: 训练 PRM(基于基础模型微调)来判断中间输出的正确性(二元分类任务)。例如,判断识别的文件是否正确,定位的代码位置是否准确。
- 引导方式: 在每个阶段生成 N 个候选输出,使用 PRM 对其打分,保留 Top-k 的高分候选进入下一阶段,实现轻量级的、有指导的 Beam Search,有效剪枝低潜力路径。
-
执行验证与结果奖励模型 (Outcome Reward Model, ORM) 排序:
- 补丁验证: 在补丁生成阶段,利用模型生成的复现代码和仓库自带的回归测试,对候选补丁进行执行验证,确保其有效性且不破坏原有功能。
- 最终排序: 对于通过执行验证的多个候选补丁(可能存在多个),使用 ORM 进行最终排序。ORM 基于 DPO 进行训练,学习偏好"通过所有测试"的补丁优于"未通过测试"的补丁。重要的是,ORM 仅需 Issue 描述和候选补丁作为输入,不依赖中间推理步骤,易于集成。
* 所有模型均基于开源的Qwen2.5 Coder 32B模型进行训练,该模型可在消费级显卡上进行部署。
实验评估:
1. 整体性能 SOTA:
- 结果 :训练的 SWE-Reasoner 32B 模型结合了内部和外部 TTS (Unified TTC, budget=8) 后,达到了 46.0% 的 Issue 解决率。
- 对比 :在 ≤100B 参数量级 的模型中处于领先地位,超越了如 DeepSeek R1 671B (41.20%) 等更大的开源模型,并且接近业界顶尖的闭源模型 Claude 3.5 Sonnet v2 (46.20%) 和 OpenAI o1 (45.60%) 。(详见图1和表1)
- 泛化性与独特性 : 该模型在 SWE-bench 覆盖的 12 个不同 Python 仓库 上均表现出鲁棒的性能,在多数仓库上媲美或超越 DeepSeek R1 671B(详见图2)。此外,通过与其他模型的解决实例对比,我们的方法能够独立解决 17 个 其他模型无法解决的 Issue,展现了独特的解题能力。
图 1: 在 SWE-Bench Verified 上,对具有扩展测试时间计算的较小 LLM 与较大模型的性能进行比较
表 1: 与不同模型和框架在 SWE-bench Verified 基准上的性能比较。
图 2: 针对不同仓库的 issue 解决率比较
- 内部 TTS 研究分析:
- 不同难度性能优势:Long CoT 训练相比 Short CoT 训练在解决更难 issue 上提升明显(基于社区解决频率划分的 Level 5,效果提升约 6 倍,详见图 3)。
- Test-Time Scaling 现象:Reasoning 模型在解决更难的问题上会尝试输出更多 token,有明显的 test-time scaling 现象(SWE-Reasoner 和 OpenAI o1),Claude 3.5 Sonnet 也有这个 TTS 现象,但是整体输出 token 较少。而 Short CoT 模型则没有这种明显的自适应计算行为(详见图 4)。
图 3: 在不同难度的 SWE-bench Verified 上的不同模型的解决率
图 4: 在不同难度的 SWE-bench Verified 上的不同模型的平均输出 tokens 比较
- 外部 TTS 研究分析:
- Dev-Search 策略优势 ,在控制相同推理预算(Rollout 次数 1, 2, 4, 8)的条件下,我们提出的 Dev-Search 策略始终优于仅依赖执行验证 (Exec)、执行验证+ORM (ORM_Exec) 或投票 (Voting) 的基线方法。这证明了在关键开发流程中进行干预和指导能带来更优的搜索效率。(详见图 5)
- 预算与性能关系 (TTS) : 增加推理预算(Generation Budget)通常能带来性能的提升,再次验证了外部 TTS 的有效性 。预算的增加对于解决简单和中等难度(Level 1-4)的问题提升尤为明显。
- 高难度任务瓶颈 : 对于最高难度 (Level 5)的问题,过高的推理预算反而可能导致性能轻微下降。这暗示对于极其复杂的任务,仅靠外部搜索扩展可能已触及模型内在推理能力的瓶颈,需要内部 TTS(想得更深)的共同作用或更强的基础模型能力。(详见图 6)
图 5: 不同搜索方式在相同 budget 下的性能比较
图 6: 在不同难度的 SWE-bench Verified 上使用不同 budget 的能力比较
结论
本研究成功展示了通过统一的测试时计算(TTS)扩展框架,可以显著增强个人可部署的开源 SWE Agent 的代码推理和问题解决能力。我们证明了"思考更长时间"(增加推理计算)而非"模型更大"(增加参数)是提升模型在复杂软件工程任务中表现的有效途径。这项工作为在资源受限环境下(如私有部署)使用和发展高性能 SWE Agent 开辟了新的可能性。
展望与思考:更智能更自适应的 SWE Agent
- 自适应计算 : 未来可以研究如何让模型根据任务难度动态、自适应地调整计算资源的投入,实现效率与效果的最佳平衡。
- 环境与验证: 提升自动化测试环境构建和解决方案验证的鲁棒性与规模,是进一步利用强化学习 (RL) 释放 SWE Agent 潜力的关键。
- 任务泛化: 将此 TTS 框架应用到更广泛的软件工程任务中,如测试用例生成和代码重构等。
🔎 详细方案请参考论文:
arxiv📄: https://arxiv.org/abs/2503.23803

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文讲透“MCP协议+LazyLLM”实战:零基础秒建Agent分身!
情景重现(科技版) 👋重复劳动,事无巨细从0开始 每次针对一个全新的场景开发AI Agent应用时,都需要针对不同的功能需求实现许多“工具”,就像每个开发者都在自己锻造一套轮子,从提示词格式到函数调用,一个都不能少,工作量大且枯燥。明明想专注在AI的独特功能上,写着写着却发现怎么又是在折腾同样的上下文管理和工具对接的代码! 👋开源社区好轮子难整合 开源社区其实不缺“好轮子”——各种记忆库、中间件、工具插件层出不穷,但缺乏统一标准来整合。例如,有人实现了很棒的浏览器插件或数据库查询工具,但你接入自己项目时却发现,接口格式对不上、调用方法各异......东拼西凑像玩积木还找不到说明书。每接入一个新工具都要适配磨合,好比智能手机普及之前,不同设备各自用不同充电器接口,开发者疲于寻找对应的“转接头”。 👋对话上下文管理棘手 让AI持续“记住”上下文并保持状态一致,是一件头疼的事。对话一长,如何不混淆角色、不遗漏关键信息?如果多个Agent需要共享知识,又怎么方便地复用上下文?缺乏规范的情况下,很容易出现对话状态混乱,不是这边忘记了就是那边重复了,调试起来像“大海捞针”。 难怪很多程序员...
- 下一篇
万字长文 | Apache SeaTunnel 分离集群模式部署 K8s 集群实践
文章作者:雷宝鑫 整理排版:白鲸开源 曾辉 > Apache SeaTunnel官网链接: https://seatunnel.apache.org/ Apache SeaTunnel(以下简称SeaTunnel)是一款新一代高性能、分布式的数据集成同步工具,正受到业界广泛关注和应用。SeaTunnel支持三种部署模式:本地模式(Local)、混合集群模式(Hybrid Cluster Mode)和分离集群模式(Separated Cluster Mode)。 本文尝试介绍如何在K8s上以分离集群模式部署SeaTunnel,为有相关需求的伙伴提供完整的部署流程和配置案例参考。 前期准备 在开始部署之前,需要确保以下环境和组件已经准备就绪: Kubernetes集群环境 kubectl命令行工具 docker helm (option) 对于熟悉和具有Helm环境的部署,可以直接参考官网中使用Helm部署教程: https://seatunnel.apache.org/docs/2.3.10/start-v2/kubernetes/helm https://github.com/a...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Red5直播服务器,属于Java语言的直播服务器
- Linux系统CentOS6、CentOS7手动修改IP地址
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2全家桶,快速入门学习开发网站教程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长