首页
/ aider 代码编辑基准测试报告:量化评估 1106 系列 GPT-3.5 与 GPT-4 的编码能力

aider 代码编辑基准测试报告:量化评估 1106 系列 GPT-3.5 与 GPT-4 的编码能力

2026-09-07 17:19:25作者:廉彬冶Miranda

本文基于 aider 仓库中 2023 年 11 月发布的基准测试报告(aider/website/docs/benchmarks-1106.md),系统讲解 OpenAI 新一代 gpt-4-1106-previewgpt-3.5-turbo-1106 模型在 aider 代码编辑基准上的表现,并结合 benchmark/ 目录下的测试框架源码(benchmark/benchmark.pybenchmark/prompts.py)还原基准的完整运行机制。读完本文,你既能理解"两次尝试(two tries)"评测方法的设计意图,也能掌握如何运行 aider 的基准测试框架、解读其统计报告,从而自主评估任意新模型与 aider 的适配性。

aider 1106 模型代码编辑基准测试结果

背景:aider 为什么需要一个代码编辑基准

aider 是一个开源命令行聊天工具,用于借助 GPT 在本地 git 仓库中编辑代码。要完成这一任务,aider 必须做到三件事:可靠地识别 GPT 何时想要编辑源码、判断它想修改哪些文件、并准确应用它试图做的更改。做好这个"代码编辑"任务,需要三者的配合:一个好的 LLM、好的提示词工程、以及驱动 LLM 交互的好工具

Aider 的每一次重要变更——无论是提示词调整还是驱动 LLM 对话的后端改动——都会运行一次代码编辑基准来量化验证改动带来的是改进而非回归。1106 报告正是这一系列基准报告中的第 3 篇:当 OpenAI 于 2023 年 11 月发布新版 GPT-3.5 和 GPT-4 后,社区对其编码能力与上一代版本的差异高度关注,作者随即对这两个新模型完成了基准测试。

基准如何工作:133 个 Exercism Python 练习题与两次尝试机制

该基准使用 aider 尝试完成 133 个 Exercism Python 编程练习。每个练习由三部分组成:

  • 一个起始 Python 文件(implementation file),其中包含需要实现的函数/类骨架(stub);
  • 一份描述待解决问题的自然语言说明(markdown 格式);
  • 一套用于判断实现是否正确的单元测试。

基准给 aider 两次机会完成任务,这个设计与真实使用 aider 的体验高度一致:

  1. 第一次尝试:aider 向 GPT 提供待编辑的 stub 代码文件和描述问题的自然语言指令。这反映了日常使用 aider 的方式——把源码文件加入聊天、提出修改需求,改动会被自动应用到文件中。
  2. 第二次尝试:如果第一次之后测试套件失败,aider 把测试错误输出发给 GPT 并要求修复代码。这对应 aider 中的 /run pytest 类命令——在聊天中运行并把 pytest 结果分享给 GPT,你可以 /run 任何适合你语言/框架/场景的测试或 linter。

benchmark/prompts.py 可以看到这两次尝试实际发送的提示词模板:

instructions_addendum = """
####

Use the above instructions to modify the supplied files: {file_list}
Don't change the names of existing functions or classes, as they may be referenced from other code like unit tests, etc.
Only use standard libraries, don't suggest installing any packages.
"""

test_failures = """
####

See the testing errors above.
The tests are correct, don't try and change them.
Fix the code in {file_list} to resolve the errors.
"""

第一次尝试的指令 = Exercism 的 instructions.md + instructions_addendum 模板;测试失败后,第二次尝试的指令 = 测试错误输出 + test_failures 模板。注意基准全程只让 GPT 看到测试错误输出,而看不到单元测试的源码。

结果一:gpt-4-1106-preview(仅测试 diff 编辑格式)

该报告对 GPT-4 系列只使用了 diff 编辑方法进行测试,这正是 aider 当时对 gpt-4 默认采用的编辑格式(可参见 aider/models.pyapply_generic_model_settingsgpt-4 匹配到的 self.edit_format = "diff" 设置)。结论如下:

  • 新的 gpt-4-1106-preview 模型比 6 月版 GPT-4 模型快 2–2.5 倍
  • 首次尝试产出正确代码的能力更强:无需查看测试套件错误,即可做对 53% 的编程练习;而之前的模型首次尝试只能做对 46%–47%;
  • 在第二次"查看测试错误输出并修复 bug"的机会后,新模型表现约为 65%,与旧模型(63%–64%)基本持平。

配套的 aider/website/_posts/2023-11-06-benchmarks-speed-1106.md 速度报告给出了更细的响应速度数据:gpt-4-1106-preview 比 6 月版(0613)快 2–2.5 倍,而 gpt-3.5-turbo-1106 比 6 月版快 6–11 倍;一个令人意外的发现是,3 月版(0301)GPT-3.5 实际上比 6 月版(0613)更快。

结果二:gpt-3.5-turbo-1106(whole 与 diff 两种编辑格式)

