首页
/ Aider 版本演进全记录:一个会自我编码的终端 AI 结对编程助手是如何迭代发布的

Aider 版本演进全记录:一个会自我编码的终端 AI 结对编程助手是如何迭代发布的

2026-09-05 09:53:21作者:咎岭娴Homer

Aider 的发布历史(Release history)记录了这个终端 AI 结对编程工具从 v0.6.0 到 v0.86.x 的完整演进:每一次模型接入(o1、DeepSeek R1、GPT-5、Claude 4.x、Gemini 2.5)、每一类新编辑格式(patch、udiff-simple、editor-* 系列)、每一个实用功能(watch files、architect 模式、prompt caching)都在其中留痕。更特殊的是,每个版本都附带一条"Aider 写了 xx% 的代码"的自统计数据——据 发布说明 记载,Aider 通常自己写出了每个版本约 70–80% 的新代码。读完本文,你能掌握这份发布记录的阅读方法、自写代码统计量的底层计算原理(基于 git blame),以及各阶段关键功能的落地脉络。

Aider 发布历史页面中展示的自写代码比例与新增代码行数图表

发布历史的文档形态:双文件 + Cog 代码生成

仓库中实际存在两份内容一致的发布历史文件:

  • 根目录下的 HISTORY.md:纯 Markdown 源文件,是版本记录的"原始文本";
  • 站点目录下的 aider/website/HISTORY.md:带 Jekyll front matter(标题、导航顺序、描述)的网页版本。

两者之间的同步由 cog 代码生成块完成。aider/website/HISTORY.md 中有一段显式注释:

<!--[[[cog
# This page is a copy of HISTORY.md, adding the front matter above.
text = open("HISTORY.md").read()
text = text.replace("# Release history", "")
cog.out(text)
]]]-->

也就是说,网页版正文就是根目录 HISTORY.md 去掉首行标题后的逐字拷贝。scripts/update-docs.sh 会把 HISTORY.mdaider/website/HISTORY.md 一起列入 cog 重新生成清单(README.md 需先于 index.md 处理,因为 index.md 用 cog 引入了 README.md),保证发布页与源记录不漂移。

自写代码统计:每个版本为何都标注"Aider wrote xx%"

发布说明 开头声明:"Aider writes most of its own code, usually about 70-80% of the new code in each release",并注明这些统计基于 Aider 仓库自身的 git 提交历史。其计算入口是 scripts/blame.pyFAQ 中专门有一节解释该机制:对仓库做类 git blame 操作,统计每个版本区间内所有新增代码行的作者,且只统计源代码文件,不含文档与提示词文件。

scripts/blame.py 的源码可以确认以下实现细节:

1. 作者如何被识别为 "aider"

get_commit_authors 遍历两 tag 之间的所有提交(git rev-list {start_tag}..{end_tag}),读取每个提交的作者名、subject 和完整消息。若满足以下任一条件,就在作者名后追加 (aider) 标记:

  • subject 以 aider: 开头(对应提交消息的作者前缀机制);
  • 完整消息中含 co-authored-by: aider(对应 --attribute-co-authored-by 等提交归属选项)。

这与发布记录中反复出现的提交归属功能相呼应:v0.49.0 引入 --attribute-commit-message-author / --attribute-commit-message-committer,v0.83.0 引入 --attribute-co-authored-by,v0.85.0 起 Co-authored-by 归属默认开启。

2. 哪些文件计入统计

