ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Qwen3-Coder 评测仓库中的 aider 实战解读:SWE Bench 主榜 18.9% pass@1 的评测方法论与源码实现

Qwen3-Coder 评测仓库中的 aider 实战解读:SWE Bench 主榜 18.9% pass@1 的评测方法论与源码实现 Qwen3-Coder 评测仓库中的 aider 实战解读SWE Bench 主榜 18.9% pass1 的评测方法论与源码实现【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-Coder导读本篇以 Qwen3-Coder 仓库内置的 aider 评测资源为核心源码位于qwencoder-eval/instruct/aider/aider/官方评测文章位于qwencoder-eval/instruct/aider/aider/website/_posts/2024-06-02-main-swe-bench.md完整还原 aider 在 SWE Bench 主榜上取得 18.9% pass1 成绩的评测过程、设计理念与结果分析。读完本文你将掌握 aider 的 plausible合理解决方案判定标准、交互式而非 Agentic 的设计哲学、两轮 GPT-4o Opus 交替重试的评测工作流以及--yes、--test-cmd pytest、--opus等关键命令行参数在源码中的真实实现细节可以直接把同一套工作流复用到你自己的代码库与评测任务中。背景SWE Bench 主榜 18.9% 与当时的结果定位SWE Bench 是面向 AI 编程系统的经典评测基准其主榜main SWE Bench基于真实开源仓库的 GitHub issue 构造任务。aider 官方在 2024 年 6 月的评测文章即本仓库qwencoder-eval/instruct/aider/aider/website/_posts/2024-06-02-main-swe-bench.md中报告aider 在主榜取得了18.9%的得分达到当时该基准的状态领先水平当时榜单顶部的对比条目为 Amazon Q Developer Agent 的13.8%基于 2,294 个实例其他被广泛引用的成绩包括 Devin 报告的13.9%基于 570 个实例该成绩建立在 aider 此前在难度更低的 SWE Bench Lite 上取得领先结果的基础之上对应文章见qwencoder-eval/instruct/aider/aider/website/_posts/2024-05-22-swe-bench-lite.mdLite 得分为 26.3%。需要特别强调的是这里报告的所有 aider 结果均为 pass1 结果且未使用 SWE Bench 提供的hints_text提示文本。aider 是在与 Devin 评测相同的、随机抽取的570 个 SWE Bench 问题上进行评测的。这一口径上的澄清非常关键hinted带提示与 passN 的分数不可与 unhinted pass1 直接对比aider 官方文章在 References 一节对此做了专门说明。本文按历史文档口径陈述上述成绩。评测数据与口径的具体定义均可在仓库内的源码与文档中复核读者如需复现可参考下文「评分计算」一节。设计哲学Interactive交互式而非 Agenticaider 取得该成绩依靠的并不是复杂的 Agent 编排而是其既有的三件核心能力静态代码分析、可靠的 LLM 代码编辑以及用于自动修复 lint 与测试错误的务实 UX。评测文章明确写道aider有意只保留非常有限且狭窄的 agentic 行为目的是避免长时间延迟、高昂的 token 成本以及让用户反复审查错误方案的负担aider 当时不使用 RAG、向量检索、工具调用也不允许 LLM 联网搜索或单方面执行代码aider 首先是面向工程师的交互式结对编程工具用户通过聊天界面提出改动需求实时看到代码被编辑lint 或测试报错时 aider 可以提供修复帮助但用户始终保有完整的交互控制权可以随时把误解拉回正轨避免浪费时间与 token。这一哲学在仓库源码中同样有迹可循。aider 的编辑、lint、测试三阶段反馈循环位于 base_coder.py编辑完成后执行 lint 检查若有错误会通过confirm_ask询问用户 Attempt to fix lint errors?随后运行 shell 命令并把输出回灌给模型若启用了自动测试auto_test再调用commands.cmd_test执行test_cmd并询问 Attempt to fix test errors?。每一步都以询问用户收尾——这正是交互式、非 Agentic设计在代码层面的直接体现。评测方法论两轮尝试的 harness 工作流主榜评测的整体流程如下与 Lite 评测方法一致但出于成本考虑把尝试次数从 6 次压缩到 2 次启动在每一个问题的 git 仓库中启动「aider GPT-4o」把问题陈述作为用户的首条聊天消息提交自动批准此后 aider 正常运行但所有建议都无需用户批准、一律接受合理性判定一个简单的 harness评测驱动脚本在 aider 产出的代码并非 plausibly correct看起来合理正确时对问题发起重试。所谓plausible指 aider 报告它已成功编辑仓库没有引入语法错误也没有破坏任何预先存在的测试模型切换重试若 GPT-4o 的方案不合理harness 会重新启动 aider、从零开始改用Claude 3 Opus再试一次兜底选择若两轮都没有找到 plausible 方案harness 会选择编辑/lint/测试问题最少的那个最 plausible方案。要点是aider 与 harness 全程只能访问每个问题仓库中预先存在的测试被留作评判标准的 acceptance tests验收测试 只在评测结束后用于统计哪些问题被正确解决评测过程中既不运行、也不可见。尝试次数为何是 2 次而不是 6 次Lite 评测中 aider 在 GPT-4o 与 Opus 之间交替最多尝试 6 次每模型 3 次而主榜有 570 个问题为控制运行成本主榜评测将总尝试次数限制为2 次一次 GPT-4o 一次 Opus。与真实开发流程的对应aider --yes --test-cmd pytest评测文章特别指出这套自动化评测流程与开发者平时用 aider 解决 GitHub issue 的方式非常相似在仓库中以下列命令启动 aider告诉它接受所有建议、并用 pytest 运行测试aider --yes --test-cmd pytest把 GitHub issue 的 URL 或文本粘贴进聊天aider 会自动拉取 URL 内容并尝试解决该 issue如果 aider 产出的代码 lint 或测试不过开发者可以借助 git 回退改动换模型再试一次aider --opus这两条命令在仓库源码中均有对应实现--yes在 args.py 中定义Always say yes to every confirmation对应文档 options.md 中的--yes条目环境变量AIDER_YES。在评测 harness 中正是它实现了所有建议一律接受--test-cmd在 options.md 中定义为 Specify command to run tests默认值为空列表环境变量为AIDER_TEST_CMD。其执行链路为main.py把args.test_cmd传入 coder见 main.py→ coder 将其写入系统提示中的平台信息见 base_coder.py→ 需要时经commands.cmd_test实际运行见 commands.py--opus在 args.py 中通过actionstore_const把--model固定为claude-3-opus-20240229对应文档 options.md 的--opus条目同理--4o把模型固定为gpt-4o-2024-08-06见 args.py。此外仓库还附带--auto-test自动测试开关默认关闭环境变量AIDER_AUTO_TEST见 options.md与--testRun tests and fix problems found见 options.md等测试相关参数共同支撑了评测中测试并修复这一环节。结果分解GPT-4o 单独即可达到领先水平仅使用 aider GPT-4o、每个问题只尝试一次的配置就拿到了17.0%的得分——这本身在当时已是一个领先结果之后才被下面GPT-4o Opus 组合的 18.9% 超越。组合评测中harness 先用 GPT-4o 尝试每个问题若未得到 plausible 方案则用 Opus 再试因此每个问题最多尝试两次。下表按轮次拆分了 570 个问题上产生的方案。每个方案要么是plausible 方案aider 报告编辑、lint、测试均无未解决错误要么是两轮中最 plausible的方案未解决编辑/lint/测试错误最少者表格同时给出了最终被验收测试验证为正确解决 issue 的 108 个方案尝试轮次Agent方案数占方案比例正确解决的方案数占正确解决比例SWE Bench Lite 得分1Aider GPT-4o41973.5%8780.6%15.3%2Aider Opus15126.5%2119.4%3.7%总计570100%108100%18.9%可以直观看到GPT-4o 承担了绝大多数问题73.5% 的方案来自第一轮且其方案质量更高80.6% 的正确解决来自第一轮Opus 作为第二顺位补充解决了 21 个问题把总分从 17.0% 推高到 18.9%。非 plausible 但正确为什么看起来不对也能过验收一个方案并不必须plausible才能正确解决问题。回顾定义plausible 只表示 aider 报告它成功完成了所有文件编辑、修复并解决了所有 lint 错误、解决了所有测试失败。但存在很多aider 未能做到上述事项、却仍能通过验收测试的原因仓库中可能本来就存在失败的测试。aider 动手之前这些测试就失败了它们可能与验收无关。SWE Bench 的验收只要求测试通过/失败的模式与人类开发的 gold patch金标补丁 一致——某些测试在验收时失败也没关系只要 gold patch 下它们同样失败即可仓库中可能本来就存在 lint 问题。如果残留的 lint 问题落在测试覆盖不足的代码路径上就不会影响验收结果aider 可能报告了编辑错误因为它认为 LLM 指定的编辑不符合系统提示中的编辑指令而未能应用。由于 LLM 未遵守系统提示它可能陷入混乱并请求冗余或无关的编辑——这类未解决的编辑错误未必对验收测试致命等等其他情形。理解了这一点就能解释一个看似矛盾的现象表格中 GPT-4o 的贡献记为 15.3%但只用 GPT-4o 试一次的独立成绩却是 17.0%。原因在于当允许 Opus 在 GPT-4o 之后补刀时Opus 可能提出某些错误方案而它们比 GPT-4o 的部分非 plausible 方案更 plausible于是这些更 plausible 但错误的方案会遮蔽eclipse并丢弃GPT-4o 早期生成的那些非 plausible 但正确的方案。因此增加尝试次数并不能保证正确解决的问题数单调递增——新方案可能解决新问题但也可能挤掉之前非 plausible 的正确方案。幸运的是净效应通常是增加或至少维持正确解决数这一点在主榜与 Lite 的全部尝试中均成立。评分计算验收测试如何判定正确解决harness 为 570 个问题各产出一个候选方案后由独立的评估脚本对每个方案运行完整测试套件包含被留出的验收测试并做两件关键处理丢弃 aider 对测试文件所做的任何改动确保验收时使用正确、未经修改的测试套件将候选方案的测试结果与人类开发的gold patch正确解决该 issue 的补丁的测试结果进行比对结果一致则判定该方案正确解决了 issue。再次强调边界这些验收测试只在 aider 与 harness 之外运行仅用于统计正确解决数在 aider 尝试解决问题的过程中它们从未被运行、使用甚至可见。最终统计aider 在评测的 570 个 SWE Bench 实例中正确解决了 108 个即 18.9%。在仓库中qwencoder-eval/instruct/aider/benchmark/目录存放着配套的评测配套文件swe_bench.py是用于绘制 pass1 对比图的脚本读取swe-bench.txt/swe-bench-lite.txt中的pass_rate% model数据并生成柱状图aider 自身的柱条会以高亮色突出显示而swe-bench.txt与swe-bench-lite.txt即为主榜与 Lite 的对比数据源可作为理解评测口径的第一手材料。附pass1 与 passN 的口径澄清为了让结果具备可比性评测文章在 References 一节专门澄清了指标口径pass1aider 内部虽然可能多次尝试上文 GPT-4o/Opus 两轮但它只会挑选并返回一个候选方案且只有这一个方案参与验收测试、计入得分因此属于 pass1passNN1指进行 N 次尝试、N 个方案全部送交验收测试只要任意一个通过即计为一次成功。两者不可混用——同一模型在 pass1 与 passN 口径下的分数没有可比性。评测文章同时强调图表中的对比条目均为 unhinted pass1 数据例如 Amazon Q Developer Agent2,294 个实例、SWE-Agent GPT-42,294 个实例等并特别提示 AutoCodeRover 官方页面展示的是未清晰标注的 pass3 结果而其论文 Table 2 报告的ACR-avg10.59%才是与之可比的 pass1 平均值。小结aider 在 SWE Bench 主榜的 18.9% 成绩本质上不是更多 Agent 能力的胜利而是静态代码分析 可靠编辑 lint/测试自动修复 谨慎的重试策略这套朴素工程的胜利。其评测流程——交互式驱动、plausible 判定、两轮模型切换、验收测试与 gold patch 比对——在 Qwen3-Coder 仓库的 aider 源码中均有完整对应args.py、base_coder.py、commands.py 与 options.md读者完全可以参照aider --yes --test-cmd pytest与aider --opus这两条命令把同一套问题驱动、测试校验、失败换模型的闭环应用到自己的代码库与评测工作中。【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-Coder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进