GPT-3.5 系列同时用 wholediff 两种编辑格式做了基准测试,但结论是:所有 gpt-3.5 模型(包括最新的 1106 模型)都无法有效使用 diff 编辑格式。因此报告只比较 whole 格式的结果:

  • 新的 gpt-3.5-turbo-1106 完成基准的速度比早期 GPT-3.5 模型快 3–4 倍
  • 首次尝试的成功率 42%,与之前的 6 月版(0613)模型相当。11 月新模型和 6 月模型的首次尝试成绩(42%)都不如最初的 3 月版(0301)模型的 50%;
  • 第二次尝试后的成功率 56%,与 3 月版模型相当,略好于 6 月模型的 50%。

综合两个系列的结论可以概括为:1106 模型的最大卖点是显著提速(GPT-3.5 提速 3–4 倍以上,GPT-4 提速 2–2.5 倍),首次通过率小幅提升(GPT-4 从 46–47% 升到 53%),而最终通过率与旧模型基本持平。

基准框架的源码级细节

报告中的数字如何产生?以下结合 benchmark/benchmark.py 源码说明关键实现:

  • 两次尝试由 --tries 参数控制,默认值即为 2(benchmark/benchmark.pytries: int = typer.Option(2, "--tries", "-r", ...))。核心循环在 run_test_real 中:对 range(tries) 的每轮先调用 coder.run(with_message=instructions) 让模型改代码,再运行单元测试;全部测试通过则记录 True 并提前退出,否则把测试错误拼接 test_failures 模板后作为下一轮的 instructions
  • 断点续跑:每个练习目录下的 .aider.results.json 若已存在且可解析,该练习直接复用旧结果,避免重复调用 API。
  • 结果持久化:每个练习目录写入 .aider.results.json,包含 tests_outcomes(每轮通过与否)、costdurationsyntax_errorslazy_commentsprompt_tokens/completion_tokens 等字段;--stats 模式由 summarize_results 汇总为 pass_rate_1pass_rate_2percent_cases_well_formed 等统计项。
  • 确定性处理:为尽量让基准可复现,框架会记录所有 OpenAI API 请求与响应的 SHA 哈希(结果中的 chat_hashes 字段),并用 cleanup_test_output 从测试输出中剥离 unittest 的墙钟计时信息,避免时间字符串进入提示词造成随机性。
  • 失败归因统计:结果中单独统计 syntax_errorsindentation_errorsnum_malformed_responses(模型输出不符合编辑格式导致 aider 无法落盘)、exhausted_context_windows 等指标,用来区分"代码写错了"与"编辑格式没写对"这两类失败——这正是基准评估"编辑格式设计是否合理"的关键数据。

运行方式(摘自 benchmark/README.md,注意基准会在无监督状态下执行 LLM 生成的代码,因此必须在 Docker 容器内运行):

./benchmark/docker_build.sh   # 构建容器
./benchmark/docker.sh         # 进入容器
./benchmark/benchmark.py a-helpful-name --model gpt-3.5-turbo \
    --edit-format whole --threads 10 --exercises-dir polyglot-benchmark

# 汇总统计(无需在容器内)
./benchmark/benchmark.py --stats tmp.benchmarks/YYYY-MM-DD-HH-MM-SS--a-helpful-name

统计报告是一份 YAML 记录,其中的 pass_rate_1 / pass_rate_2 即对应本文两次尝试的百分比,同时记录 modeledit_formatcommit_hash(若仓库有未提交改动会加 -dirty 后缀),三者足以可靠复现一次基准运行。更多报告样例可参考 aider/website/_data/ 中的排行榜数据文件。

对 aider 编辑格式选择的实际影响

这份 1106 基准延续了 aider/website/docs/benchmarks.md 报告确立的方法论与结论方向:

  • whole 编辑格式要求模型返回更新后的整个文件(对应 aider/coders/wholefile_coder.py):输出简单、GPT-3.5 遵循度高,但每次都要"重新打字"整个文件,流式传输的延迟代价大;
  • diff 编辑格式要求模型以 <<<<<<< ORIGINAL / ======= / >>>>>>> UPDATED 围栏块给出局部修改(对应 aider/coders/editblock_coder.py):token 更省、速度更快,但 GPT-3.5 系列普遍无法稳定遵循该格式。

基准数据正是 aider 做出"对 GPT-3.5 用 whole、对 GPT-4 用 diff"这一默认配置决策的量化依据;后续模型(如 GPT-4 Turbo)在 aider/models.py 中被分配了 udiff 等更精细的格式,这一演进链同样以基准结果为准绳。

相关报告与更新说明

本系列基准报告用于持续评估各模型在 aider 上的代码编辑能力,可延伸阅读:

报告最后更新于 2023-11-14:OpenAI 放宽了限流(rate limits)后,此前受限速影响的部分数据已重新补齐,因此这些结果不再被视为初步(preliminary)数据。

适用前提提示:本文引用的模型名(如 gpt-4-1106-preview)与成功率均为 2023 年 11 月时点的测量结果,仅反映当时的模型快照;当前 aider/models.py 中已不再包含这些模型名的专用分支,若要用同一套 benchmark/ 框架评估现用模型,建议按照 benchmark/README.md 的流程在 Docker 中重跑,并以新的 pass_rate_* 指标为准。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.13 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.8 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
529
593
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
915
1.83 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.58 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.35 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.01 K
515
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
388