blame 函数先列出指定修订点(git ls-tree -r --name-only)的全部文件,然后按扩展名白名单过滤,仅统计 .js.py.scm.shDockerfileGemfile.github/workflows/*.ymlaider/resources/*.yml、语言测试夹具,外加几个硬编码的站点文件。随后显式排除:

  • 所有 prompts.py(提示词文件不算"代码");
  • tests/fixtures/watch 下的监视器测试素材;
  • install.ps1install.sh 等排除清单文件。

3. 行级归属:git blame 带移动检测

对每个文件执行:

git blame -M100 -C100 -C -C --abbrev=9 {start_tag}..{end_tag} -- <file>

其中 -M100 / -C100 让 git 以 100% 相似度检测文件内/跨文件的行移动,两次 -C 进一步提升检测努力程度——这避免了"整段搬移即算新写"的虚高统计。逐行解析 blame 输出后按作者累加行数(跳过 ^ 开头的边界行),最终输出每个文件的 file_counts、全体作者的 grand_total、总行数、aider 行数与百分比(保留两位小数)。

4. 命令行用法与产物

脚本支持三种模式:默认从最近的 vX.Y.Z 主版本 tag 统计到 HEAD;--end-tag 指定结束 tag;--all-since 对起始 tag 之后的所有主版本 tag 逐对统计,并把结果合并、按 semver 排序后写入 YAML。--output 指定的输出文件即站点数据 aider/website/_data/blame.yml,其中每个条目形如:

- aider_percentage: 31.33
  aider_total: 47
  end_date: '2023-06-15'
  end_tag: v0.6.0
  start_tag: v0.5.0
  total_lines: 150
  ...

scripts/update-blame.sh 封装了发布时的调用:./scripts/blame.py "$VERSION" --all --output aider/website/_data/blame.yml

5. 统计如何变成网页图表

aider/website/_includes/blame.md 用 Chart.js 读取 site.data.blame,渲染两张柱状图:一张是各版本"Aider 新代码占比"(悬停提示同时给出具体行数与日期),另一张是按 Aider / Human 堆叠的新增代码行数。发布说明页正是通过 {% include blame.md %} 引入它。

值得注意的是各版本占比波动不小:从 blame.yml 早期数据看,v0.6.0 时 aider 占比仅 31%,而后期版本在 44%–93% 之间摆动(如 v0.79.2 达 93%、v0.82.0 达 92%、v0.86.0 达 88%),也存在 v0.76.1 这种 0% 的版本。这说明"自写代码比例"是逐版本按实际 blame 结果计算的度量,而非固定宣传口径。

最新 main 分支:GPT-5 系列、Claude 4.5/4.6 与 Gemini 3 预览

HISTORY.md 顶部的 "main branch" 小节记录了尚未打 tag 的变更,是当前开发主干的最新状态:

  • 模型接入:新增 Claude 4.5/4.6 模型支持并更新 sonnet/haiku/opus 别名;Gemini 扩展至 2.5 Flash / Flash-Lite 与 Gemini 3 预览模型,flash 别名指向 gemini/gemini-flash-latest;新增 DeepSeek Reasoner 及其成本与 prompt caching 元数据;OpenAI GPT-5.1/5.2 与 GPT-5-pro 的设置覆盖 OpenAI、Azure、OpenRouter 三家,含 chat 与 codex 变体,另有 o1-pro 与 GPT-5.3/5.4 系列、GPT-4.1-nano。
  • 交互:新增 /ok 命令,作为"让 Aider 执行所提方案"的快捷方式,可附带额外指示。
  • 仓库地图:支持 Fortran、Haskell、Julia、Zig 的代码 tag 提取,并适配新版 tree-sitter Python API。
  • 健壮性:处理 BadGatewayErrorImageFetchError;修复异常映射只包含真实异常类的问题(避免运行时报错);修复符号链接循环导致的路径解析崩溃。
  • 其他:移除已弃用的 google-generativeai 依赖;auto-commit 关闭时允许添加仓库外文件并把只读文件提升为可编辑。
  • 本版本 Aider 自写代码占比 62%。

近期版本脉络(v0.85.0 – v0.86.1):GPT-5 落地与 Responses API

v0.86.1:为 GPT-5 模型新增 reasoning_effort 设置,并对 GPT-5 家族默认禁用 temperature。

v0.86.0:扩展 GPT-5 在 OpenAI、Azure、OpenRouter 上的家族变体(含日期命名与 chat/mini/nano 变体)。自写代码占比 88%。

v0.85.5 – v0.85.4:为 GPT-5 强制使用 diff 编辑格式;修复版本化模型名(gpt-5gpt-5-2025-08-07)的设置匹配;接入 openai/gpt-5;适配最新 PostHog SDK 事件捕获 API;对 GPT-5 关闭 temperature 以获得更确定的输出。

v0.85.2 – v0.85.0:这一区间功能面很宽——

  • 接入 Grok-4(xai/grok-4openrouter/x-ai/grok-4)、Kimi K2 等模型;
  • 支持 Responses API 模型(o1-pro、o3-pro)并更新 o3 定价;
  • Gemini 2.5 系列(gemini-2.5-progemini-2.5-flash 及带 thinking tokens 支持的预览版);
  • 新开关:--add-gitignore-files(允许把 .gitignore 中列出的文件加入编辑范围)、--commit-language(提交消息语言);
  • thinking tokens 支持增强:可设为 0 显式关闭;
  • 仓库地图新增 MATLAB、Clojure 语言支持;
  • 自定义 PostHog 分析配置(--analytics-posthog-host--analytics-posthog-project-api-key);
  • DeepSeek 模型最大输出 token 提升至 65536;
  • 提交归属默认启用 co-authored-by。

scripts/update-docs.sh 可见,这些命令行开关的文档(options.mdaider_conf.mdadv-model-settings.md 等)同样由 cog 从 args.py 元数据生成,因此发布记录中的每个新 flag 都能在 aider/args.py 中找到对应的参数定义。

中期演进(v0.76.0 – v0.84.0):树坐语言包、patch 编辑格式与 architect 强化

v0.84.0:接入 Claude Sonnet 4 / Opus 4 系列并更新 sonnetopus 默认别名;OpenRouter onboarding 默认模型调整为免费版 deepseek/deepseek-r1:free、付费版 anthropic/claude-sonnet-4;GitHub Copilot token 作为 OpenAI key 使用时自动刷新。

v0.83.0 是一次"平台能力"版本:

  • --attribute-co-authored-by--disable-playwright--shell-completions 等新开关;
  • OpenRouter 模型参数(上下文窗口、定价)直接从官网自动拉取,并启用 thinking_tokensreasoning_effort
  • aider-argspython -m aider.args)无参运行时输出示例 YAML 配置;
  • 停止支持 Python 3.9。

v0.82.x:为 GPT-4.1 新增 patch 编辑格式,并加入 editor-diffeditor-wholeeditor-diff-fenced 编辑格式;为 Gemini 2.5 Pro 增加 udiff-simple 格式;修复 git 生成 unified diff 中的文件路径处理。这些格式在 aider/coders/ 中各有对应实现(如 patch_coder.pyudiff_simple.pyeditor_diff_fenced_coder.py),发布记录与源码模块一一对应。

v0.78.0 – v0.76.0

  • v0.78.0:/editor-model/weak-model 切换模型类型的命令;--reasoning-effort--thinking-tokens 的模型能力校验与 --check-model-accepts-settings 强制开关;Bedrock 支持 AWS_PROFILE
  • v0.77.0:采用 tree-sitter-language-pack,新增 130 个带 linter 支持的语言与 20 个仓库地图语言——这解释了仓库中 aider/queries/tree-sitter-language-pack/ 目录下 28 个 -tags.scm 查询文件的由来;/think-tokens/reasoning-effort 命令支持 8k、0.5M 之类的人类可读数值;--auto-accept-architect(默认 true)自动接受 architect 模式的修改;
  • v0.76.0:--thinking-tokens 控制思考类模型的 token 预算、显示思考内容、--notifications 桌面通知;切换至 tree-sitter-language-pack 作为 tree-sitter 支持实现;--model 取代旧的 --4o--opus 等快捷开关(后者被标记弃用)。

早期里程碑(v0.48.0 – v0.75.x):o1、watch、architect 与 prompt caching

发布记录的中后段勾勒出 Aider 核心交互形态的成型过程:

  • v0.58.0(architect 模式):引入 Architect/Editor 双模型组合——用强推理模型(如 o1-preview)当架构师、便宜快速的模型(如 gpt-4o)当编辑器,对应源码中的 aider/coders/architect_coder.py。同期有 /copy、vim 光标形状、"不再询问"批量跳过确认等。
  • v0.57.0 – v0.57.1:o1 模型支持(o1-preview 用 diff 编辑格式即可匹配 SOTA 结果);/run 在 Windows 下正确走 PowerShell/cmd。
  • v0.53.0 – v0.51.0--cache-keepalive-pings 每 5 分钟 ping API 防止 prompt 缓存过期;--map-refresh <always|files|manual|auto> 控制仓库地图刷新策略;--cache-prompts 为 Anthropic 模型缓存系统提示、仓库地图与只读文件。
  • v0.50.0:DeepSeek Coder 与 Mistral 的无限输出支持、--chat-mode <mode>/code 命令;从 setup.py 切换到 pyproject.toml
  • v0.48.0 – v0.49.0--subtree-only 限制 Aider 只看当前目录子树(针对大型/单体仓库的性能关键开关);/read--read 支持仓库外只读文件;/clipboard 粘贴剪贴板图片或文本。
  • v0.67.0 – v0.69.0(watch files)aider --watch-files 监视源码文件中以 "AI" 开头的单行注释并执行指令,AI! 触发处理全部注释;随后升级为 AI? 提问、监视所有文件、任意文本文件支持 #////-- 三种注释风格——对应 aider/watch.pyaider/watch_prompts.py
  • v0.68.0--copy-paste 模式与 /copy-context 命令,使 Aider 能与网页版 LLM 聊天界面协作;--api-key provider=key--set-env VAR=value 支持从命令行/YAML 设置任意供应商的 key。
  • v0.72.0 – v0.74.x:DeepSeek R1 支持(--model r1)、o3-mini 完全支持(--reasoning-effort low|medium|high)、Kotlin 仓库地图、Ollama 上下文窗口动态调整、Docker 容器以非 root 运行并设置 HOME=/app 持久化 ~/.aider
  • v0.75.0 – v0.75.2:Claude 3.7 Sonnet 基础支持与 thinking 支持铺垫、GPT-4.5-preview。

版本治理:版本命名、发布脚本与文档联动

从发布记录与仓库脚本可以还原 Aider 的版本治理方式:

  1. 版本命名:v0.54.12 起切换为 vX.Y.Z.dev 命名,并采用 setuptools_scm 让开发版本携带 git hash(见 pyproject.toml 的构建配置);scripts/blame.pysemver 库解析 tag,只把 vX.Y.0 主版本 tag 视为统计边界。
  2. 发布流程scripts/versionbump.py 负责版本号与发布物料;scripts/update-blame.sh 在发版时重算自写代码统计并写入站点数据;scripts/update-docs.sh 用 cog 重新生成 README、发布页、命令行选项文档等 16 个页面,保证 HISTORY.md 与网页版、选项文档与 args.py 之间始终一致。
  3. 兼容性前提:v0.83.0 起不再支持 Python 3.9;模型能力(thinking tokens、reasoning effort、streaming 支持等)随 litellm 与模型元数据演进,发布记录中大量"更新模型设置/别名指向新预览版"的条目(如 gemini 别名先后指向 gemini-2.5-pro-preview-03-2505-06 预览、gemini-2.5-progemini-3-pro-preview)说明别名是随模型上线持续重定向的滚动指针,使用时应以 aider/website/docs/config/model-aliases.md 当前指向为准。

结语

Aider 的发布历史 不只是一份 changelog:它同时是理解该项目迭代重心(模型接入、编辑格式扩展、仓库地图与语言覆盖、prompt 缓存与长输出)的路线图,也是一套可复现的"AI 写自己的代码"统计体系的产物——从 scripts/blame.pygit blame -M100 -C100 行级归属,到 aider/website/_data/blame.yml 的结构化数据,再到 aider/website/_includes/blame.md 的可视化图表,每一环都有源码可查。对研究"LLM 辅助开发下软件仓库的真实作者构成"这一话题的读者,这套基于纯 git 历史、无额外埋点的度量方法本身也值得借鉴。

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