你大概听过 Cursor、Copilot,但可能没认真用过 Aider——这个 GitHub 30k+ Star 的终端AI编程工具。问题在于,绝大多数人只知道 aider --model sonnet 然后聊天,完全不知道它藏着一套足以碾压 GUI 编码助手的隐藏技能。今天这篇文章,就是把你从"Aider小白"直接拉到"Power User"级别。
先说结论:Aider 不是另一个聊天机器人套壳。它是一个深度集成 Git 的代码编辑引擎,拥有 Repo Map 上下文、Architect 双模型、IDE 内 AI 注释、自动 Lint/Test 等一整套被严重低估的能力。国内几乎没人系统讲过这些技巧。
这是 Aider 最酷、国内最没人知道的功能,没有之一。
启动 Aider 时加上 --watch-files 参数:
aider --watch-files --model sonnet
然后在你的 IDE(VS Code、WebStorm、Vim 什么都行)里,直接在代码中写注释:
# 用 Click 库重构这个函数,支持 --host 和 --port 参数 AI!
if __name__ == "__main__":
app.run(debug=True)
// 实现这个函数,加上 NaN 和负数的错误处理 AI!
function factorial(n) {
保存文件,Aider 自动检测到这些注释并执行。注意三种后缀的含义:
| 注释标记 | 行为 |
|---|---|
AI |
标记上下文,不触发动作 |
AI! |
触发 Aider 修改代码 |
AI? |
触发 Aider 回答问题 |
关键操作步骤:
1. 终端启动 aider --watch-files
2. 在 IDE 中打开项目文件
3. 在需要修改的地方写 # 你的指令 AI!
4. 保存文件(Ctrl+S)
5. 切到终端查看 Aider 的修改结果
进阶玩法:你可以在多个文件里同时写 AI 注释(不加感叹号),最后在一个文件里写 AI! 触发。Aider 会把所有 AI 注释收集起来作为完整指令一次性执行。这意味着你可以跨文件协调修改——这个能力连 Cursor 都没有。
aider --architect --model opus --editor-model sonnet
Architect 模式是 Aider 的杀手级功能。它把一次编码任务拆成两步:
flowchart LR
A[你的需求] --> B[Architect Model<br/>如 Claude Opus]
B --> C[设计修改方案]
C --> D[Editor Model<br/>如 Claude Sonnet]
D --> E[精确编辑文件]
E --> F[提交 Git Commit]
style B fill:#ff6b6b,color:#fff
style D fill:#4ecdc4,color:#fff
style F fill:#95e1d3,color:#333
为什么这样分? 因为有些模型(如 o1)推理极强但不擅长精确编辑文件。让 o1 当 Architect 出方案,让 Sonnet 当 Editor 改代码,各司其职。
实际操作:
# 方式一:命令行直接启动
aider --architect --model o1 --editor-model sonnet
# 方式二:在 Aider 内切换
/model o1
/chat-mode architect
省钱技巧:用同一个模型做 Architect 和 Editor 也有效果——因为模型有两次机会思考和修改,质量通常比单次 code 模式更好。适合处理复杂的重构任务。
这是 Architect 模式的"轻量版",只用一个模型,但效果出奇地好:
> /ask 这个函数有什么性能问题?
# Aider 分析并回答...
> /ask 用异步重写的话需要改哪些文件?
# Aider 给出方案...
> do it ← 切到 code 模式,直接执行
# Aider 开始修改文件...
核心逻辑:先在 /ask 模式下充分讨论方案(不碰代码),达成共识后用 /code 或 /ok 一键执行。因为上下文已经包含了讨论过程,Aider 执行的准确率远高于直接说"帮我重构"。
快捷方式:
- /ask 你的问题 — 单次提问模式
- /code 你的指令 — 单次编码模式
- /chat-mode ask — 持久切换到 ask 模式
- /ok — 快速确认"就这样改"
90% 的 Aider 用户不知道这个功能。
创建一个 CONVENTIONS.md 文件:
- 优先使用 httpx 而不是 requests
- 所有函数必须加类型注解
- 使用 Pydantic v2 进行数据验证
- 错误处理用 loguru 记录日志
- 测试使用 pytest + pytest-asyncio
然后用 /read 加载(注意不是 /add):
aider --read CONVENTIONS.md
# 或在会话中
/read CONVENTIONS.md
为什么用 /read 而不是 /add? 因为 /read 把文件标记为只读+可缓存。如果模型支持 Prompt Caching(如 Claude),这个文件会被缓存,后续请求不重复计费。
永久加载:在 .aider.conf.yml 中配置,每次自动加载:
read: CONVENTIONS.md
实际效果对比:
- 不加 CONVENTIONS.md → Aider 用 requests、不加类型注解
- 加了 CONVENTIONS.md → Aider 用 httpx、自动加 -> str 类型注解
社区还有一个 conventions 仓库,里面有各种语言的最佳实践模板可以直接抄。
这是 Aider 与所有 GUI 编码助手的核心技术差异。
Aider 会自动构建一个仓库地图(Repository Map),使用图排序算法(类似 PageRank)计算哪些代码符号最关键:
# Aider 自动生成的 Repo Map 示例(你不需要手动操作)
aider/coders/base_coder.py:
├── class Coder:
│ ├── abs_fnames = None
│ ├── @classmethod create(self, main_model, edit_format, io, ...)
│ ├── abs_root_path(self, path)
│ └── run(self, with_message=None)
aider/commands.py:
├── class Commands:
│ ├── voice = None
│ ├── get_commands(self)
│ ├── get_command_completions(self, cmd_name, partial)
│ └── run(self, inp)
这意味着什么? 即使你只 /add 了一个文件,Aider 也能看到整个仓库的类结构、函数签名、调用关系。它知道你项目里有哪些模块,哪些工具函数可用。
调优参数:
# 增加 Repo Map 的 token 预算(默认 1k,建议 2k-4k)
aider --map-tokens 4096
# 查看当前的 Repo Map
/map
# 强制刷新(当你新增了很多文件时)
/map-refresh
实战建议:大型项目(1000+ 文件)建议把 --map-tokens 调到 4096 或更高。小型项目默认值够用。
每次 AI 改完代码都手动跑测试?Aider 能自动化这个过程:
# 启用自动 lint
aider --auto-lint
# 配置自定义 linter
aider --lint-cmd "ruff check --fix"
# 按语言配置不同 linter
aider --lint "python: ruff check" --lint "javascript: eslint"
# 启用自动测试
aider --auto-test --test-cmd "pytest tests/"
# 同时启用 lint + test
aider --auto-lint --auto-test --test-cmd "pytest"
工作流:
flowchart TB
A[你提需求] --> B[Aider 修改代码]
B --> C{自动 Lint}
C -->|有错误| D[Aider 自动修复]
D --> C
C -->|通过| E{自动 Test}
E -->|测试失败| F[Aider 自动修复]
F --> B
E -->|通过| G[Git Commit ✅]
style C fill:#f9d74e,color:#333
style E fill:#4ecdc4,color:#fff
style G fill:#95e1d3,color:#333
编译型语言技巧:用 lint 做单文件编译检查,用 test 做全项目构建:
# Rust 项目示例
aider --lint-cmd "rustc --edition 2021" --test-cmd "cargo build && cargo test"
# Go 项目示例
aider --lint-cmd "gofmt -d" --test-cmd "go build ./... && go test ./..."
# .NET 项目示例
aider --test-cmd "dotnet build && dotnet test"
完全不想花钱?用本地模型免费编程:
# 1. 拉取模型
ollama pull qwen2.5-coder:32b
# 2. 启动 Aider(注意用 ollama_chat 前缀)
aider --model ollama_chat/qwen2.5-coder:32b
重要配置:Ollama 默认只给 2k 上下文窗口,会静默丢弃超出的内容。Aider 默认会自动处理这个问题,但你也可以手动设置:
在项目根目录创建 .aider.model.settings.yml:
- name: ollama/qwen2.5-coder:32b
extra_params:
num_ctx: 65536
免费模型推荐:
| 模型 | 大小 | 编码能力 | 适合场景 |
|---|---|---|---|
qwen2.5-coder:7b |
4.7GB | ⭐⭐⭐ | 轻量修改、8GB 内存机器 |
qwen2.5-coder:32b |
19GB | ⭐⭐⭐⭐ | 日常开发、32GB 内存 |
deepseek-coder-v2:16b |
9GB | ⭐⭐⭐⭐ | 复杂逻辑、16GB 内存 |
codestral:22b |
13GB | ⭐⭐⭐⭐ | 多语言项目、16GB 内存 |
这是 2025-2026 年模型新增的能力,大多数用户完全不知道:
# 设置思考 token 预算
aider --thinking-tokens 8k
# 或在会话中动态调整
/think-tokens 10k
# 调整推理努力程度
aider --reasoning-effort high
/reasoning-effort medium
什么意思? 支持 Extended Thinking 的模型(如 Claude Sonnet 4.6、o1)可以在回答前"思考"。--thinking-tokens 控制思考预算,--reasoning-effort 控制推理强度。
省钱策略:
- 简单修改(改个变量名、加个注释)→ --thinking-tokens 0(关闭思考)
- 中等任务(新功能、bug 修复)→ --thinking-tokens 4k
- 复杂任务(架构重构、算法实现)→ --thinking-tokens 16k 或更高
动态切换:在会话中随时用 /think-tokens 和 /reasoning-effort 调整,不需要重启。
| 功能 | 命令 | 说明 |
|---|---|---|
| 语音输入 | /voice |
直接说话给 Aider,自动转文字 |
| URL 抓取 | /web https://docs.example.com |
抓取网页内容作为上下文 |
| 会话保存 | /save session.aider |
保存当前会话,下次 /load 恢复 |
| Token 报告 | /tokens |
查看当前上下文用了多少 token |
| Diff 查看 | /diff |
查看上次修改的 diff |
| 撤销修改 | /undo |
撤销 Aider 的最后一次 commit |
| 多行输入 | {tag ... tag} |
用自定义标签包裹多行文本 |
| 外部编辑器 | /editor 或 Ctrl-X Ctrl-E |
用 Vim/NeoVim 编写长 prompt |
| 快捷启动 | aider --sonnet / aider --opus |
省去 --model 的完整名字 |
| 暗色模式 | aider --dark-mode |
终端深色主题自动适配 |
| Vim 模式 | aider --vim |
启用 Vim 键绑定 |
| 复制上下文 | /copy-context |
把对话导出为 Markdown,可粘贴到 Web UI |
| 配置文件 | .aider.conf.yml |
所有参数都可以持久化到配置文件 |
| 你以为的 Aider | 实际上的 Aider |
|---|---|
| 只能在终端聊天 | --watch-files 支持 IDE 内 AI 注释 |
| 只能用一个模型 | --architect 支持双模型协作 |
| 手动选文件 | Repo Map 自动理解整个项目结构 |
| 改完手动测试 | --auto-lint --auto-test 全自动 |
| 只能用付费 API | ollama_chat/ 支持本地模型零成本 |
| 编码风格不可控 | CONVENTIONS.md 精确控制输出规范 |
| 推理深度不可调 | --thinking-tokens 精确控制 |
| 需要 GUI 工具 | 纯终端,SSH 远程服务器也能用 |
第一步:安装 Aider(5 分钟)
pip install aider-install
aider-install
第二步:创建项目配置文件 .aider.conf.yml
model: sonnet
read: CONVENTIONS.md
auto-lint: true
map-tokens: 2048
dark-mode: true
第三步:创建 CONVENTIONS.md 写入你的团队编码规范
第四步:用 --watch-files 模式打开,在 IDE 中体验 AI 注释魔法
第五步:遇到复杂重构,切到 --architect 模式,用双模型搞定
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
