Aider 版本演进全记录:一个会自我编码的终端 AI 结对编程助手是如何迭代发布的
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),以及各阶段关键功能的落地脉络。
发布历史的文档形态:双文件 + 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.md 和 aider/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.py,FAQ 中专门有一节解释该机制:对仓库做类 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、.sh、Dockerfile、Gemfile、.github/workflows/*.yml、aider/resources/*.yml、语言测试夹具,外加几个硬编码的站点文件。随后显式排除:
- 所有
prompts.py(提示词文件不算"代码"); tests/fixtures/watch下的监视器测试素材;install.ps1、install.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。
- 健壮性:处理
BadGatewayError、ImageFetchError;修复异常映射只包含真实异常类的问题(避免运行时报错);修复符号链接循环导致的路径解析崩溃。 - 其他:移除已弃用的 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-5、gpt-5-2025-08-07)的设置匹配;接入 openai/gpt-5;适配最新 PostHog SDK 事件捕获 API;对 GPT-5 关闭 temperature 以获得更确定的输出。
v0.85.2 – v0.85.0:这一区间功能面很宽——
- 接入 Grok-4(
xai/grok-4、openrouter/x-ai/grok-4)、Kimi K2 等模型; - 支持 Responses API 模型(o1-pro、o3-pro)并更新 o3 定价;
- Gemini 2.5 系列(
gemini-2.5-pro、gemini-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.md、aider_conf.md、adv-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 系列并更新 sonnet、opus 默认别名;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_tokens、reasoning_effort; aider-args(python -m aider.args)无参运行时输出示例 YAML 配置;- 停止支持 Python 3.9。
v0.82.x:为 GPT-4.1 新增 patch 编辑格式,并加入 editor-diff、editor-whole、editor-diff-fenced 编辑格式;为 Gemini 2.5 Pro 增加 udiff-simple 格式;修复 git 生成 unified diff 中的文件路径处理。这些格式在 aider/coders/ 中各有对应实现(如 patch_coder.py、udiff_simple.py、editor_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.py 与 aider/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 的版本治理方式:
- 版本命名:v0.54.12 起切换为
vX.Y.Z.dev命名,并采用 setuptools_scm 让开发版本携带 git hash(见 pyproject.toml 的构建配置);scripts/blame.py用semver库解析 tag,只把vX.Y.0主版本 tag 视为统计边界。 - 发布流程:scripts/versionbump.py 负责版本号与发布物料;scripts/update-blame.sh 在发版时重算自写代码统计并写入站点数据;scripts/update-docs.sh 用 cog 重新生成 README、发布页、命令行选项文档等 16 个页面,保证
HISTORY.md与网页版、选项文档与args.py之间始终一致。 - 兼容性前提:v0.83.0 起不再支持 Python 3.9;模型能力(thinking tokens、reasoning effort、streaming 支持等)随 litellm 与模型元数据演进,发布记录中大量"更新模型设置/别名指向新预览版"的条目(如
gemini别名先后指向gemini-2.5-pro-preview-03-25、05-06预览、gemini-2.5-pro、gemini-3-pro-preview)说明别名是随模型上线持续重定向的滚动指针,使用时应以 aider/website/docs/config/model-aliases.md 当前指向为准。
结语
Aider 的发布历史 不只是一份 changelog:它同时是理解该项目迭代重心(模型接入、编辑格式扩展、仓库地图与语言覆盖、prompt 缓存与长输出)的路线图,也是一套可复现的"AI 写自己的代码"统计体系的产物——从 scripts/blame.py 的 git blame -M100 -C100 行级归属,到 aider/website/_data/blame.yml 的结构化数据,再到 aider/website/_includes/blame.md 的可视化图表,每一环都有源码可查。对研究"LLM 辅助开发下软件仓库的真实作者构成"这一话题的读者,这套基于纯 git 历史、无额外埋点的度量方法本身也值得借鉴。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
