Aider 上手——终端里的 AI 编程,不靠浏览器

pip 装一下,对着 repo 跑起来,diff-看-收 的循环就在 shell 里——不开 IDE、不开浏览器、不绑工具。

这篇讲什么

30 分钟内把 Aider 的终端 AI 编程循环跑起来。Aider 是 CLI——cd 进 git repo、跑 aider、在 shell 里对话,每次改它都给你看 git diff、每个接受的改都自动 commit,全程不开浏览器。这篇讲怎么把这个循环跑顺,不是把所有 flag 抠一遍。它治的是这种痛:装上 Aider、贴 API key、要它”重构一下”、看到一堆 diff hunk 就吓跑——没意识到精髓就是”每次改都让你 accept / reject”。

核心概念:

  • 每次改都是一个 git commit:每个接受的改都是单独 commit,可以 /undo
  • /add/drop:上下文你手动控——Aider 不会把整个仓库 index 进去。
  • Architect 模式:先用强模型出计划,再让 editor 模型写代码。

这篇适合谁看

活在终端里的开发者、SSH 进服务器干活的人、机器没 GUI 的人、或者就是不想给每个东西都装一个 Electron 应用的人。也适合想让 AI 编程循环可脚本化的人——Aider 有 headless 模式可以批量跑。想要图形 Composer 体验的,Cursor 新手 30 分钟跑通完整工作流是更好起点。

什么时候适合用

范围紧、想完全控上下文的改动——小重构、加测试、修一个具体 bug。也适合 CI 流:pre-commit 清理、脚本化迁移。和图形 agent 比,“探索代码库再提方案”的任务它弱,因为 Aider 等你 /add 把文件加进来。长时 shell agent 会话用 Claude Code 更合适。

开始前准备

  • Python 3.10+。python --version 确认。
  • 一个 git repo、工作区干净。Aider 每次改都 commit,未提交的改会和它的 commit 混在一起。
  • 至少一家 provider 的 API key:Anthropic(写代码首选)、OpenAI,或本地模型走 Ollama / LM Studio。
  • 选好一个小目标:改一个函数名、给一个模块加测试、修一个 bug。别选”重构项目”。

具体步骤

  1. pip 装。用 virtualenv 或 pipx,别污染系统 Python:
pipx install aider-chat
# 或:pip install aider-chat
aider --version
  1. API key 写进环境变量。写到 shell rc 里持久化:
export ANTHROPIC_API_KEY=sk-ant-...
# 或:export OPENAI_API_KEY=sk-...
  1. 在仓库根用指定模型启动。代码编辑 Sonnet 4.6 是安全默认;架构难活 architect 用 Opus 4.7:
cd ~/code/myproject
aider --model anthropic/claude-sonnet-4-6 \
      --architect --editor-model anthropic/claude-sonnet-4-6
  1. /add 加你想让它改的文件。别一股脑全加——挑这次任务相关的 1-5 个:
/add src/auth/login.ts
/add src/auth/login.test.ts
  1. 用大白话提一个小的具名改动。Aider 会回 diff、应用、commit。下一轮 prompt 之前看一眼 diff——那就是你的复核窗口。
  2. 错了就 /undo 撤上一次 commit。某文件不该在上下文里了,/drop src/auth/login.test.ts 拿掉。想看当前 diff 再决定继续,/diff
  3. 干完 /exit。仓库里多了一串小 commit,一次接受一个。想 PR 历史干净就 squash。

一段”逼它说实话”的 prompt

Aider 越紧的 prompt 越好用。存一份模板:

你在改我 /add 进来的文件。约束:
- 只做满足要求的最小改动。
- 不要碰我没 /add 的文件。需要别的文件,先问。
- 每次改后用一句话写它依赖的假设。
- 被改的函数有测试就更新;没有就说"没加测试;建议加 X"。

任务:<一个具体改动>

“先问再加文件”这一行很关键——不加这句 Aider 偶尔会对没在上下文的文件下手,produced 的 diff 直接打不上。

完成后检查

  • Aider 写的每个 commit message 读得通、写得对。不对就 git commit --amend 推前修。
  • 每个 commit 的 diff 小到 reviewer 两分钟能读完。
  • 每个 commit 后测试都过,不只是最后过。非琐碎改动在 Aider 轮次之间跑测试。
  • /add 的文件没被动过。git log --stat 验。
  • Architect 出的是真能跟着干的计划,不是含糊的”考虑重构”。差了就把 architect 的 prompt 也紧一紧。

怎么复用这套流程

  • 常用启动命令做成 shell alias:alias ai='aider --model anthropic/claude-sonnet-4-6 --architect'
  • 项目根放 aider.conf.yml:默认模型、忽略路径、editor 模型。提交,让队友继承。
  • 重复任务(跑测试、格式化)用 --lint-cmd--test-cmd,Aider 能自己验改动。
  • CI 里一次性跑用 --message 走非交互——改完 commit 退出。

建议的操作流程

/add 文件 → 提紧的改动 → 看 diff → 收下或 /undo → 重复 → /exit → 需要就 squash。

容易踩的坑

  • 把整个仓库 /add 进来。Aider 不是 indexer;上下文撑爆了反而提案质量更差。
  • 不用 git。Aider 要 git;没有就丢了 /undo 和 per-edit commit。
  • 工作区脏着就跑。你没提交的改和 Aider 的 commit 混一起,diff 没法看了。
  • 一轮要它做巨型重构。Architect 模式能缓解但 editor 模型在超宽 diff 上还是吃力——拆开。
  • Architect 模式用 GPT-5.4。规划用 GPT-5 或 Opus 4.7,编辑才用快模型。
  • 想批量复核却忘了 --no-auto-commits。默认每次都 commit,挺好直到你想每个改前再 amend 一下。

FAQ

  • Aider 能用本地模型吗?: 能,Ollama 或任何 OpenAI 兼容端点,--openai-api-base 指过去。质量不如前沿模型,循环一样。
  • 能在 CI 里 headless 跑吗?: 能——aider --message "任务" --yes 非交互、跑完退出。
  • 为啥 Aider 偶尔提的改打不上?: 多半是引了没 /add 的文件,或 diff 格式被打乱。把文件显式加进来再提一次。
  • .aider.conf.yml 是用户级还是仓库级?: 都行——仓库级覆盖用户级。团队默认配置进仓库 commit。

相关阅读

标签: #AI 编程 #教程 #Aider