“思考更长时间”而非“模型更大”是提升模型在复杂软件工程任务中表现的有效途径 | 学术研究系列

作者:明巍/临城/水德

还在为部署动辄数百 GB 显存的庞大模型而烦恼吗?还在担心私有代码库的安全和成本问题吗?通义灵码团队最新研究《Thinking Longer, Not Larger: Enhancing Software Engineering Agents via Scaling Test-Time Compute》探索了如何通过扩展测试时计算(Test-Time Compute Scaling, TTS),让个人可部署的开源大模型(如仅需单卡运行的 32B 模型),达到与顶级闭源模型(如 DeepSeek R1, OpenAI o1)相媲美的代码推理和问题解决能力。

核心亮点:

  1. 性能飞跃:32B 模型在结合了两种 Test Time Scaling 策略后,在 SWE-bench Verified 基准上,成功解决了 46.0% 的真实 GitHub Issue,与 DeepSeek R1 和 OpenAI o1 等更大规模的业界领先模型表现相当;

  2. 实证 TTS 现象:内部 TTS (Internal TTS) 通过高质量、多阶段的合成开发轨迹进行训练,让模型学会深度思考,模型在面对更有挑战的问题时,会动态地分配更多计算资源(输出更多 Token),这验证了“思考更长时间”确实能提升模型解决复杂任务的能力。

  3. 最优开发过程搜索:在软件开发的关键决策点(如仓库理解、故障定位)进行干预,利用过程奖励模型和结果奖励模型指导搜索,以更优的计算效率找到最佳解决方案。同时利用更大的推理 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 个仓库 的高质量数据集。
  • 轨迹引导与增强 (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 解决率比较

  1. 内部 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 比较

  1. 外部 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

  1. 自适应计算: 未来可以研究如何让模型根据任务难度动态、自适应地调整计算资源的投入,实现效率与效果的最佳平衡。
  2. 环境与验证: 提升自动化测试环境构建和解决方案验证的鲁棒性与规模,是进一步利用强化学习 (RL) 释放 SWE Agent 潜力的关键。
  3. 任务泛化: 将此 TTS 框架应用到更广泛的软件工程任务中,如测试用例生成和代码重构等。

🔎 详细方案请参考论文:

arxiv📄: https://arxiv.org/abs/2503.23803

Github🌟: https://github.com/yingweima2022/SWE-Reasoner

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑屏幕录制软件Captura源码编译(Win10,VS2022)

屏幕录像的意义&#xff1a; 教育教学方面 制作教学资源&#xff1a;教师可以通过录制屏幕来制作教学视频&#xff0c;演示软件操作、讲解复杂的知识点等。学生可以随时观看这些视频&#xff0c;便于复习和巩固知识&#xff0c;尤其对于一些抽象的概念或难以在课堂上一次性掌握…

记一次调用大华抓拍SDK并发优化

目录 一、问题分析 二、解决思路 三、贴代码 四、总结 一、问题分析 按惯例上问题&#xff1a; 设备告警采用高电平持续模式&#xff1a;一次开&#xff0c;不主动关就一直处于告警状态。 并发时多个请求下发 setDVRAlarmOutConfig&#xff0c;导致状态混乱。 “开 -&g…

Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰

本次使用图片来源于百度 import cv2 import time import numpy as np import pywtfrom PIL import Image, ImageEnhance#-i https://pypi.mirrors.ustc.edu.cn/simpledef super_resolution(input_path, output_path, model_path, scale4):# 初始化超分辨率模型sr cv2.dnn_su…

12个HPC教程汇总!从入门到实战,覆盖分子模拟/材料计算/生物信息分析等多个领域

在科学研究、工程仿真、人工智能和大数据分析等领域&#xff0c;高性能计算 (High Performance Computing, HPC) 正扮演着越来越重要的角色。它通过并行处理、大规模计算资源的整合&#xff0c;极大提升了计算效率&#xff0c;使原本耗时数日的任务能够在数小时内完成。 随着计…

使用Autocannon.js进行HTTP压测

目录 一、为什么选择Autocannon&#xff1f; 二、五分钟快速上手 1. 环境准备 2. 发起首个压测 3. 解读测试报告 三、高阶场景实战 场景1&#xff1a;POST请求压测 场景2&#xff1a;阶梯式压力测试 场景3&#xff1a;编程式集成测试 四、结果深度分析指南 1. 延迟分…

pnpm install报错:此系统上禁止运行脚本

依赖安装 报错信息&#xff1a; pnpm : 无法加载文件 C:\Users\XXX\AppData\Roaming\npm\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 …

第9章 多模态大语言模型

​​​​​​第1章 对大型语言模型的介绍第2章 分词和嵌入第3章 解析大型语言模型的内部机制第4章 文本分类第5章 文本聚类与主题建模第6章 提示工程第7章 高级文本生成技术与工具第8章 语义搜索与检索增强生成第10章 构建文本嵌入模型第11章 面向分类任务的表示模型微调第12章…

Python 绘图代码解析:用 Turtle 和 Colorsys 打造绚丽图案

注:本文为作者原创文章,未经许可禁止转载。 Python 绘图代码解析:用 Turtle 和 Colorsys 打造绚丽图案 在 Python 的世界里,有许多有趣的库可以用来创造精美的图形。今天,我们就来详细剖析一段使用turtle库和colorsys库的代码,看看它是如何绘制出独特图案的。 一、库的导…

RTMP 入门指南

1. RTMP 基础概念​​ ​​核心角色​​&#xff1a; ​​推流端&#xff08;Publisher&#xff09;​​&#xff1a;将音视频数据推送到服务器的设备&#xff08;如OBS、手机APP&#xff09;。​​服务器&#xff08;RTMP Server&#xff09;​​&#xff1a;接收推流并分发给…

Java Stream流 常用方法

Map 修改 用于修改集合里的值 public void findData(){ArrayList<String> list new ArrayList<>();list.add("张三");list.add("李四");List<String> collect list.stream().map(s -> s "a").collect(Collectors.toLi…

巧记英语四级单词 Unit5-上【晓艳老师版】

count 数&#xff0c; counter n.计算器&#xff0c;柜台 a.相反的 数数的东西就是计算器&#xff0c;在哪数&#xff0c;在柜台里面数&#xff1b;你和售货员的关系就是相反的(一个买货&#xff0c;一个卖货account n.账户&#xff0c;账号 一再的数accountant n.会计 一再的…

Git多人协作与企业级开发模型

目录 1.多人协作一 2.多人协作二 3.远程分⽀删除后&#xff0c;本地gitbranch-a依然能看到的解决办法 4.企业级开发模型 4.1.Git的重要性 4.2.系统开发环境 4.3.Git 分⽀设计规范 1.多人协作一 ⽬前&#xff0c;我们所完成的⼯作如下&#xff1a; 基本完成Git的所有本…

大众点评 mtgsig1.2 分析 mtgsig

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 部分代码 params[yodaRead…

(三) Trae 调试C++ 基本概念

调试C基本概念 一、调试基础概念1.1 调试信息格式1.2 DWARF格式和PDB格式生成(图解)1.3.典型工具链和调试信息 二、各工具链深度解析1. Clang 与 G 的 DWARF 差异 三 调试工具3.1 调试工具3.2 调试插件(Trae) 一、调试基础概念 1.1 调试信息格式 格式类型适用系统存在形式DWA…

Flink部署与应用——部署方式介绍

引入 我们通过Flink相关论文的介绍&#xff0c;对于Flink已经有了初步理解&#xff0c;这里简单的梳理一下Flink常见的部署方式。 Flink 的部署方式 StandAlone模式 介绍 StandAlone模式是Flink框架自带的分布式部署模式&#xff0c;不依赖其他的资源调度框架&#xff0c…

【智慧城市】新中地GIS开发实训:基于 Vue 框架的武汉智慧旅游系统

首页 地球自转页 控制台页 景点信息页 天气预报页 路线规划页 查询页 AI问答页 热力图页 测量页 来源&#xff1a; 【智慧城市】新中地GIS开发实训&#xff1a;优秀学生项目作品&#xff08;58&#xff09;基于 Vue 框架的武汉智慧旅游系统

C++入侵检测与网络攻防之网络嗅探以及ARP攻击

目录 1.tcpdump基本使用 2.tcpdump条件过滤 3.wireshark介绍 4.wireshark的介绍 5.tcp握手挥手分析 6.telnet服务的介绍和部署 7.复习 8.telnet服务的报文嗅探 9.网络嗅探基础 10.arp协议的解析 11.arp攻击原理以及试验环境 12.arp实验以及防御方式 1.tcpdump基本使…

【数据可视化-28】2017-2025 年每月产品零售价数据可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

系统与网络安全------弹性交换网络(3)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 STP协议 环路的危害 单点故障 PC之间的互通链路仅仅存在1个 任何一条链路出现问题&#xff0c;PC之间都会无法通信 解决办法 提高网络可靠性 增加冗余/备份链路 增加备份链路后交换网络上产生二层环路 …

广州 3D 展厅开启企业展示新时代​

为了突破传统展厅的局限&#xff0c;满足企业日益增长的展示需求&#xff0c;3D 展厅应运而生。3D 展厅是利用虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和三维建模等先进技术&#xff0c;构建出的一个高度逼真的数字化展示空间 。它打破了传统展…